当我做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。在SOA中”
有什么想法吗?
发布于 2019-01-22 01:09:04
正如文档中所写的:
This (
dns.resolver.query
)是一个方便的函数,它使用默认的解析器对象进行查询。
在像您这样的情况下,它会引发异常"dns.resolver.NoAnswer“,这是正确的和定义的,因为对于这个特定的名称和类型确实没有答案。可能有相同名称和其他类型的答案,但不是特定类型的答案。
但是,如果您查看文档和函数签名,就会发现它包含以下内容: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
https://stackoverflow.com/questions/54282830
复制相似问题