DNS 测试工具 - 测一下全世界的服务器以可视化展示数据

112 天前
bigtear  bigtear

https://github.com/xxnuo/dns-benchmark

dnspy - 测试全世界的 DNS 服务器

数据分析面板预览

preview

数据分析面板,内含示例数据

测试工具

在仓库的 releases 页面中按你的系统架构下载 dnspy-* 文件。

然后必须关闭所有代理软件的 Tun 模式、虚拟网卡模式,否则会影响测试结果。

重命名文件为 dnspy( Windows 是 dnspy.exe),然后打开终端,进入到你这个文件所在的目录。执行命令开始测试

unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
./dnspy

按提示输入启动测试

默认使用多线程模式,以加快测试速度。但是默认参数 10 个线程需要至少上下行 1 MB/s 网络和至少 4 核心处理器。 如果网络或处理器不好,会导致测试结果不准确,必须通过-w 参数降低线程数。

测试完成后会输出到当前目录下形如 dnspy_result_2024-11-07-17-32-13.json 的 JSON 文件中。

按程序提示输入 Yy 或直接回车,会自动打开数据分析面板网站,点击网站右上角的 读取分析 按钮,选择你刚才的 JSON 文件,就可以看到可视化测试结果了。

2335 次点击
所在节点   宽带症候群  宽带症候群
15 条回复
blackgloves
blackgloves
112 天前
可以,很实用
ucyo
ucyo
112 天前

很不错的工具,能加下这里可以复制吗
cnkuner
112 天前
面板中的地址不能复制啊。
bigtear
111 天前
@ucyo
@cnkuner 第一次进去有提示呀,点击右侧的柱图可以复制地址
night98
111 天前
分析后的网页建议增加一下可以复制,不然想复制 dns 地址还得手打或者去识别
bigtear
110 天前
@night98 有提示呀,点击右侧的柱图可以复制地址,我看看搞个显眼的提示
onion83
110 天前
首先,肯定楼主的工作和探索精神 👍,但是家庭或者非专业监控机构,去监控全世界的 dns 个人觉得意义不大,dns 服务器一般都是用运营商就近提供或者使用大厂的 DNS ,对于单一网络条件下去测试全球的 QPS 和成功率,自身网络就是瓶颈,数据没有参考价值。

如果是普通用户挑选优质 DNS , 在 Windows 平台且只用于临时测试,希望测速后一键切换
友情推荐免费 dns-jumper : https://www.sordum.org/7952/dns-jumper-v2-3/3/#8

https://imgur.com/klvZrWV
bigtear
109 天前
@onion83 这不是监控,这是测速工具,就是因为 dnsjumper 只有 windows 版而且数据不直观,所以我写了这个工具😂
onion83
109 天前
@bigtear dns-jumper 这种表格有数字还能排序的形式还不够直观 ☺️ 最关键的问题我因为说了,你的单一网络本身就是最大的瓶颈,响应速度几乎就是你的网络延迟。 加上 dns 服务器普遍都会存在防火墙,类似 223.5.5.5 还有每日,每小时限速测率,还没有考虑 isp 对 53 等端口的特殊关照,所以说您做这个小工具也就是有个图表能看看而已,意义其实并不大,放到任意用户的手里结果都会不一样的。但是作为练手的作品,我是非常肯定您的想法和动手能力的,起码东西做出来了。
bigtear
108 天前
@onion83 #9 你需要学学小学语文了☺️ 最关键的问题是你没搞明白这个工具是干嘛的,你说的所有东西都是我的专业领域,我当然知道这些因素。所以说明确告诉您的话这个工具没半毛钱关系。我是非常肯定您的话的,起码连这个工具是干什么的都不知道就在那指点江山挥斥方裘了。
onion83
107 天前
@bigtear 专不专业不是您自认的,V2 都是行内人士懂的人一眼便知道你作品的问题所在。如果连数据都是错的,一切的什么可视化、评价体系就是 s 上雕花,毫无价值。
bigtear
105 天前
@onion83 你笑死我了,你真的看代码了吗🤣,什么都不懂就自以为是
onion83
104 天前
我是一名有着 15 年经验的业余程序员,虽未在像 V2EX 这样的专业平台与大家以代码会友,但我也认真研究了您的源代码。在此,我想先谈谈对您作品`dns-bechmark`的一些看法。

