Как сделать чтобы gethostbyname возвращала ip в моей сети?
После перехода на debian 12 gethostbyname стала возвращать 127.0.1.1. Я пробовал удалить строку с этой привязкой в hosts, но не помогло.
Как это исправить? может было у кого нибудь такое?
После перехода на debian 12 gethostbyname стала возвращать 127.0.1.1. Я пробовал удалить строку с этой привязкой в hosts, но не помогло.
Как это исправить? может было у кого нибудь такое?
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.connect(('1.1.1.1', 1234))
local_ip, local_port = sock.getsockname()
socket.SOCK_DGRAM
- не осуществляет реальное подключение при вызове connect
.
('1.1.1.1', 1234)
- любой адрес из сети в которую должен смотреть сокет.
Линукс выбирает подходящий интерфейс и привязывает сокет к нему во время "подключения".
Если не сделать connect
, то Линукс отдает первый попавшийся адрес для хоста, а это обычно 127.0.0.1
или 127.0.1.1
.
gethostbyname
не смотрит локальные адреса, а обращается к ресолверу, который смотрит днс и другие сервисы. Определение локального адреса через gethostbyname никогда не было надежным. Эта функция только для определения внешних адресов.