https://github.com/xxnuo/dns-benchmark
在仓库的 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 文件中。
按程序提示输入 Y
或 y
或直接回车,会自动打开数据分析面板网站,点击网站右上角的 读取分析
按钮,选择你刚才的 JSON 文件,就可以看到可视化测试结果了。
1
blackgloves 45 天前
可以,很实用
|
2
ucyo 45 天前
|
3
cnkuner 45 天前
面板中的地址不能复制啊。
|
5
night98 44 天前
分析后的网页建议增加一下可以复制,不然想复制 dns 地址还得手打或者去识别
|
7
onion83 43 天前
首先,肯定楼主的工作和探索精神 👍,但是家庭或者非专业监控机构,去监控全世界的 dns 个人觉得意义不大,dns 服务器一般都是用运营商就近提供或者使用大厂的 DNS ,对于单一网络条件下去测试全球的 QPS 和成功率,自身网络就是瓶颈,数据没有参考价值。
如果是普通用户挑选优质 DNS , 在 Windows 平台且只用于临时测试,希望测速后一键切换 友情推荐免费 dns-jumper : https://www.sordum.org/7952/dns-jumper-v2-3/3/#8 https://imgur.com/klvZrWV |
9
onion83 42 天前 via Android
@bigtear dns-jumper 这种表格有数字还能排序的形式还不够直观 ☺️ 最关键的问题我因为说了,你的单一网络本身就是最大的瓶颈,响应速度几乎就是你的网络延迟。 加上 dns 服务器普遍都会存在防火墙,类似 223.5.5.5 还有每日,每小时限速测率,还没有考虑 isp 对 53 等端口的特殊关照,所以说您做这个小工具也就是有个图表能看看而已,意义其实并不大,放到任意用户的手里结果都会不一样的。但是作为练手的作品,我是非常肯定您的想法和动手能力的,起码东西做出来了。
|
10
bigtear OP @onion83 #9 你需要学学小学语文了☺️ 最关键的问题是你没搞明白这个工具是干嘛的,你说的所有东西都是我的专业领域,我当然知道这些因素。所以说明确告诉您的话这个工具没半毛钱关系。我是非常肯定您的话的,起码连这个工具是干什么的都不知道就在那指点江山挥斥方裘了。
|
11
onion83 41 天前
@bigtear 专不专业不是您自认的,V2 都是行内人士懂的人一眼便知道你作品的问题所在。如果连数据都是错的,一切的什么可视化、评价体系就是 s 上雕花,毫无价值。
|
13
onion83 38 天前
我是一名有着 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`进行相关引用并致谢,这符合开源社区的礼仪规范。 --- 感谢豆包对人类回复进行了润色 --- |
14
bigtear OP @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 上雕花,毫无价值。” |
15
BABYMETAL 32 天前
请问输入什么命令以测试单个 dns 服务器或者按单独的文件内列表得 dns 服务器测试?
|