使用DNS.resolver(pythondns)设置特定DNS服务器

使用DNS.resolver(pythondns)设置特定DNS服务器,python,dns,Python,Dns,我正在使用来自的dns.resolver 是否可以设置用于查询的服务器的IP地址?您在问题中没有指定,但假设您正在使用,文档表明您要在解析器对象上设置属性 尽管提供一个/etc/resolv.conf样式的文件来传递给.可能会更容易,尽管这是一个有点旧的线程,但我还是要跳进去。我遇到了同样的挑战,我想我会分享解决方案。因此,基本上,配置文件将填充您正在使用的dns.resolver.resolver的“nameservers”实例变量。因此,如果您想强制解析程序使用特定的名称服务器,可以直接执行

我正在使用来自的
dns.resolver


是否可以设置用于查询的服务器的IP地址?

您在问题中没有指定,但假设您正在使用,文档表明您要在解析器对象上设置属性


尽管提供一个/etc/resolv.conf样式的文件来传递给.

可能会更容易,尽管这是一个有点旧的线程,但我还是要跳进去。我遇到了同样的挑战,我想我会分享解决方案。因此,基本上,配置文件将填充您正在使用的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')
希望有人觉得它有用。

是的,很有用

如果您像这样使用便利函数
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')

因为没有关于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.']

您可以添加一个指向提供dns.resolver的库的链接吗?也,这不是在
dns.resolver
docs中吗?@WoLpH在ubunty有一个名为
python-dnspython
/etc/resolv.conf
的包在Windows上不使用。您可以传递
configure=False
以避免读取
/etc/resolv.conf
或Windows注册表。您可以签出他们的git存储库并手动切换到
python3
的分支。如果有人遇到这个答案(和我一样),
dnspython
现在支持python3.x(如果您仍在使用它,则支持2.x)。有人知道如何验证哪个服务器回答了这个问题吗?我在任何方法中都找不到它,在answer.response.to_text()更新了2021年的答案:
AttributeError:“Resolver”对象没有属性“resolve”
使用最新版本的
dnspython
@e-info128:确保您使用的是dnspython 2.0.0或更高版本。请参见.Yes,
dnspython==2.1.0
from
pip3
。我使用相同的示例解决这个问题,但将
.resolve()
替换为
.query()