Установите определенный DNS-сервер, используя dns.resolver(pythondns)
Я использую dns.resolver
из dnspython.
Возможно ли установить IP-адрес сервера для использования в запросах?
Ответы
Ответ 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')