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

Mas*_*imo 32 python dns

我使用dns.resolverdnspython.

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

Mar*_*ski 73

虽然这有点旧帖,但我会跳进去.我遇到了同样的挑战,我想我会分享解决方案.因此,基本上配置文件将填充您正在使用的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')
Run Code Online (Sandbox Code Playgroud)

希望有人发现它有用.

  • 如果有人遇到这个答案(正如我所做的那样),`dnspython`现在支持Python 3.x(如果你还在使用它,则为2.x). (9认同)
  • 您可以传递`configure = False`以避免读取`/ etc/resolv.conf`或Windows注册表. (3认同)
  • 2021 年更新答案:/sf/answers/4605170111/ (2认同)

Ama*_*ali 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]
Run Code Online (Sandbox Code Playgroud)

输出:

['ns1.google.com.', 'ns3.google.com.', 'ns2.google.com.', 'ns4.google.com.']
Run Code Online (Sandbox Code Playgroud)


max*_*zig 11

是的。

如果您使用的便利功能dns.resolver.query()这样

import dns.resolver
r = dns.resolver.query('example.org', 'a')
Run Code Online (Sandbox Code Playgroud)

您可以重新初始化默认解析器,例如使用特定的名称服务器(或列表),例如:

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')
Run Code Online (Sandbox Code Playgroud)

或者您可以仅针对某些查询使用单独的解析器对象:

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')
Run Code Online (Sandbox Code Playgroud)