gpt4 book ai didi

python - dnspython - 一次查询获取AAAA、A、NS等记录

转载 作者:太空狗 更新时间:2023-10-29 23:59:43 33 4
gpt4 key购买 nike

我正在尝试构建用于解析单个域名的所有 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 记录的最快方法是什么?

最佳答案

ANY 查询的 TTL 问题是 DNS 协议(protocol)中固有的。一旦缓存具有给定名称的一个 RRtype,它将返回它所具有的内容以响应 ANY 查询,而不查询源以查看是否还有更多。 RFC 2181对此进行了简短的讨论:

5.2. TTLs of RRs in an RRSet

Resource Records also have a time to live (TTL). It is possible for the RRs in an RRSet to have different TTLs. No uses for this have been found that cannot be better accomplished in other ways. This can, however, cause partial replies (not marked "truncated") from a caching server, where the TTLs for some but not all the RRs in the RRSet have expired.

它实际上并没有说不鼓励在具有不同 TTL 的 RRset 中使用 RR,但作者显然并不重视这样做。

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

关于python - dnspython - 一次查询获取AAAA、A、NS等记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15610214/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com