【问题标题】:querying for SOA records, Ignore NoAnswer error in dnspython查询 SOA 记录,忽略 dnspython 中的 NoAnswer 错误
【发布时间】:2019-01-21 02:29:45
【问题描述】:

当我做dig -t NS www.cloudflare.com时,

;; QUESTION SECTION:
;www.cloudflare.com.        IN  NS

;; AUTHORITY SECTION:
cloudflare.com.     275 IN  SOA ns3.cloudflare.com. dns.cloudflare.com. 2029950661 10000 2400 604800 300

虽然没有答案,但从权威部分我仍然可以得到 SOA 记录。

但是使用 dnspython,

answers = dns.resolver.query('www.cloudflare.com', 'SOA')

它只会引发异常:“DNS 响应不包含问题的答案:www.cloudflare.com.IN SOA”

有什么想法吗?

【问题讨论】:

    标签: python dns


    【解决方案1】:

    如文档中所述:

    这个 (dns.resolver.query) 是一个使用默认解析器对象进行查询的便捷函数。

    在像您这样的情况下,它会引发异常“dns.resolver.NoAnswer”,这是正确的并且按照定义,因为对于这个特定的名称 and 类型确实没有答案。 可能有相同名称和其他类型的答案,但没有针对特定类型的答案。

    但是,如果您查看文档,您可以看到它的函数签名:raise_on_no_answer=True

    因此,如果您更改代码以在query 调用中添加raise_on_no_answer=False,您不会收到任何异常,您可以操纵答案。您需要进入response 部分。当然,你需要在下面的代码中添加大量的检查,使其能够应对各种边缘情况。

    answer = dns.resolver.query('www.cloudflare.com', 'SOA', raise_on_no_answer=False)
    if answer.rrset is None:
        print answer.response.authority[0].to_text()
    
    
    cloudflare.com. 139 IN SOA ns3.cloudflare.com. dns.cloudflare.com. 2029950661 10000 2400 604800 300
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      • 2014-10-27
      • 1970-01-01
      • 2017-08-01
      相关资源
      最近更新 更多