nac*_*bre 6 python dns dnspython
我正在尝试构建快速脚本来解析单个域名的所有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
Run Code Online (Sandbox Code Playgroud)
返回的数据是我需要的,但是当TTL到期时,脚本只是不返回过期的记录.'DIG domain ANY'命令似乎也有这个问题.
所以我的问题是获取单个域的所有DNS记录的最快方法是什么?
ANY查询的TTL问题是DNS协议中固有的.一旦缓存具有给定名称的一个RRtype,它将返回它对响应ANY查询所具有的内容,而不是查询源以查看是否还有其他查询.RFC 2181对此进行了简短的讨论:
5.2.RRSet中RR的TTL
资源记录也有生存时间(TTL).RRSet中的RR可能具有不同的TTL.没有找到用于此的用途,这在其他方面无法更好地完成.但是,这可能导致从缓存服务器部分回复(未标记为"截断"),其中RRSet中某些但不是所有RR的TTL已过期.
实际上并没有说不建议在具有不同TTL的RR集中使用RR,但作者显然没有高度评价这样做.
所以简短的回答是,鉴于ANY不能很好地工作,除了每个您感兴趣的RR类型发出一个查询之外,没有其他解决方案.你可以通过并行执行所有这些查询来节省时间(但是Python库可能不会让这很容易).