Как сделать чтобы gethostbyname возвращала ip в моей сети?

Рейтинг: 0Ответов: 1Опубликовано: 23.06.2023

После перехода на debian 12 gethostbyname стала возвращать 127.0.1.1. Я пробовал удалить строку с этой привязкой в hosts, но не помогло.

Как это исправить? может было у кого нибудь такое?

Ответы

▲ 0Принят
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 никогда не было надежным. Эта функция только для определения внешних адресов.