DNS测速工具
#!/bin/bash
# ============================================================
# DNS测速脚本(非浏览器版)- 由 W3CTool DNS测速工具生成
# 原理: 直接请求DoH服务器的JSON API接口,测量完整HTTP往返耗时,
# 该时间反映了到DNS服务器的网络延迟+服务器处理延迟
# 依赖: curl(任意版本)、awk
# 用法: bash dns-speed-test.sh [域名]
# 提示: 默认测量A记录(IPv4), 需测AAAA(IPv6)将脚本中type=1改为type=28
# ============================================================
DOMAIN="${1:-w3ctool.com}"
# DNS服务器列表(名称|JSON API地址),可自行增删
SERVERS=(
"阿里DNS|https://dns.alidns.com/resolve"
"DNSPod(腾讯)|https://doh.pub/resolve"
"360安全DNS|https://doh.360.cn/resolve"
"Google|https://dns.google/resolve"
"Cloudflare|https://cloudflare-dns.com/resolve"
"Quad9|https://cloudflare-dns.com/resolve"
"OpenDNS|https://cloudflare-dns.com/resolve"
"AdGuard|https://cloudflare-dns.com/resolve"
"NextDNS|https://cloudflare-dns.com/resolve"
"Mullvad|https://cloudflare-dns.com/resolve"
"Wikimedia|https://cloudflare-dns.com/resolve"
"Control D|https://cloudflare-dns.com/resolve"
"CIRA加拿大|https://cloudflare-dns.com/resolve"
"Restena卢森堡|https://cloudflare-dns.com/resolve"
"SWITCH瑞士|https://cloudflare-dns.com/resolve"
)
echo "DNS测速: ${DOMAIN} $(date "+%Y-%m-%d %H:%M:%S")"
echo "------------------------------------------------------------"
printf "%-24s %10s\n" "DNS服务器" "解析耗时"
echo "------------------------------------------------------------"
RANK=()
for item in "${SERVERS[@]}"; do
name="${item%%|*}"
api="${item##*|}"
t=$(curl -s -o /dev/null --max-time 10 -H "accept: application/dns-json" -w "%{time_total}" "${api}?name=${DOMAIN}&type=1" 2>/dev/null)
rc=$?
if [ $rc -ne 0 ] || [ -z "$t" ] || [ "$t" = "000" ] || [ "$t" = "0.000000" ]; then
printf "%-24s %10s\n" "$name" "失败"
RANK+=("999999|${name}(失败)")
else
ms=$(awk -v t="$t" 'BEGIN{printf "%.0f", t*1000}')
printf "%-24s %8s ms\n" "$name" "$ms"
RANK+=("${ms}|${name}")
fi
done
echo "------------------------------------------------------------"
BEST=$(printf "%s\n" "${RANK[@]}" | sort -t"|" -k1 -n | head -1 | cut -d"|" -f2)
echo "⚡ 推荐DNS: ${BEST}"
提示:脚本内置全部DNS服务商列表(可直接编辑增删),域名与记录类型默认取自当前输入,也可通过命令行参数覆盖,如 python dns-speed-test.py qq.com AAAA。
工具介绍
DNS测速工具通过 DNS-over-HTTPS(DoH)加密协议,一键并发测试国内外 18 个DNS节点(15家服务商)的解析响应时间, 自动按速度排名并推荐最快的DNS。支持 A(IPv4)、AAAA(IPv6)、CNAME、MX、TXT、NS、PTR、SOA 共 8 种记录类型, 同时兼容 Google JSON API 与 RFC 8484 标准两种 DoH 格式。还支持一键生成 Bash / PowerShell / Python / Node.js 非浏览器测速脚本,绕过浏览器跨域限制,在终端获得更接近真实环境的测速结果。所有测试均在本地直连完成,不经过任何中间服务器,数据安全可靠。
使用步骤
注意事项
支持的记录类型
| 记录类型 | 说明 |
|---|---|
| A (IPv4) | 域名对应的IPv4地址 |
| AAAA (IPv6) | 域名对应的IPv6地址 |
| CNAME | 别名记录 |
| MX | 邮件交换记录 |
| TXT | 文本记录 |
| NS | 域名服务器记录 |
| PTR | 反向解析记录 |
| SOA | 权威起始记录 |
国内免费公共DNS服务
注:DoH = DNS-over-HTTPS(加密DNS),DoT = DNS-over-TLS(加密DNS)。「-」表示该服务商暂未提供此协议支持。 以上DNS信息来源于各服务商官方公开资料,仅供参考。
常见问题
Q1. 为什么测试结果与本地DNS不同?
本工具使用DoH协议直接查询远程DNS服务器,结果反映的是你的网络到该服务器的往返延迟,与你本地配置的DNS无关。想测本地DNS,可先手动把系统DNS改为对应服务。
Q2. 如何选择最快的DNS?
多次测试取稳定值,优先选「极快/很快」且成功率100%的服务器。国内用户推荐阿里DNS或DNSPod,海外用户推荐Cloudflare或Google。国内和国际组建议分开看:访问国内网站用国内DNS更快。
Q3. DoH和普通DNS有什么区别?
DoH(DNS-over-HTTPS)使用HTTPS加密DNS查询,防止运营商劫持、广告插入和中间人窃听,隐私和安全性更好;普通UDP DNS明文传输,易被劫持。
Q4. JSON格式和标准协议有什么区别?
JSON格式是Google提出的HTTP API,仅少数DNS支持;标准协议(RFC 8484)是行业通用格式,几乎所有DoH服务商都支持。本工具同时兼容两种格式,标注 J 为JSON、W 为RFC8484。
Q5. 为什么部分国际DNS显示"不支持浏览器访问"?
这通常是浏览器混合内容限制或该服务商CORS策略导致,也可能是网络无法直连该服务器(如防火墙拦截)。该结果本身也说明此DNS在你的网络环境下不可用,可从候选中排除。
Q6. 测试数据会上传吗?
不会。所有测试在浏览器本地完成,仅向各DNS服务器发送标准DoH查询请求,不经过任何中间服务器,不收集任何用户数据。
Q7. 支持哪些记录类型?
支持A(IPv4)、AAAA(IPv6)、CNAME(别名)、MX(邮件)、TXT(文本)、NS(域名服务器)、PTR(反向解析)、SOA(权威起始)共8种常见记录类型,均会返回第一条匹配记录值。
Q8. 测速结果每次都不一样正常吗?
正常。DNS延迟受网络波动、CDN调度、服务器负载影响,单次结果仅供排序参考。建议同一域名测2~3次,看整体排名趋势而不是纠结个位数毫秒差异。
Q9. 为什么需要非浏览器脚本测速?
浏览器受CORS跨域与混合内容限制,部分DoH服务器(如Cloudflare、Quad9等国际节点)在网页中无法直连或结果有偏差。工具可一键生成Bash/PowerShell/Python/Node.js测速脚本,在本机或服务器终端运行即可绕过浏览器限制,测得的结果更接近真实网络环境。
使用场景
| 场景 | 说明 |
|---|---|
| 选择最优DNS | 测试多个DNS服务器响应时间,选择最快的提升上网体验 |
| 排查网络问题 | 当域名解析异常时,对比不同DNS的解析结果定位问题 |
| 优化网站访问 | 找到响应最快的DNS,配置到路由器或本地网络 |
| 验证DNS部署 | 网站管理员验证新配置的DNS是否生效且响应正常 |
| 对比国内外DNS | 测试国内外DNS服务器在不同网络环境下的表现差异 |
| 安全DNS选择 | 评估支持DoH/DoT的加密DNS服务,防止DNS劫持窃听 |
| MX记录检查 | 排查邮件收发故障,验证域名的邮件交换记录状态 |
| 换机迁移评估 | 更换宽带或路由器后,重新测速选择适配的DNS配置 |