Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно. Необходимо обновить браузер или попробовать использовать другой.
Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе
Так посмотрите стандартные модули языка, для чего они, если это возможно, вы найдете информацию. Чем не нравиться socket? И какой вопрос есть к решению?)
вы вообще читали всю ветку? там написано, что не так в решении со стэк оферфлоу. я даже процитировал его в прошлом ответе. ведите себя немного адекватнее, не нужно наезжать. мы здесь общаемся и обсуждаем важную тему. я искал решения со стандартными модулями и не через пень колоду. читал документацию по нескольким вроде бы подходящим модулям, искал в поисковиках
вы вообще читали всю ветку? там написано, что не так в решении со стэк оферфлоу. я даже процитировал его в прошлом ответе. ведите себя немного адекватнее, не нужно наезжать. мы здесь общаемся и обсуждаем важную тему. я искал решения со стандартными модулями и не через пень колоду. читал документацию по нескольким вроде бы подходящим модулям, искал в поисковиках
Если вы нашли решение помимо сокета, может быть поделитесь, на полном серьезе? Просто это было бы очень полезно. Я тут нашел решение для Linux, но оно такое же костыльное как и для Windows, через subprocess, если интересно, конечно:
вы вообще читали всю ветку? там написано, что не так в решении со стэк оферфлоу. я даже процитировал его в прошлом ответе. ведите себя немного адекватнее, не нужно наезжать. мы здесь общаемся и обсуждаем важную тему. я искал решения со стандартными модулями и не через пень колоду. читал документацию по нескольким вроде бы подходящим модулям, искал в поисковиках
Очень разочарован что вы находите мои ответы - наездом. Это не так, я просто упорно не могу понять и добиться от вас ответа на вопрос, чем вам не нравиться socket?) Потому что лично я не знаю решения со стандартными либами, кроме изобретения велосипеда. Может вы просветите, если найдете.
Если вы нашли решение помимо сокета, может быть поделитесь, на полном серьезе? Просто это было бы очень полезно. Я тут нашел решение для Linux, но оно такое же костыльное как и для Windows, через subprocess, если интересно, конечно:
Я на данный момент 3.9. Больше совместимости с разными модулями. А для того, чтобы найти решение, мне кажется, надо покопаться в тех модулях, которые находят ip по имени сетевого интерфейса. К примеру тот же netifaces. Но тогда надо будет покопаться в модулях, которые получают этот дефолтный интерфейс ))
Кстати, одним глазком глянул в getmac. Там они тоже пользуются socket. Не везде, конечно, но пользуют.
Залез сейчас в функцию getmac, которая получает сетевой интерфейс по дефолту. Там все довольно просто и интересно:
Python:
data = _read_file("/proc/net/route")
if data is not None and len(data) > 1:
for line in data.split("\n")[1:-1]:
iface_name, dest = line.split("\t")[:2]
if dest == "00000000":
return iface_name
return None
А в описании написано буквально вот что:
Код:
"""Получите интерфейс по умолчанию, прочитав /proc/net/route.
Это тот же источник, что и команда `route`, однако гораздо быстрее
быстрее прочитать этот файл, чем вызывать `route`. Если это не удается по какой-либо
причине, мы можем вернуться к системным командам (например, для платформы.
которая имеет команду route, но, возможно, не использует /proc?).
"""
Это для Linux соответственно. В Windows такой функции у данной библиотеки нет, почему-то.
То есть, по сути, ничего замудренного. Либо тот же парсинг route, либо чтение из файла.
опять вы ёрничаете. нормально не можете общаться?
это вполне нормальное желание иметь в языке инструменты для работы с сетью. есть же там socket. почему бы не сделать получение локального адреса простым способом?
хотя бы написать обертку для описанных выше способов и включить в состав стандартных модулей.
Залез сейчас в функцию getmac, которая получает сетевой интерфейс по дефолту. Там все довольно просто и интересно:
Python:
data = _read_file("/proc/net/route")
if data is not None and len(data) > 1:
for line in data.split("\n")[1:-1]:
iface_name, dest = line.split("\t")[:2]
if dest == "00000000":
return iface_name
return None
А в описании написано буквально вот что:
Код:
"""Получите интерфейс по умолчанию, прочитав /proc/net/route.
Это тот же источник, что и команда `route`, однако гораздо быстрее
быстрее прочитать этот файл, чем вызывать `route`. Если это не удается по какой-либо
причине, мы можем вернуться к системным командам (например, для платформы.
которая имеет команду route, но, возможно, не использует /proc?).
"""
Это для Linux соответственно. В Windows такой функции у данной библиотеки нет, почему-то.
То есть, по сути, ничего замудренного. Либо тот же парсинг route, либо чтение из файла.
А дальше идет еще одна функция, которая вызывается, если нет интерфейса в файле:
Python:
def _hunt_linux_default_iface():
# type: () -> Optional[str]
# NOTE: for now, we check the default interface for WSL using the
# same methods as POSIX, since those parts of the net stack work fine.
methods = [
_get_default_iface_linux,
lambda: _popen("route", "-n")
.partition("0.0.0.0")[2]
.partition("\n")[0]
.split()[-1],
lambda: _popen("ip", "route list 0/0")
.partition("dev")[2]
.partition("proto")[0]
.strip(),
]
return _try_methods(methods)
То есть, по сути, если брать за основу эту функцию, чтобы с ее помощью получить имя интерфейса, а уже на этом основании получить IP, то тут нет ничего запредельного. Пользуются парсингом, по сути параметров.
А дальше идет еще одна функция, которая вызывается, если нет интерфейса в файле:
Python:
def _hunt_linux_default_iface():
# type: () -> Optional[str]
# NOTE: for now, we check the default interface for WSL using the
# same methods as POSIX, since those parts of the net stack work fine.
methods = [
_get_default_iface_linux,
lambda: _popen("route", "-n")
.partition("0.0.0.0")[2]
.partition("\n")[0]
.split()[-1],
lambda: _popen("ip", "route list 0/0")
.partition("dev")[2]
.partition("proto")[0]
.strip(),
]
return _try_methods(methods)
То есть, по сути, если брать за основу эту функцию, чтобы с ее помощью получить имя интерфейса, а уже на этом основании получить IP, то тут нет ничего запредельного. Пользуются парсингом, по сути параметров.
А немного дальше еще одна функция, которая, в описании которой сказано, что можно еще получить IP и вот так вот:
Python:
def _fetch_ip_using_dns():
# type: () -> str
"""Determines the IP address of the default network interface.
Sends a UDP packet to Cloudflare's DNS (1.1.1.1), which should go through
the default interface. This populates the source address of the socket,
which we then inspect and return.
"""
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("1.1.1.1", 53))
ip = s.getsockname()[0]
s.close() # NOTE: sockets don't have context manager in 2.7 :(
return ip
Код:
""Определяет IP-адрес сетевого интерфейса по умолчанию.
Отправляет UDP-пакет на DNS Cloudflare (1.1.1.1), который должен пройти через
интерфейс по умолчанию. Это содержит адрес источника сокета,
который мы затем проверяем и возвращаем.
"""
Это да. Интересного там много, не спорю. Я даже когда начал кодить на питоне, поставил его поначалу. И все было замечательно, пока какой-то из модулей сказал, что надо ему другую версию. А точнее я об этом прочитал, когда в терминале ошибки полетели. Потому пока 3.9
опять вы ёрничаете. нормально не можете общаться?
это вполне нормальное желание иметь в языке инструменты для работы с сетью. есть же там socket. почему бы не сделать получение локального адреса простым способом?
хотя бы написать обертку для описанных выше способов и включить в состав стандартных модулей.
Не могу сказать, почему разработчики предпочли сделать именно так. Тот же сокет мог бы быть стандартным модулем, но является расширением. Не надо забывать и то, что сам Пайтон давольно старый язык, на момент создания не была так развита сетевая инфраструктура. В последние годы он стал популярным и начали появляться сторонние библиотеки. Может причина и в том, что на момент создания, работа с сетью не была приоритетом.
Не могу сказать, почему разработчики предпочли сделать именно так. Тот же сокет мог бы быть стандартным модулем, но является расширением. Не надо забывать и то, что сам Пайтон давольно старый язык, на момент создания не была так развита сетевая инфраструктура. В последние годы он стал популярным и начали появляться сторонние библиотеки. Может причина и в том, что на момент создания, работа с сетью не была приоритетом.
А немного дальше еще одна функция, которая, в описании которой сказано, что можно еще получить IP и вот так вот:
Python:
def _fetch_ip_using_dns():
# type: () -> str
"""Determines the IP address of the default network interface.
Sends a UDP packet to Cloudflare's DNS (1.1.1.1), which should go through
the default interface. This populates the source address of the socket,
which we then inspect and return.
"""
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("1.1.1.1", 53))
ip = s.getsockname()[0]
s.close() # NOTE: sockets don't have context manager in 2.7 :(
return ip
Код:
""Определяет IP-адрес сетевого интерфейса по умолчанию.
Отправляет UDP-пакет на DNS Cloudflare (1.1.1.1), который должен пройти через
интерфейс по умолчанию. Это заполняет адрес источника сокета,
который мы затем проверяем и возвращаем.
"""
В принципе да. Тот код, что я использовал в скрипте сканирования сети, в принципе и является универсальным для обеих ОС. Вернее не так, для всех ОС, так как будет работать везде одинаково. И более универсален, чем получение IP с помощью DNS Cloudflare, как в getmac. Ну, по крайней мере, по моему скромному мнению.
@zverb ну я же объяснял, почему этот способ не очень. он выглядит как костыль. ведь можно же написать для самого языка модуль на С который будет работать под капотом с самой ОС и определять айпи средствами ОС
или хотя бы обертку для разных ОС с использованием описанных выше способов. Чтобы было красиво, чтобы не надо было думать, как оно там работает. Это так же как работает например
@zverb ну я же объяснял, почему этот способ не очень. он выглядит как костыль. ведь можно же написать для самого языка модуль на С который будет работать под капотом с самой ОС и определять айпи средствами ОС
или хотя бы обертку для разных ОС с использованием описанных выше способов. Чтобы было красиво, чтобы не надо было думать, как оно там работает. Это так же как работает например
Я пользуюсь пока Windows, а все остальное на виртуалках. Почему-то из всего многообразия мне зашел только Mint. Ubuntu, когда то, еще когда была версия 16.04, нравилась. Теперь плакать хочется. Не особо что-то у меня она работает. Кальку ставить на рабочую машину пока желания нет, хоть и хочется попробовать. Если только обеспечить себе, с непривычки, ночку замечательных мгновений... ))) Mint на кодовой базе Debian тоже что-то не зашел. А чистый Debian пока не решаюсь. Мне одно время Free BSD понравилась. Очень уж отзывчивая система )) Но, все же пока винда. Я больше с ней проработал. И не все мне еще в Linux удобно. Хотя, понемногу привыкаю. По функционалу и прочим фишкам линукс-системы мне нравятся больше.
Хотел глянуть netifaces, но понял, что эта библиотека мне пока не по зубам. Она на C писана, а я в нем пока не в зуб ногой. Так что, тут пока приостановился я )) Но это пока я С не начну учить. Хоть и не скоро, но начну. Вот эту библиотеку можно было бы включить в стандартную комплектацию питона. Вроде бы раньше, до версии 3.7, что ли, в питона даже scapy включена была по умолчанию. Но это не точно. Я просто на форк наткнулся данной библиотеки. И там что-то подобное упоминалось, вроде.
Хотел глянуть netifaces, но понял, что эта библиотека мне пока не по зубам. Она на C писана, а я в нем пока не в зуб ногой. Так что, тут пока приостановился я )) Но это пока я С не начну учить. Хоть и не скоро, но начну. Вот эту библиотеку можно было бы включить в стандартную комплектацию питона. Вроде бы раньше, до версии 3.7, что ли, в питона даже scapy включена была по умолчанию. Но это не точно. Я просто на форк наткнулся данной библиотеки. И там что-то подобное упоминалось, вроде.
если не начинал с С и это не универовский предмет, а самостоятельное изучение, возможно стоит начать учить Rust вместо С. Думаю, на нем тоже можно написать модули для питона, но еще и много всего другого
На данном сайте используются cookie-файлы, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших cookie-файлов.