Подтвердить что ты не робот

Установите определенный DNS-сервер, используя dns.resolver(pythondns)

Я использую dns.resolver из dnspython.

Возможно ли установить IP-адрес сервера для использования в запросах?

4b9b3361

Ответ 1

Хотя это несколько старый поток, я вскочу. Я столкнулся с одним и тем же вызовом, и я решил поделиться этим решением. Таким образом, в основном файл конфигурации будет заполнять переменную экземпляра "nameservers" используемого вами dns.resolver.Resolver. Следовательно, если вы хотите принудить свой Resolver использовать определенный сервер имен, вы можете сделать это прямо следующим образом:

import dns.resolver

my_resolver = dns.resolver.Resolver()

# 8.8.8.8 is Google public DNS server
my_resolver.nameservers = ['8.8.8.8']

answer = my_resolver.query('google.com')

Надеюсь, что кто-то сочтет это полезным.

Ответ 2

Вы не указываете в своем вопросе, но при условии, что вы используете распознаватель с dnspython.org, в документации указано, что вы хотите установите атрибут nameservers объекта Resolver.

Хотя может быть проще предоставить файл /etc/resolv.conf-style для перехода к аргументу конструктор filename.

Ответ 3

Да, это так.

Если вы используете удобную функцию dns.resolver.query(), как это,

import dns.resolver
r = dns.resolver.query('example.org', 'a')

вы можете повторно инициализировать распознаватель по умолчанию, например, такой конкретный сервер имен (или список), например:

import dns.resolver
dns.resolver.default_resolver = dns.resolver.Resolver(configure=False)
dns.resolver.default_resolver.nameservers = ['8.8.8.8', '2001:4860:4860::8888',
                                             '8.8.4.4', '2001:4860:4860::8844' ]
r = dns.resolver.query('example.org', 'a')

Или вы можете использовать отдельный объект resolver только для некоторых запросов:

import dns.resolver
res = dns.resolver.Resolver(configure=False)
res.nameservers = [ '8.8.8.8', '2001:4860:4860::8888',
                    '8.8.4.4', '2001:4860:4860::8844' ]
r = res.query('example.org', 'a')