python - 查询 SOA 记录,忽略 dnspython 中的 NoAnswer 错误
问题描述
当我这样做时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 中”
有任何想法吗?
解决方案
如文档中所述:
这个 (
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
推荐阅读
- python - Python:有效地比较非常大的 CSV 中的列
- scala - 如何在不使用 spark 的情况下从 AWS EMR 内部读取 S3 存储桶中的文本文件
- java - Java Eclipse将图像上传到包内的图像文件夹
- java - 在 Spring boot 中使用两个执行器运行并行作业
- api - YouTube 数据 API OAuth 2.0 - 响应范围参数抛出 403
- sql - 近两年的SQL拉取数据
- flutter - 如何在 Flutter 中获取 iOS 的 APNs 令牌以进行推送通知?
- c - 如何使用 fscanf 读取带分隔符的文件?
- javascript - Grunt 找不到 mocha 浏览器测试
- rust - 为什么直接从 println 调用时内联汇编的系统调用会执行两次,但存储在临时变量中时不会?