V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bigtear
V2EX  ›  宽带症候群

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

  •  
  •   bigtear · 45 天前 · 2077 次点击
    这是一个创建于 45 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 文件,就可以看到可视化测试结果了。

    15 条回复    2024-11-21 12:04:53 +08:00
    blackgloves
        1
    blackgloves  
       45 天前
    可以,很实用
    ucyo
        2
    ucyo  
       45 天前

    很不错的工具,能加下这里可以复制吗
    cnkuner
        3
    cnkuner  
       45 天前
    面板中的地址不能复制啊。
    bigtear
        4
    bigtear  
    OP
       44 天前
    @ucyo
    @cnkuner 第一次进去有提示呀,点击右侧的柱图可以复制地址
    night98
        5
    night98  
       44 天前
    分析后的网页建议增加一下可以复制,不然想复制 dns 地址还得手打或者去识别
    bigtear
        6
    bigtear  
    OP
       44 天前 via Android
    @night98 有提示呀,点击右侧的柱图可以复制地址,我看看搞个显眼的提示
    onion83
        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
    bigtear
        8
    bigtear  
    OP
       42 天前
    @onion83 这不是监控,这是测速工具,就是因为 dnsjumper 只有 windows 版而且数据不直观,所以我写了这个工具😂
    onion83
        9
    onion83  
       42 天前 via Android
    @bigtear dns-jumper 这种表格有数字还能排序的形式还不够直观 ☺️ 最关键的问题我因为说了,你的单一网络本身就是最大的瓶颈,响应速度几乎就是你的网络延迟。 加上 dns 服务器普遍都会存在防火墙,类似 223.5.5.5 还有每日,每小时限速测率,还没有考虑 isp 对 53 等端口的特殊关照,所以说您做这个小工具也就是有个图表能看看而已,意义其实并不大,放到任意用户的手里结果都会不一样的。但是作为练手的作品,我是非常肯定您的想法和动手能力的,起码东西做出来了。
    bigtear
        10
    bigtear  
    OP
       41 天前
    @onion83 #9 你需要学学小学语文了☺️ 最关键的问题是你没搞明白这个工具是干嘛的,你说的所有东西都是我的专业领域,我当然知道这些因素。所以说明确告诉您的话这个工具没半毛钱关系。我是非常肯定您的话的,起码连这个工具是干什么的都不知道就在那指点江山挥斥方裘了。
    onion83
        11
    onion83  
       41 天前
    @bigtear 专不专业不是您自认的,V2 都是行内人士懂的人一眼便知道你作品的问题所在。如果连数据都是错的,一切的什么可视化、评价体系就是 s 上雕花,毫无价值。
    bigtear
        12
    bigtear  
    OP
       38 天前 via Android
    @onion83 你笑死我了,你真的看代码了吗🤣,什么都不懂就自以为是
    onion83
        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`进行相关引用并致谢,这符合开源社区的礼仪规范。

    --- 感谢豆包对人类回复进行了润色 ---
    bigtear
        14
    bigtear  
    OP
       36 天前
    @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
        15
    BABYMETAL  
       32 天前
    请问输入什么命令以测试单个 dns 服务器或者按单独的文件内列表得 dns 服务器测试?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5870 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 02:21 · PVG 10:21 · LAX 18:21 · JFK 21:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.