dnspython-通过一次查询获取AAAA、A、NS和其他记录

dnspython-通过一次查询获取AAAA、A、NS和其他记录,python,dns,dnspython,Python,Dns,Dnspython,我正在尝试构建一个快速脚本,用于解析单个域名的所有DNS记录。“ANY”命令似乎可以做到这一点,但我在TTL方面遇到了奇怪的问题。当使用任何类似的工具时 domain = dns.name.from_text(domain) nameserver = '127.0.0.1' query = dns.message.make_query(domain, dns.rdatatype.ANY) response = dns.query.udp(query, nameserver, timeout =

我正在尝试构建一个快速脚本,用于解析单个域名的所有DNS记录。“ANY”命令似乎可以做到这一点,但我在TTL方面遇到了奇怪的问题。当使用任何类似的工具时

domain = dns.name.from_text(domain)
nameserver = '127.0.0.1'
query = dns.message.make_query(domain, dns.rdatatype.ANY)
response = dns.query.udp(query, nameserver, timeout = 2)
print response
返回的数据是我所需要的,但是当TTL过期时,脚本不会返回过期的记录。“DIG domain ANY”命令似乎也存在此问题


所以我的问题是,获取单个域的所有DNS记录的最快方法是什么?

任何查询的TTL问题都是DNS协议固有的。一旦一个缓存对一个给定的名称有一个RRtype,它将返回它对ANY查询的响应,而不是查询源以查看是否还有其他RRtype。对此进行了简短的讨论:

5.2。RRs集合中RRs的TTL

资源记录也有生存时间(TTL)。有可能 RRs集合中的RRs具有不同的TTL。这个没有任何用处 我们发现,用其他方法无法更好地完成这些任务。这 但是,可能会导致来自服务器的部分回复(未标记为“截断”) 缓存服务器,其中TTL用于 RRSet已过期

事实上,这并不是说在具有不同TTL的RRs集中使用RRs是不可取的,但作者显然并不认为这样做很重要

因此,简单的回答是,鉴于ANY都不能很好地工作,除了对每个RR类型发出一个您感兴趣的查询之外,没有其他解决方案。您可以通过并行执行所有这些查询来节省时间,这很有帮助(但是Python库可能不会让这变得容易)