Dnspython:设置查询超时/生命周期

13 投票
1 回答
23808 浏览
提问于 2025-04-17 10:58

我有一个小脚本,它会检查一大堆域名的MX记录,一切运行得很好,但当脚本遇到一个没有记录的域名时,跳到下一个域名的时间就会很长。

我试着添加了:

query.lifetime = 1.0
or
query.timeout = 1.0

但是这似乎没有什么效果。有没有人知道这个设置是怎么配置的?

我的脚本在下面,感谢你的时间。

import dns.resolver
from dns.exception import DNSException
import dns.query
import csv

domains = csv.reader(open('domains.csv', 'rU'))
output = open('output.txt', 'w')
for row in domains:
    try:
        domain = row[0]
        query = dns.resolver.query(domain,'MX')
        query.lifetime = 1.0
    except DNSException:
        print "nothing here"
    for rdata in query:
            print domain, " ", rdata.exchange, 'has preference', rdata.preference
            output.writelines(domain)
            output.writelines(",")
            output.writelines(rdata.exchange.to_text())
            output.writelines("\n")

1 个回答

28

你是在执行查询之后才设置超时时间,这样是没用的!

你应该先创建一个 Resolver 对象,设置好它的超时时间,然后再调用它的 query() 方法。dns.resolver.query() 其实只是一个方便的函数,它会自动创建一个默认的 Resolver 对象并调用它的 query() 方法。如果你不想用默认的 Resolver,那就得手动来做这些。

resolver = dns.resolver.Resolver()
resolver.timeout = 1
resolver.lifetime = 1

然后在你的循环中使用这个:

try:
    domain = row[0]
    query = resolver.resolve(domain,'MX')
except:
    # etc.

你应该可以用同一个 Resolver 对象来处理所有的查询。

撰写回答