使用dns.resolver设置特定的DNS服务器
我正在使用来自 dnspython 的 dns.resolver
。
请问可以设置查询时使用的服务器的IP地址吗?
4 个回答
12
因为在2021年没有关于如何使用dnspython的例子,所以我想分享一个:
import dns.resolver
resolver = dns.resolver.Resolver()
resolver.nameservers = ['8.8.8.8'] # using google DNS
result = resolver.resolve('google.com', 'NS')
nameservers = [ns.to_text() for ns in result]
输出结果:
['ns1.google.com.', 'ns3.google.com.', 'ns2.google.com.', 'ns4.google.com.']
13
是的,确实可以。
如果你像这样使用方便的函数 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')
或者你也可以为某些查询使用一个单独的解析器对象:
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')
114
虽然这个话题有点老了,但我还是想说说我的看法。我也遇到过同样的问题,所以想分享一下我的解决办法。简单来说,配置文件会填充你正在使用的 dns.resolver.Resolver 的 'nameservers' 实例变量。因此,如果你想强制你的 Resolver 使用特定的 DNS 服务器,你可以直接这样做:
import dns.resolver
my_resolver = dns.resolver.Resolver()
# 8.8.8.8 is Google's public DNS server
my_resolver.nameservers = ['8.8.8.8']
answer = my_resolver.query('google.com')
希望对某些人有帮助。