如何高效使用dnsyo参数:-q、-t、-c与--extended完整指南

原创2026-11-12 23:59:141,430 阅读
文章标签:网络与通信运维

如何高效使用dnsyo参数:-q、-t、-c与--extended完整指南

dnsyo 是一款免费开源的 DNS 全球探测工具,可并行查询 1000 多台全球 DNS 服务器并自动汇总结果,专门用于追踪 DNS 记录在全球的传播状态。本文带你快速掌握 dnsyo 的四个核心参数:-q(查询范围)、-t(并发线程)、-c(国家过滤)与 --extended(扩展输出),几分钟内就能写出高效、精准的检测命令。

什么是 dnsyo:一行命令搞定 DNS 全球检测

dnsyo 就像"放大版的 dig"——普通工具只查一台 DNS 服务器,而 dnsyo 一次查询上千台服务器,然后把结果按"多少台服务器返回了相同的记录"进行分组汇总。典型输出如下:

$ dnsyo -t 100 -q ALL example.com
Status: Queried 1804 of 1804 servers, duration: 0:00:09.334441

I asked 1804 servers for A records related to example.com,
1771 responded with records and 33 gave errors

1738 servers responded with;
93.184.216.119

26 servers responded with;
127.0.0.1

当你的域名刚更新 DNS 记录时,这种"全球视角"能让你立刻判断:新记录是只覆盖了 80% 的服务器,还是已经全面生效。

快速安装步骤:pip 一键部署

dnsyo 要求 Python 2.6 或更高版本,最简安装方式只需一条命令(建议放在 virtualenv 虚拟环境中执行):

pip install dnsyo --upgrade

装完直接用测试命令验证,它会随机挑选 500 台 DNS 服务器发起查询:

dnsyo google.com

💡 首次运行(以及此后每 14 天)dnsyo 会自动下载最新的解析器列表,缓存在 ~/.dnsyo-resolvers-list.yaml,列表源文件参考 resolver-list.yml。

核心参数速查表

参数 全称 作用 默认值
-q --servers 限制要查询的服务器数量,可填 ALL 查全部 500
-t --threads 并发工作线程数,控制查询速度 100
-c --country 按两字母国家代码过滤服务器 无(全球)
-x --extended 扩展输出,显示具体查询过的服务器地址与提供商 关闭

所有参数的定义见 cli.py,核心查询逻辑见 dnsyo.py。

-q 参数用法:按需调整查询范围

-q 决定 dnsyo 从服务器列表中随机抽取多少台参与查询:

dnsyo -q 100 example.com      # 只随机查询 100 台服务器(快速自检)
dnsyo -q=ALL example.com      # 查询列表中的全部服务器(彻底检查)
  • 日常快速检查:用默认 500 台或更小数字,几秒出结果;
  • 发布前的最终验证:-q=ALL 扫遍全部 1800+ 台服务器,确保无遗漏;
  • 若请求的数量超过列表总数,dnsyo 会自动回退为"查询全部"并给出警告(逻辑见 dnsyo/dnsyo.py 中的 prepareList 方法)。

-t 参数用法:用线程数平衡速度与稳定性

-t 指定并发工作线程数(默认 100)。dnsyo 会为每台服务器开一个线程并行查询,线程数越高,全量扫描越快:

dnsyo -t 200 -q=ALL example.com   # 提高并发,加速全量扫描
  • 线程过高可能触发本机网络限流或让输出刷新变乱;
  • 建议先用默认值跑一次看 duration 耗时,再按需调大 -t;
  • 注意:-t 只影响速度,不影响结果准确性。

-c 参数用法:按国家代码精准过滤

-c 传入两字母 ISO 国家代码,让 dnsyo 只查询指定国家的 DNS 服务器,非常适合验证"某个地区是否已生效":

dnsyo -c CN example.com     # 只查中国的 DNS 服务器
dnsyo -c US google.com      # 只查美国的 DNS 服务器

常见场景:客户反馈"国内能打开、国外打不开",用 -c CN 与 -c US 各查一次,即可快速定位是哪个区域解析异常。若该国家代码下没有可用服务器,dnsyo 会报错提示(There are no servers avaliable with the country code ...),此时可换一个代码试试。

--extended 参数用法:看清"谁"返回了什么

默认的 standard 输出只显示"多少台服务器返回了什么",加上 --extended(或简写 -x)后,会额外列出每台参与查询的服务器 IP、提供商和国家:

dnsyo -x -q 50 example.com

扩展输出效果示意:

The following servers
 - 93.184.216.34 (Example Provider - US)
 - 8.8.8.8 (Google - US)
responded with;
93.184.216.119

当你发现少数服务器返回了异常 IP 时,--extended 能直接告诉你问题服务器是谁、在哪个国家,方便针对性排查。输出逻辑定义在 dnsyo/dnsyo.py 的 outputStandard 方法中。

📌 提示:dnsyo 还有 --simple 简单输出模式,专为 Unix 脚本解析设计;三种输出模式(standard / extended / simple)的说明见 README.md。

实用命令组合清单

把参数组合起来,覆盖不同运维场景:

# 1. 发布后快速自检(100 台服务器,10 秒内出结果)
dnsyo -q 100 example.com

# 2. 上线前全量验证(全部服务器 + 高并发)
dnsyo -q=ALL -t 200 example.com

# 3. 只检查中国区 DNS 传播情况
dnsyo -c CN -q 200 example.com

# 4. 排查异常服务器身份(扩展输出 + 少量样本)
dnsyo -x -q 50 example.com

# 5. 查询邮件记录:第二个位置参数指定记录类型
dnsyo -c CN example.com MX

记录类型支持 A、CNAME、MX、NS、PTR、SOA、SPF、SRV、TXT、AAAA 共 10 种(白名单见 dnsyo/dnsyo.py 的 lookupRecordTypes),不传时默认为 A 记录。

常见问题解答

问:-q 和 -t 有什么区别? 答:-q 决定"查多少台服务器"(查询范围),-t 决定"同时开多少线程"(查询速度)。想覆盖更广就调大 -q,想跑得更快就调大 -t。

问:服务器列表多久更新一次? 答:dnsyo 每 14 天自动更新一次列表,本地缓存在 ~/.dnsyo-resolvers-list.yaml。项目根目录的 resolver-list-source.yml 是列表源,每月会剔除失效的服务器。

问:输出里的 No Answer / Server Timeout 是什么意思? 答:前者表示该服务器没有返回任何记录,后者是 5 秒超时未响应,两者都会被归入 errors 区块统计,不影响其他服务器的正常结果。

小结

掌握 dnsyo 的四个核心参数,就能覆盖几乎所有 DNS 全球检测场景:

  1. -q:控制查询范围,日常 100~500 台足够,关键发布用 ALL;
  2. -t:控制并发线程,默认 100,追求速度可上调;
  3. -c:按国家代码过滤,快速定位区域性问题;
  4. --extended:显示服务器明细,排查"是谁解析错了"的利器。

dnsyo 基于 MIT 协议开源(见 LICENCE.txt),配合参数组合使用,几分钟内就能完成一次覆盖全球的 DNS 传播体检。

登录后查看全文
dnsyo