dns-benchmark

dnspy - DNS 服务器的可访问性和性能测试工具

English 中文

项目简介

国内 DNS 服务常遭运营商劫持,被插入各种广告,同时存在隐私泄露风险。为了保障安全可靠的上网体验,我们需要寻找值得信赖的 DNS 服务。

现有的同类工具并不多,较为知名的 DNSJumper 仅支持 Windows 平台,且存在数据源较少、评测维度单一等问题。

因此开发了这款工具,用于测试本地网络环境下可用的 DNS 服务器及其性能表现。该工具使用 Golang 编写,跨平台支持 Windows、macOS、Linux。

并且配套提供可视化数据分析面板,让您一目了然地了解可用的 DNS 服务器 😊

温馨提示:点击数据分析面板中的柱状图即可复制服务器地址。

使用流程:按照下文指导下载测试工具并获得测试结果的 JSON 文件,然后打开数据分析面板网站上传数据即可分析。网站不存储任何数据。

数据分析面板预览

数据分析面板预览

数据分析面板(内含示例数据)

使用方式

dnspy

1. 下载工具

在本仓库的 releases 页面中,根据您的系统架构下载对应的 dnspy-* 文件。

例如:M 系列处理器的 macOS 用户应下载 dnspy-darwin-arm64 文件。

2. 准备测试环境

重要提示:必须关闭所有代理软件的 Tun 模式、虚拟网卡模式,否则会严重影响测试结果的准确性。

3. 运行测试

将下载的文件重命名为 dnspy(Windows 系统为 dnspy.exe),然后打开终端,切换到该文件所在的目录,执行以下命令:

unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
./dnspy

按照提示输入即可开始测试。

4. 测试说明

程序默认使用多线程模式以加快测试速度。

性能要求:默认参数(10 个线程)需要至少上下行 1 MB/s 的网络带宽和至少 4 核心处理器。

如果网络或处理器性能不足,可能导致测试结果不准确,建议通过 -w 参数降低线程数。

测试完成后,结果将输出到当前目录下,文件名格式为 dnspy_result_2024-11-07-17-32-13.json

5. 查看结果

按程序提示输入 Yy 或直接按回车键,程序将自动打开数据分析面板网站。点击网站右上角的”读取分析”按钮,选择刚生成的 JSON 文件,即可查看可视化测试结果。

可用参数

~> dnspy -h

使用示例:

  dnspy
    使用内置的世界所有域名直接启动测试

  dnspy -s 114.114.114.114
    测试单个服务器

  dnspy dnspy_benchmark_2024-10-22-08-18.json
    对测试结果进行可视化分析

参数说明:
  -c, --concurrency int   每个测试的并发数
                          (默认 10)

  -d, --domains string    要批量测试的域名数据存储的文件路径
                          必须是相对当前程序工作路径的文件路径
                          文件内部格式为每行一条域名
                          不修改则使用内置的 10000 个热门域名
                          (默认 "@sampleDomains@")

  -t, --duration int      每个测试的持续时间,单位:秒
                          (默认 10)

  -f, --file string       要批量测试的服务器数据存储的文件路径
                          必须是相对当前程序工作路径的文件路径
                          文件内部格式为每行一条服务器地址

  -g, --geo string        独立功能:使用 GeoIP 数据库进行 IP 或域名归属地查询

      --json              以 JSON 格式输出日志

  -l, --level string      日志级别
                          可选:debug、info、warn、error、fatal、panic
                          (默认 "info")

      --no-aaaa           每个测试不解析 AAAA 记录(不测试 IPv6)

      --old-html          已弃用,不建议使用
                          建议改用新方式:程序先输出数据 JSON 文件,按提示查看可视化分析
                          下次需要查看时,直接用程序打开 JSON 文件
                          本参数使用旧版方式输出单个 HTML 文件到数据 JSON 同目录
                          可双击打开查看

  -o, --output string     输出结果的文件路径
                          必须是相对当前程序工作路径的文件路径
                          不指定则输出到当前工作路径下的 dnspy_result_<当前时间>.json

      --prefer-ipv4       在 DNS 服务器的域名转换为 IP 地址过程中优先使用 IPv4 地址
                          (默认 true)

  -s, --server strings    手动指定要测试的服务器,支持多个

  -w, --worker int        同一时间测试多少个 DNS 服务器
                          (默认 20)

编译

编译环境要求

'GOOS' is not recognized as an internal or external command,
operable program or batch file.

编译步骤

1. 克隆本仓库

git clone https://github.com/xxnuo/dns-benchmark.git
cd dns-benchmark/dnspy

2. 更新数据文件(可选)

make update

3. 配置依赖

make configuration

4. 进行编译

make build

编译完成后,生成的可执行文件将位于当前目录下。

许可证

本项目采用开源许可证,欢迎贡献代码和提出建议。