查询SOA记录,忽略dnspython中的NoAnswer错误

2024-05-19 01:34:32 发布

您现在位置:Python中文网/ 问答频道 /正文

当我做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

^{pr2}$

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

有什么想法吗?在


Tags: 答案incomdnswww记录sectioncloudflare
1条回答
网友
1楼 · 发布于 2024-05-19 01:34:32

如文件所述:

This (dns.resolver.query) is a convenience function that uses the default resolver object to make the 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

相关问题 更多 >

    热门问题