您的`dns-bechmark`作品是这样运行的:它以`dnspyre`(目前 star 数为 124 的 DNS 压力测试工具,https://github.com/Tantalor93/dnspyre )为核心,通过 Go 语言调用外部`dnspyre`命令。这个工具会对自行收集的 DNS 服务器列表进行测试,测试时利用世界排名较靠前的 1000 个域名( https://github.com/Tantalor93/dnspyre/blob/master/data/1000-domains )进行并发解析。在这个过程中,`dnspyre`会输出测试的 json 结果,您的作品会解析这些结果,并结合自身的评分体系对 DNS 服务器进行评分,同时使用 GEOCODE 分类,最终生成结果 json 文件。最后通过 Web 前端读取结果,并按照评分高低进行可视化展示。

不过,这个作品存在一些问题。

首先是关于评分算法与网络性能相关的问题。作为核心的压力测试工具`dnspyre`,其本身无法规避网络性能问题。您在评分算法中设置的`LatencyRangeMax`、`LatencyRangeMin`、`LatencyFullMarkPoint`这三个算子都和网络延时密切相关。这就导致了按照您的算法,像 1.1.1.1 这样的 DNS 服务器得分远低于 223.5.5.5 ,但这与实际情况并不相符。

其次,使用`dnspyre`对公共 DNS 进行高频查询存在问题。暂且不考虑这种行为是否符合道德规范,这种高频查询会浪费公共资源。而且当单 IP 高频次查询达到一定程度时,必然会触发 DNS 服务商的防火墙,这会进一步影响评分算法的结果。

再者,您的评分算法只考虑了`errorRate`,却没有考虑解析结果的准确性,也没有考虑诸如 DNS 劫持等情况。我们都知道,在国内由于一些特殊原因,查询 Google 、Facebook 等域名时,即使局域网内配置了旁路由进行 IP 分流/cache ,RTT 几乎都是 1ms ,但这显然不符合真实的网络解析情况。

最后,在对 DNS 服务器地址使用`net.LookupIP(server)`进行解析并返回 geo code 进行分类时也有问题。因为`net.LookupIP`本身会依赖系统的 resolver 进行解析,也就是会依赖系统默认的 DNS 。然而很多公共 DNS 是在多国部署的,这样做会导致地区分类不准确。

总结来说,您的`dns-bechmark`作品有其亮点。您精心收集了全球很多 DNS 服务器,并利用`dnspyre`进行压力测试,最后将结果汇聚并进行了可视化展示,界面还算美观,这在一定程度上可以为本地优选服务器提供参考。但需要注意的是,如前文所述,影响评分结果的主要因素是网络延时,所以这个结果只能体现本地到“世界 DNS”的性能,仅对本地网络有参考价值,缺乏分享和对比价值。毕竟,通常情况下速度最快的 DNS 往往是本地宽带运营商提供的。此外,您的评分只考虑了 QPS 、延时、错误率等指标,没有对解析结果、应用层 RTT 等结果进行校验,这就可能导致得分最高的 DNS 服务器未必能提供最好的解析结果。还有一点,鉴于您的作品并非 100%原创,尤其是核心的`bechmark`程序`dnspyre`,希望您能在 README 文件中对`dnspyre`进行相关引用并致谢,这符合开源社区的礼仪规范。

--- 感谢豆包对人类回复进行了润色 ---
bigtear
103 天前
@onion83 #13 最后一次回复你了,跟你这种笨人沟通太困难了。

首先你用 AI 读代码也就算了,起码算是知道这个程序的工作原理。
你还用一个人工智障 AI 来生成反驳的论点,你真的是要把我笑死了。

我再耐心回答你一下吧:

我已经跟你说了最关键的问题是你没搞明白这个工具是干嘛的,
你固执且愚蠢,给你指出了你还是没有发现。
你说的这些问题和这个程序没有任何关系,这是一个
《测试本地网络对 DNS 服务器的可访问性和可靠性的测试工具》

回复你一些问题吧,

1. 求求你用聪明一点的 AI 吧,为什么要用现在就是个人工智障的 AI ???
Cloudflare 的 1.1.1.1 DNS 被长城防火墙阻断了,当然没有阿里的 223.5.5.5 速度快了,你和这个 AI 都是大笨比。

2. 不存在高频查询,因为你业余,用 AI 读代码,漏掉了许多代码中的关键信息。
可以明确的告诉你,查询频率不高于正常使用且对服务器的负载造不成任何影响,如果因为这个小小工具影响到服务器,那说明这个服务器不可能支持超过十个人用!!!

3. 我本地网络的测试不用本地的 DNS 解析难道我在中国用地球另一头的服务器解析吗???大笨比!!!你也没看到 README 里明确说明了关闭所有 Tun 和 Proxy 网络。

还搁这儿总结呢,用你自己的话来说就是你这个人说的话和 “评价体系就是 s 上雕花,毫无价值。”
BABYMETAL
99 天前
请问输入什么命令以测试单个 dns 服务器或者按单独的文件内列表得 dns 服务器测试?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1087870

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX