Как сделать чтобы gethostbyname возвращала ip в моей сети?
После перехода на debian 12 gethostbyname стала возвращать 127.0.1.1. Я пробовал удалить строку с этой привязкой в hosts, но не помогло.
Как это исправить? может было у кого нибудь такое?
Ответы (1 шт):
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 никогда не было надежным. Эта функция только для определения внешних адресов.