我正在使用dnspython中的dns.resolver
。
是否可以设置用于查询的服务器的IP地址?
答案 0 :(得分:70)
虽然这有点旧帖,但我会跳进来。我遇到了同样的挑战,我想我会分享解决方案。因此,基本上配置文件将填充您正在使用的dns.resolver.Resolver的'nameservers'实例变量。因此,如果你想强迫你的解析器使用特定的名称服务器,你可以像这样直接地做:
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')
希望有人觉得它很有用。
答案 1 :(得分: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')
或者您可以仅为某些查询使用单独的解析程序对象:
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')
答案 2 :(得分:3)
由于没有关于如何在 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.']
答案 3 :(得分:0)
您没有在问题中指定,但假设您正在使用the resolver from dnspython.org,文档表明您要在解析器对象上设置nameservers
属性。
虽然提供/etc/resolv.conf-style文件以传递给constructor's filename
argument可能更容易。
答案 4 :(得分:0)
dns.resolver.Resolver.query()已弃用。使用dns.resolver.Resolver.resolve()。请参见https://github.com/rthalley/dnspython/blob/master/dns/resolver.py的DeprecationWarning