使用dnspython一次查询获取AAAA、A、NS和其他记录

6
我正在尝试构建快速脚本,以解析单个域名的所有DNS记录。使用“ANY”命令似乎可以达到目的,但我在TTL方面遇到了奇怪的问题。当像这样使用ANY时:
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记录的最快方法是什么?

1个回答

6
任何查询的TTL问题是DNS协议固有的问题。一旦缓存对于给定名称有一个RRtype,它将返回它所拥有的内容作为对于任何查询的响应,并且不会查询源以查看是否有更多内容。RFC 2181对此进行了简短的讨论:

5.2. RRSet中RR的TTL

资源记录也有生存时间(TTL)。RRSet中的RR可以具有不同的TTL。尚未发现使用此功能的任何用途,因为其他方法可以更好地完成此操作。但是,这可能会导致缓存服务器发出部分回复(未标记为“截断”),其中某些但并非所有RR的TTL已过期。

它实际上并没有说不建议在RRset中具有具有不同TTL的RR,但作者显然对此持不高的看法。

所以简短的回答是,鉴于“ANY”不太有效,除了针对您感兴趣的每个RR类型发出一个查询之外,没有其他解决方案。如果可以的话,您可以通过并行执行所有这些查询来节省时间(但是Python库可能不容易实现此操作)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接