Как я могу сделать поиски DNS в Python, включая обращение к/etc/hosts?

dnspython сделает мои поиски DNS очень приятно, но он полностью игнорирует содержание /etc/hosts.

Существует ли вызов библиотеки Python, который сделает правильную вещь? т.е. проверьте сначала в etc/hosts, и только отступите к поискам DNS иначе?

87
задан Day 24 August 2011 в 11:14
поделиться

2 ответа

Я не совсем уверен, хотите ли вы выполнять поиск DNS самостоятельно или вам просто нужен IP-адрес хоста. Если вам нужно последнее,

import socket
print(socket.gethostbyname('localhost')) # result from hosts file
print(socket.gethostbyname('google.com')) # your os sends out a dns query
104
ответ дан 24 November 2019 в 07:45
поделиться

Нормальное разрешение имен в Python работает нормально. Зачем вам нужен DNSpython для этого. Просто используйте socket getaddrinfo, который следует правилам, настроенным для вашей операционной системы (в Debian он следует за /etc/nsswitch.conf:

>>> print socket.getaddrinfo('google.com', 80)
[(10, 1, 6, '', ('2a00:1450:8006::63', 80, 0, 0)), (10, 2, 17, '', ('2a00:1450:8006::63', 80, 0, 0)), (10, 3, 0, '', ('2a00:1450:8006::63', 80, 0, 0)), (10, 1, 6, '', ('2a00:1450:8006::68', 80, 0, 0)), (10, 2, 17, '', ('2a00:1450:8006::68', 80, 0, 0)), (10, 3, 0, '', ('2a00:1450:8006::68', 80, 0, 0)), (10, 1, 6, '', ('2a00:1450:8006::93', 80, 0, 0)), (10, 2, 17, '', ('2a00:1450:8006::93', 80, 0, 0)), (10, 3, 0, '', ('2a00:1450:8006::93', 80, 0, 0)), (2, 1, 6, '', ('209.85.229.104', 80)), (2, 2, 17, '', ('209.85.229.104', 80)), (2, 3, 0, '', ('209.85.229.104', 80)), (2, 1, 6, '', ('209.85.229.99', 80)), (2, 2, 17, '', ('209.85.229.99', 80)), (2, 3, 0, '', ('209.85.229.99', 80)), (2, 1, 6, '', ('209.85.229.147', 80)), (2, 2, 17, '', ('209.85.229.147', 80)), (2, 3, 0, '', ('209.85.229.147', 80))]
87
ответ дан 24 November 2019 в 07:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: