当我做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中”
有什么想法吗?
答案 0 :(得分:1)
如文档中所述:
此(
dns.resolver.query
)是一种便捷功能,它使用默认的解析器对象进行查询。
在像您这样的情况下,它会引发异常“ dns.resolver.NoAnswer”,该异常正确且定义正确,因为确实没有针对该特定名称和的答案。 对于相同的名称和其他类型,可能会有答案,但对于特定类型则没有答案。
但是,如果您查看文档和功能签名,您会发现它具有以下内容:raise_on_no_answer=True
。
因此,如果您更改代码以在raise_on_no_answer=False
调用中添加query
,则不会出现任何异常,您可以操纵答案。您将需要进入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