我试图建立一个单一的域名解析所有DNS记录的快速脚本。“ANY”命令似乎可以解决这个问题,但是我在TTLs方面遇到了一些奇怪的问题。当使用任何像这样的
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记录的最快方法是什么?
发布于 2013-03-25 18:29:03
任何查询的TTL问题都是DNS协议固有的。一旦缓存有了给定名称的一个RRtype,它将返回它已有的内容,以响应ANY查询,并且不会查询源以查看是否还有更多的are。RFC 2181对此有一个简短的讨论:
5.2。RRSet中RR的TTLs
资源记录也有生存时间(TTL)。RRSet中的RR可以具有不同的TTL。目前还没有发现可以通过其他方式更好地实现此功能的用途。然而,这可能会导致来自缓存服务器的部分回复(未标记为“截断”),其中RRSet中某些但不是所有RR的TTL已过期。
它实际上并不是说不鼓励在具有不同TTL的RRset中使用RR,但作者显然不太看重这一点。
因此,简短的答案是,鉴于ANY不能很好地工作,除了为每个RR类型发出一个您感兴趣的查询之外,没有其他解决方案。您可以通过并行执行所有这些查询来节省时间,这是有帮助的(但Python库可能并不容易做到这一点)。
https://stackoverflow.com/questions/15610214
复制相似问题