Socket.gethostbyaddr() возвращает пустой список псевдонимов в Linux, но не в Windows

#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 и его цели, в то время как другой преобразователь может просто свернуть цепочку и вернуть окончательный ответ.