【问题标题】:dnspython - get AAAA, A, NS and other records with one querydnspython - 一次查询获取 AAAA、A、NS 等记录
【发布时间】:2013-03-14 15:54:59
【问题描述】:

我正在尝试构建用于解析单个域名的所有 DNS 记录的快速脚本。 'ANY' 命令似乎可以解决问题,但我对 TTL 有奇怪的问题。当使用任何这样的

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 记录的最快方法是什么?

【问题讨论】:

    标签: python dns dnspython


    【解决方案1】:

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

    5.2。 RRSet中RR的TTLs

    资源记录也有生存时间 (TTL)。这是可能的 RRSet 中的 RR 具有不同的 TTL。这个没有用 发现无法通过其他方式更好地完成。这 但是,可能会导致部分回复(未标记为“截断”) 缓存服务器,其中一些但不是所有 RR 的 TTL RRSet 已过期。

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

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

    【讨论】:

      猜你喜欢
      • 2013-03-06
      • 2011-05-04
      • 1970-01-01
      • 2018-09-05
      • 2020-07-07
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多