我正在尝试构建快速脚本来解析单个域名的所有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记录的最快方法是什么?
答案 0 :(得分:6)
ANY查询的TTL问题是DNS协议中固有的。一旦缓存具有给定名称的一个RRtype,它将返回它对响应ANY查询所具有的内容,而不是查询源以查看是否还有其他查询。 RFC 2181对此进行了简短的讨论:
5.2。 RRSet中RR的TTL
资源记录也有生存时间(TTL)。有可能 RRSet中的RR具有不同的TTL。没有用途 被发现无法通过其他方式更好地完成。这个 但是,可能导致部分回复(未标记为“截断”) 缓存服务器,其中一些但不是所有RR中的TTL RRSet已过期。
实际上并没有说不允许在具有不同TTL的RRset中使用RR,但作者显然没有高度评价这样做。
所以简短的回答是,鉴于ANY不能很好地工作,除了针对您感兴趣的每种RR类型发出一个查询之外,没有其他解决方案。你可以通过并行执行所有这些查询来节省时间(但Python库可能不会让这很容易)。