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

58 投票
4 回答
88793 浏览
提问于 2025-04-16 05:15

我正在使用来自 dnspythondns.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')

希望对某些人有帮助。

撰写回答