#python #linux #sockets #alias #gethostbyaddr
#python #linux #сокеты #псевдоним #gethostbyaddr
Вопрос:
Socket.gethostbyaddr() Python возвращает пустой список псевдонимов в Linux
Я пробовал с Python2 и Python3 как в Windows, так и в Linux. Он работает в Windows, но не в Linux (как Ubuntu, так и RedHat), используя тот же IP для разрешения, конечно. Я также выполнил захват wireshark в обеих системах, и мы четко видим ответ DNS, содержащий все псевдонимы.
import socket
print(socket.gethostbyaddr('192.168.11.1'))
В Windows я получаю ответ типа so, который в порядке:
('test123.com', ['alias1.test123.com', 'alias2.test123.com'], ['192.168.11.1'])
В Linux я получаю :
('alias1.test123.com', [], ['192.168.11.1'])
Кто-нибудь знает исправление?
Комментарии:
1. список псевдонимов — это (возможно, пустой) список альтернативных имен хостов для одного и того же адреса
2. Нет «исправления», потому что ваши примеры не работают последовательно. На моем компьютере с Windows я также не получаю записи псевдонимов. Это выглядит точно так же, как в Linux или в WSL Ubuntu. Это во многом зависит от того, как расположены записи A и CNAME, и каков именно ваш запрос.
3. Запрос представляет собой запрос PTR для 1.11.168.192.in-addr.arpa
4. @GuillaumeVertefeuille Это обратный DNS-запрос для 192.168.11.1, который является частным IP. Единственный сервер имен, который может ответить на этот вопрос, — ваш собственный.
5. У вас может быть запись PTR, указывающая на запись CNAME. Что может вызвать странное поведение, подобное этому. Потому что записи PTR должны указывать на имена с записями A или AAAA, то есть канонические имена. Но поскольку это было полезно и большинство DNS-серверов поддерживали его, некоторые люди указывают на CNAME, он же псевдоним. Но способ их разрешения не является стандартным. Можно вернуть CNAME и его цели, в то время как другой преобразователь может просто свернуть цепочку и вернуть окончательный ответ.