首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >查询SOA记录,忽略dnspython中的NoAnswer错误

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

Stack Overflow用户
提问于 2019-01-21 10:29:46
回答 1查看 455关注 0票数 0

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

代码语言:javascript
复制
;; 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,

代码语言:javascript
复制
answers = dns.resolver.query('www.cloudflare.com', 'SOA')

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

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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部件。当然,您需要在下面的代码中添加大量检查,以使其能够处理各种边缘情况。

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54282830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档