一款基于 Python 的 DNS 性能基准测试工具,支持 DoH/DoT 加密协议和 DNSSEC 验证,帮助用户量化对比不同 DNS 解析器的延迟、可靠性和安全性。
# DNS 基准测试工具
## [BuildTools](https://buildtools.net) 的一部分 - 网络性能套件
**快速、全面的 DNS 性能测试,支持 DNSSEC 验证、DoH/DoT 以及企业级功能**
```
pip install dns-benchmark-tool
dns-benchmark benchmark --use-defaults --formats csv,excel
```
**实时追踪**
[](https://github.com/frankovo/dns-benchmark-tool)
*观看 DNS 查询的动态过程*
**实时追踪 - Web UI**
[](https://github.com/frankovo/dns-benchmark-tool)
*通过电子邮件警报实时监控 DNS 查询*
## 🎉  中的新内容
我们新增了**三个强大的 CLI 命令**,并全面支持 **DoH、DoT 和 DNSSEC**:
- 🚀 **top** — 按速度和可靠性快速对解析器进行排名
- 📊 **compare** — 并排基准测试,包含详细统计信息和导出选项
- 🔄 **monitoring** — 带有警报和日志记录的持续性能追踪
- 🔒 **DoH / DoT / DNSSEC** — 加密 DNS 基准测试,提供真实的延迟权衡数据
```
# 快速解析器排名
dns-benchmark top
# 并行比较解析器
dns-benchmark compare Cloudflare Google Quad9 --show-details
# 运行监控 1 小时并启用警报
dns-benchmark monitoring --use-defaults --formats csv,excel --interval 30 --duration 3600 \
--alert-latency 150 --alert-failure-rate 5 --output monitor.log
# 加密 DNS
dns-benchmark benchmark \
--resolvers "Cloudflare,Google" \
--domains "bing.com,google.com" \
--doh \
--doh-url "https://cloudflare-dns.com/dns-query,https://dns.google/dns-query" \
--iterations 1 \
--formats csv \
--output ./doh_results_explicit_urls
dns-benchmark benchmark \
--resolvers "Cloudflare,Quad9" \
--domains "cloudflare.com,quad9.net" \
--dot
```
## 📈 社区亮点
- ⭐ Stars:在 Hacker News 上发布后,从 7 增长到 110+
- 📦 下载量:在最初停滞之后,反弹至每天 200+
- 🐘 Mastodon:也在那里进行了分享,但真正的流量激增来自 HN
- 💬 反馈:HN 社区的建设性意见直接促成了 v0.3.0 → v0.3.1 的补丁
- 🚀 经验:Hacker News 的曝光是推动采用率的催化剂
[](https://github.com/frankovo/dns-benchmark-tool/actions/workflows/test.yml)
[](https://github.com/frankovo/dns-benchmark-tool/actions/workflows/testpypi.yml)
[](https://github.com/frankovo/dns-benchmark-tool/actions/workflows/pypi.yml)
[](https://pypi.org/project/dns-benchmark-tool/)
[](https://pypi.org/project/dns-benchmark-tool/)


[](https://pypi.org/project/dns-benchmark-tool/)
[](https://github.com/frankovo/dns-benchmark-tool/stargazers)
[](https://github.com/frankovo/dns-benchmark-tool/network/members)
[](https://github.com/frankovo/dns-benchmark-tool/issues)
[](https://github.com/frankovo/dns-benchmark-tool/commits/main)
[](https://github.com/frankovo/dns-benchmark-tool/blob/main/RELEASE.md)
## 目录
- [DNS 基准测试工具](#dns-benchmark-tool)
- [BuildTools 的一部分 - 网络性能套件](#part-of-buildtools---network-performance-suite)
- [🎉 新内容](#-whats-new-in-)
- [📈 社区亮点](#-community-highlights)
- [目录](#table-of-contents)
- [🎯 为什么选择这个工具?](#-why-this-tool)
- [问题所在](#the-problem)
- [解决方案](#the-solution)
- [非常适合](#perfect-for)
- [快速开始](#quick-start)
- [安装说明](#installation)
- [运行你的第一次基准测试](#run-your-first-benchmark)
- [查看结果](#view-results)
- [⚡ 命令一览](#-commands-at-a-glance)
- [✨ 主要特性](#-key-features)
- [🚀 性能](#-performance)
- [🔒 安全与隐私](#-security--privacy)
- [📊 分析与导出](#-analysis--export)
- [🏢 企业级功能](#-enterprise-features)
- [🌐 跨平台支持](#-cross-platform)
- [🔒 安全与加密 DNS](#-security--encrypted-dns)
- [🔧 高级功能](#-advanced-capabilities)
- [💼 使用场景](#-use-cases)
- [🔧 面向开发者:优化 API 性能](#-for-developers-optimize-api-performance)
- [🛡️ 面向 DevOps/SRE:在迁移前进行验证](#️-for-devopssre-validate-before-migration)
- [🏠 面向自托管用户:验证 Pi-hole 性能](#-for-self-hosters-prove-pi-hole-performance)
- [📊 面向网络管理员:自动化健康检查](#-for-network-admins-automated-health-checks)
- [🔐 面向隐私倡导者:测试加密 DNS](#-for-privacy-advocates-test-encrypted-dns)
- [📦 安装与设置](#-installation--setup)
- [系统要求](#requirements)
- [从 PyPI 安装](#install-from-pypi)
- [从源码安装](#install-from-source)
- [验证安装](#verify-installation)
- [首次运行](#first-run)
- [📖 使用示例](#-usage-examples)
- [基本用法](#basic-usage)
- [高级用法](#advanced-usage)
- [解析器和域名的内联输入支持](#inline-input-support-for-resolvers-and-domains)
- [新功能](#new-capabilities)
- [向后兼容性](#backward-compatibility)
- [使用示例](#usage-examples)
- [升级前(仅支持文件)](#before-only-files-worked)
- [升级后(两者皆可)](#after-both-work)
- [命名解析器](#named-resolvers)
- [混合输入](#mixed-input)
- [单一输入](#single)
- [🔧 实用工具](#-utilities)
- [解析器管理](#risolver-management)
- [域名管理](#domain-management)
- [分类概览](#category-overview)
- [配置管理](#configuration-management)
- [完整使用指南](#complete-usage-guide)
- [快速性能测试](#quick-performance-test)
- [网络管理员](#network-administrator)
- [ISP 和网络运营商](#isp--network-operator)
- [开发者与 DevOps](#developer--devops)
- [安全审计员](#security-auditor)
- [企业 IT](#enterprise-it)
- [🔍 针对最终补丁的 README 调整](#-readme-adjustments-for-final-patch)
- [新 CLI 选项](#new-cli-options)
- [⚡ CLI 命令](#-cli-commands)
- [🚀 Top](#-top)
- [📊 Compare](#-compare)
- [🔄 Monitoring](#-monitoring)
- [🌟 命令展示](#-command-showcase)
- [📊 分析增强功能](#-analysis-enhancements)
- [⚡ 最佳实践](#-best-practices)
- [⚙️ 配置文件](#️-configuration-files)
- [解析器 JSON 格式](#resolvers-json-format)
- [域名文本文件格式](#domains-text-file-format)
- [输出格式](#output-formats)
- [CSV 输出](#csv-outputs)
- [Excel 报告](#excel-report)
- [PDF 报告](#pdf-report)
- [📄 可选的 PDF 导出](#-optional-pdf-export)
- [安装 PDF 支持](#install-with-pdf-support)
- [用法](#usage)
- [⚠️ WeasyPrint 设置(用于 PDF 导出)](#️-weasyprint-setup-for-pdf-export)
- [🛠 Linux (Debian/Ubuntu)](#-linux-debianubuntu)
- [🛠 macOS (Homebrew)](#-macos-homebrew)
- [🛠 Windows](#-windows)
- [✅ 验证安装](#-verify-installation)
- [JSON 导出](#json-export)
- [生成示例配置](#generate-sample-config)
- [性能优化](#performance-optimization)
- [故障排除](#troubleshooting)
- [Debug 模式](#debug-mode)
- [自动化与 CI](#automation--ci)
- [Cron 任务](#cron-jobs)
- [GitHub Actions 示例](#github-actions-example)
- [截图](#screenshots)
- [1. CLI 基准测试运行](#1-cli-benchmark-run)
- [2. Excel 报告输出](#2-excel-report-output)
- [3. PDF 执行摘要](#3-pdf-executive-summary)
- [4. PDF 图表](#4-pdf-charts)
- [5. Excel 图表](#5-excel-charts)
- [6. 实时监控](#6-real-time-monitoring)
- [获取帮助](#getting-help)
- [发布工作流](#release-workflow)
- [🌐 BuildTools Web 仪表盘 — 现已上线](#-buildtools-web-dashboard--now-live)
- [当前已上线(免费 + 专业版)](#whats-live-now-free--pro)
- [2026 年第二季度即将推出](#coming-q2-2026)
- [2026 年第三季度即将推出](#coming-q3-2026)
- [🛣️ 路线图](#️-roadmap)
- [✅ 当前版本 (CLI 版本)](#-current-release-cli-edition)
- [✅ Web 仪表盘 (已上线)](#-web-dashboard-live)
- [🔜 2026 年第二季度即将推出](#-coming-q2-2026)
- [2026 年第三季度](#q3-2026)
- [🤝 贡献](#-contributing)
- [贡献方式](#ways-to-contribute)
- [🛠 开发与 Makefile 命令](#-development--makefile-commands)
- [常见用法](#common-usage)
- [代码准则](#code-guidelines)
- [❓ 常见问题](#-faq)
- [🔗 链接与支持](#-links--support)
- [官方](#official)
- [社区](#community)
- [统计](#stats)
- [许可证](#license)
## 🎯 为什么选择这个工具?
DNS 解析往往是网络性能中隐藏的瓶颈。一个缓慢的解析器可能会给每个请求增加数百毫秒的延迟。
### 问题所在
- ⏱️ **隐藏的瓶颈**:DNS 可能会给每个请求增加 300ms 以上的延迟
- 🤷 **未知的性能**:大多数开发者从未测试过他们的 DNS
- 🌍 **地理位置很重要**:“最快”的解析器取决于你所在的位置
- 🔒 **安全性各异**:DNSSEC、DoH、DoT 的支持差异很大
### 解决方案
dns-benchmark-tool 可以帮助你:
- 🔍 **找到最快的** 适合你所在位置的 DNS 解析器
- 📊 **获取真实数据** - P95、P99、抖动、一致性评分
- 🛡️ **验证安全性** - 内置 DNSSEC 验证
- 🚀 **规模化测试** - 在几秒钟内进行 100 多次并发查询
### 非常适合
- ✅ **开发者** 优化 API 性能
- ✅ **DevOps/SRE** 验证解析器 SLA
- ✅ **自托管用户** 比较 Pi-hole/Unbound 与公共 DNS
- ✅ **网络管理员** 运行合规性检查
## 快速开始
### 安装说明
```
pip install dns-benchmark-tool
```
### 运行你的第一次基准测试
```
# 使用默认解析器测试热门域名
dns-benchmark benchmark --use-defaults --formats csv,excel
```
### 查看结果
结果会自动保存到 `./benchmark_results/` 目录下,包含:
- 带有统计信息的摘要 CSV 文件
- 详细的原始数据
- 可选的 PDF/Excel 报告
**就是这样!** 你刚刚对 5 个 DNS 解析器和 10 个域名进行了基准测试。
## ⚡ 命令一览
| 命令 | 功能 | 快速示例 |
|---|---|---|
| `benchmark` | 完整的 DNS 基准测试并导出 | `dns-benchmark benchmark --use-defaults` |
| `top` | 按速度对所有解析器进行排名 | `dns-benchmark top --limit 5` |
| `compare` | 解析器并排比较 | `dns-benchmark compare Cloudflare Google Quad9` |
| `monitoring` | 带有警报的持续监控 | `dns-benchmark monitoring --use-defaults` |
## ✨ 主要特性
### 🚀 性能
- **异步查询** - 同时测试 100 多个解析器
- **多次迭代** - 多次运行基准测试以确保准确性
- **统计分析** - 平均值、中位数、P95、P99、抖动、一致性
- **缓存控制** - 在启用/禁用 DNS 缓存的情况下进行测试
### 🔒 安全与隐私
- **DNSSEC 验证** - 验证加密信任链
- **DNS-over-HTTPS (DoH)** - 加密 DNS 基准测试
- **DNS-over-TLS (DoT)** - 安全传输测试
- **DNS-over-QUIC (DoQ)** - 实验性 QUIC 支持
### 📊 分析与导出
- **多种格式** - CSV、Excel、PDF、JSON
- **可视化报告** - 图表和图形
- **域名统计** - 针对每个域名的性能分析
- **错误细分** - 识别有问题的解析器
### 🏢 企业级功能
- **TSIG 身份验证** - 安全的企业查询
- **区域传送** - AXFR/IXFR 验证
- **动态更新** - 测试 DNS 写入操作
- **合规性报告** - 审计就绪的文档
### 🌐 跨平台支持
- **Linux、macOS、Windows** - 到处都能运行
- **对 CI/CD 友好** - JSON 输出,退出代码
- **IDNA 支持** - 国际化域名
- **自动检测** - Windows WMI DNS 发现
## 🔒 安全与加密 DNS
完全支持三种协议——每种都会增加隐私,但会带来延迟成本。
| 协议 | 标志 | 典型开销 | 何时使用 |
|---|---|---|---|
| 普通 UDP | *(默认)* | 基线 | 延迟基准测试 |
| DNS-over-HTTPS | `--doh` | +50–200ms | 隐私保护,绕过防火墙 |
| DNS-over-TLS | `--dot` | 冷启动 +200–500ms,预热后约 50ms | 加密传输 |
| DNSSEC | `--dnssec-validate` | +30–100ms | 验证解析器完整性 |
```
# DoH 基准测试
dns-benchmark benchmark \
--resolvers "Cloudflare,Google" \
--domains "cloudflare.com,google.com" \
--doh --warmup-fast
# 自定义解析器 — 必须提供一对一的 url,顺序很重要,否则会提前失败
dns-benchmark benchmark \
--resolvers "Cloudflare,Google" \
--domains "bing.com,google.com" \
--doh \
--doh-url "https://cloudflare-dns.com/dns-query,https://dns.google/dns-query" \
--iterations 1 \
--formats csv \
--output ./doh_results_explicit_urls
# 在已签名域上启用 DNSSEC 的 DoT
dns-benchmark benchmark \
--resolvers "Cloudflare,Quad9" \
--domains "cloudflare.com,quad9.net" \
--dot \
--dnssec-validate
# DoH 排名顶级解析器
dns-benchmark top --doh --limit 5
# DoT 排名顶级解析器
dns-benchmark top --dot --metric reliability --limit 5
# 比较 DoH 解析器
dns-benchmark compare Cloudflare Google --doh --iterations 3
# 使用 DoT 进行监控
dns-benchmark monitoring --use-defaults --dot \
--interval 60 --alert-latency 300
# DoH + 强制 DNSSEC + 导出
dns-benchmark benchmark --use-defaults --doh --dnssec-validate --formats csv,excel
# DoT + 强制 DNSSEC + 多次迭代
dns-benchmark benchmark \
--resolvers "Cloudflare,Quad9,Google" \
--domains "cloudflare.com,quad9.net,google.com" \
--dot \
--dnssec-validate \
--iterations 5 \
--formats excel
# DoH + 自定义 url + 监控
dns-benchmark monitoring \
--resolvers "Cloudflare,Google" \
--doh \
--doh-url "https://cloudflare-dns.com/dns-query,https://dns.google/dns-query" \
--interval 30 --duration 7200
```
**早期失败示例** — 这些在任何查询运行之前就会立即失败:
```
# --doh 和 --dot 互斥
dns-benchmark benchmark --use-defaults --doh --dot
# 错误:--doh 和 --dot 互斥。
# --doh-url 数量必须与 --resolvers 数量匹配
dns-benchmark benchmark --resolvers "Cloudflare,Google" --doh \
--doh-url "https://cloudflare-dns.com/dns-query"
# 错误:--doh-url 有 1 个 URL,但 --resolvers 有 2 个解析器。数量必须匹配。
# 使用 --doh 的自定义 IP 需要 --doh-url
dns-benchmark benchmark --resolvers "192.168.1.1" --doh
# 错误:--doh 需要一个 DoH URL 用于:192.168.1.1。使用 --doh-url 显式提供它们。
```
## 🔧 高级功能
- `--zone-transfer` → AXFR/IXFR 区域传送测试 *(即将推出)*
- `--tsig` → TSIG 身份验证查询 *(即将推出)*
- `--idna` → 国际化域名支持 *(即将推出)*
🚀 性能与并发功能
- **基于 dnspython 的异步 I/O** - 同时测试 100 多个解析器
- **Trio 框架支持** - 高并发异步操作
- **可配置的并发性** - 控制最大并发查询数
- **重试逻辑** - 对失败的查询进行指数退避
- **缓存模拟** - 在启用/禁用 DNS 缓存的情况下进行测试
- **多次迭代基准测试** - 多次运行测试以确保准确性
- **预热阶段** - 在测试前预热 DNS 缓存
- **统计分析** - 平均值、中位数、P95、P99、抖动、一致性评分
**示例:**
```
dns-benchmark benchmark \
--max-concurrent 200 \
--iterations 5 \
--timeout 3.0 \
--warmup
```
🔒 安全与隐私功能
- **DNSSEC 验证** - 验证加密信任链
- **DNS-over-HTTPS (DoH)** - 通过 HTTPS 进行加密 DNS 基准测试
- **DNS-over-TLS (DoT)** - 安全传输层测试
- **DNS-over-QUIC (DoQ)** - 实验性 QUIC 协议支持
- **TSIG 身份验证** - 企业级 DNS 的事务签名
- **EDNS0 支持** - 扩展 DNS 特性和更大的有效载荷
**示例:**
```
# 测试 DoH 解析器
dns-benchmark benchmark \
--doh \
--resolvers doh-providers.json \
--dnssec-validate
```
🏢 企业与迁移功能
- **区域传送 (AXFR/IXFR)** - 完整和增量区域传送验证
- **动态 DNS 更新** - 测试 DNS 写入操作和更新
- **EDNS0 支持** - 扩展 DNS 选项、客户端子网、更大的有效载荷
- **Windows WMI 集成** - 自动检测活动的系统 DNS 设置
- **合规性报告** - 生成审计就绪的 PDF/Excel 报告
- **SLA 验证** - 追踪正常运行时间和性能阈值
**示例:**
```
# 验证 DNS 迁移
dns-benchmark benchmark \
--resolvers old-provider.json,new-provider.json \
--zone-transfer \ # coming soon
--output migration-report/ \
--formats pdf,excel
```
📊 分析与报告功能
- **按域名统计** - 按域名分析性能
- **按记录类型统计** - 比较 A、AAAA、MX、TXT 等
- **错误细分** - 对错误类型进行分类和计数
- **比较矩阵** - 解析器并排比较
- **趋势分析** - 随时间变化的性能(多次运行)
- **按标准寻找最佳** - 根据延迟/可靠性/一致性找到最佳解析器
**示例:**
```
# 详细分析
dns-benchmark benchmark \
--use-defaults \
--formats csv,excel \
--domain-stats \
--record-type-stats \
--error-breakdown \
--formats csv,excel,pdf
```
🌐 国际化与兼容性
- **IDNA 支持** - 国际化域名 (IDN)
- **多种记录类型** - A、AAAA、MX、TXT、CNAME、NS、SOA、PTR、SRV、CAA
- **跨平台支持** - Linux、macOS、Windows(原生支持)
- **CI/CD 集成** - JSON 输出、正确的退出代码、静默模式
- **自定义解析器** - 从 JSON 加载,测试你自己的 DNS 服务器
- **自定义域名** - 根据你的特定域名列表进行测试
**示例:**
```
# 测试国际化域名
dns-benchmark benchmark \
--domains international-domains.txt \
--record-types A,AAAA,MX \
--resolvers custom-resolvers.json
```
## 💼 使用场景
### 🔧 面向开发者:优化 API 性能
```
# 为您的 API 端点寻找最快的 DNS
dns-benchmark benchmark \
--domains api.myapp.com,cdn.myapp.com \
--record-types A,AAAA \
--resolvers production.json \
--iterations 10
```
**结果:** 减少 100-300ms 的 API 延迟
### 🛡️ 面向 DevOps/SRE:在迁移前进行验证
```
# 切换前测试新的 DNS 提供商
dns-benchmark benchmark \
--resolvers current-dns.json,new-dns.json \
--use-defaults \
--dnssec-validate \
--output migration-report/ \
--formats csv,excel
```
**结果:** 在迁移前验证性能和安全性
### 🏠 面向自托管用户:验证 Pi-hole 性能
```
# 将 Pi-hole 与公共解析器进行比较
dns-benchmark compare \
--resolvers pihole.local,1.1.1.1,8.8.8.8,9.9.9.9 \
--domains common-sites.txt \
--rounds 10
```
**结果:** 提供数据驱动的证据,证明你的自托管 DNS 更快(或者并不快!)
### 📊 面向网络管理员:自动化健康检查
```
# 添加到 crontab 以生成每月报告
0 0 1 * * dns-benchmark benchmark \
--use-defaults \
--output /var/reports/dns/ \
--formats excel,csv \
--domain-stats \
--error-breakdown
```
**结果:** 自动化的合规性和 SLA 报告
### 🔐 面向隐私倡导者:测试加密 DNS
```
# 对注重隐私的 DoH/DoT 解析器进行基准测试
dns-benchmark benchmark \
--doh \
--resolvers privacy-resolvers.json \
--domains sensitive-sites.txt \
--dnssec-validate
```
**结果:** 在不牺牲隐私的前提下找到最快的加密 DNS
## 📦 安装与设置
### 系统要求
- Python 3.9+
- pip 包管理器
### 从 PyPI 安装
```
pip install dns-benchmark-tool
```
### 从源码安装
```
git clone https://github.com/frankovo/dns-benchmark-tool.git
cd dns-benchmark-tool
pip install -e .
```
### 验证安装
```
dns-benchmark --version
dns-benchmark --help
```
### 首次运行
```
# 使用默认设置进行测试(推荐首次使用)
dns-benchmark benchmark --use-defaults --formats csv,excel
```
## 📖 使用示例
### 基本用法
```
# 带进度条的基础测试
dns-benchmark benchmark --use-defaults --formats csv,excel
# 不带进度条的基础测试
dns-benchmark benchmark --use-defaults --formats csv,excel --quiet
# 使用自定义解析器和域名进行测试
dns-benchmark benchmark --resolvers data/resolvers.json --domains data/domains.txt
# 仅输出 CSV 的快速测试
dns-benchmark benchmark --use-defaults --formats csv
```
### 高级用法
```
# 导出机器可读的打包文件
dns-benchmark benchmark --use-defaults --json --output ./results
# 测试特定的记录类型
dns-benchmark benchmark --use-defaults --formats csv,excel --record-types A,AAAA,MX
# 自定义输出位置和格式
dns-benchmark benchmark \
--use-defaults \
--output ./my-results \
--formats csv,excel
# 包含详细统计信息
dns-benchmark benchmark \
--use-defaults \
--formats csv,excel \
--record-type-stats \
--error-breakdown
# 高并发并启用重试
dns-benchmark benchmark \
--use-defaults \
--formats csv,excel \
--max-concurrent 200 \
--timeout 3.0 \
--retries 3
# 网站迁移规划
dns-benchmark benchmark \
--resolvers data/global_resolvers.json \
--domains data/migration_domains.txt \
--formats excel,pdf \
--output ./migration_analysis
# DNS 提供商选择
dns-benchmark benchmark \
--resolvers data/provider_candidates.json \
--domains data/business_domains.txt \
--formats csv,excel \
--output ./provider_selection
# 网络故障排除
dns-benchmark benchmark \
--resolvers "192.168.1.1,1.1.1.1,8.8.8.8" \
--domains "problematic-domain.com,working-domain.com" \
--timeout 10 \
--retries 3 \
--formats csv \
--output ./troubleshooting
# 安全评估
dns-benchmark benchmark \
--resolvers data/security_resolvers.json \
--domains data/security_test_domains.txt \
--formats pdf \
--output ./security_assessment
# 性能监控
dns-benchmark benchmark \
--use-defaults \
--formats csv \
--quiet \
--output /var/log/dns_benchmark/$(date +%Y%m%d_%H%M%S)
# 全新顶级命令
# 运行基础基准测试(默认:按延迟排名)
dns-benchmark top
# → 使用示例域名测试所有解析器,按延迟排名
# 限制显示的解析器数量
dns-benchmark top --limit 5
# → 仅显示前 5 个解析器
# 按成功率排名
dns-benchmark top --metric success
# → 按最高成功率对解析器进行排名
# 按可靠性排名(综合得分:成功率 + 延迟)
dns-benchmark top --metric reliability
# → 使用加权得分对解析器进行排名
# 按类别过滤解析器
dns-benchmark top --category privacy
dns-benchmark top --category family
dns-benchmark top --category security
# → 仅测试指定类别中的解析器
# 使用自定义域名列表
dns-benchmark top --domains domains.txt
# → 从文本文件加载域名,而不是使用内置的示例列表
# 指定 DNS 记录类型
dns-benchmark top --record-types A,AAAA,MX
# → 查询多种记录类型(以逗号分隔)
# 调整超时和并发
dns-benchmark top --timeout 3.0 --max-concurrent 50
# → 将查询超时设置为 3 秒,并将并发限制为 50
# 将结果导出为 JSON
dns-benchmark top --output results.json
# → 以 JSON 格式保存结果
# 将结果导出为 CSV
dns-benchmark top --output results.csv
# → 以 CSV 格式保存结果
# 将结果导出为 TXT
dns-benchmark top --output results.txt
# → 以纯文本格式保存结果
# 安静模式(无进度条,对 CI/CD 友好)
dns-benchmark top --quiet
# → 隐藏进度输出
# 组合使用示例
dns-benchmark top --limit 10 --metric reliability --category privacy --output top_resolvers.csv
# → 对注重隐私的解析器进行基准测试,按可靠性排名,显示前 10 名,并导出为 CSV
# 全新比较命令
# 按名称比较解析器
dns-benchmark compare Cloudflare Google Quad9
# ^ 使用默认域名和记录类型 A 比较 Cloudflare、Google 和 Quad9 解析器
# 按 IP 地址进行基础比较
dns-benchmark compare 1.1.1.1 8.8.8.8 9.9.9.9
# ^ 直接指定解析器 IP,而不是名称
# 增加迭代次数以获得更稳定的结果
dns-benchmark compare "Cloudflare" "Google" --iterations 5
# ^ 对每个解析器/域名/记录类型运行 5 轮查询
# 使用文件中的自定义域名列表
dns-benchmark compare Cloudflare Google -d ./data/domains.txt
# ^ 从 domains.txt 加载域名,而不是示例域名
# 查询多种记录类型
dns-benchmark compare Cloudflare Google -t A,AAAA,MX
# ^ 测试每个域名的 A、AAAA 和 MX 记录
# 调整超时和并发
dns-benchmark compare Cloudflare Google --timeout 3.0 --max-concurrent 200
# ^ 将查询超时设置为 3 秒,并允许 200 个并发查询
# 将结果导出为 JSON
dns-benchmark compare Cloudflare Google -o results.json
# ^ 将比较摘要保存到 results.json
# 将结果导出为 CSV
dns-benchmark compare Cloudflare Google -o results.csv
# ^ 将比较摘要保存到 results.csv(通过 CSVExporter)
# 隐藏进度输出
dns-benchmark compare Cloudflare Google --quiet
# ^ 静默运行,仅打印最终结果
# 显示每个域名的详细分类
dns-benchmark compare Cloudflare Google --show-details
# ^ 打印每个解析器下各域名的平均延迟和成功计数
# 全新监控命令
# 使用默认解析器和示例域名开始监控
dns-benchmark monitoring --use-defaults
# ^ 无限期运行,每 60 秒检查一次,使用内置解析器和 5 个示例域名
# 使用 JSON 中的自定义解析器列表进行监控
dns-benchmark monitoring -r resolvers.json --use-defaults
# ^ 从 resolvers.json 加载解析器,域名使用默认值
# 使用自定义域名列表进行监控
dns-benchmark monitoring -d domains.txt --use-defaults
# ^ 使用默认解析器,但域名从 domains.txt 加载
# 将监控间隔更改为 30 秒
dns-benchmark monitoring --use-defaults --interval 30
# ^ 每 30 秒而不是 60 秒运行一次检查
# 运行固定时长的监控(例如,1 小时 = 3600 秒)
dns-benchmark monitoring --use-defaults --duration 3600
# ^ 1 小时后自动停止
# 设置更严格的警报阈值
dns-benchmark monitoring --use-defaults --alert-latency 150 --alert-failure-rate 5
# ^ 如果延迟 >150ms 或失败率 >5% 则发出警报
# 将监控结果保存到日志文件
dns-benchmark monitoring --use-defaults --output monitor.log
# ^ 将结果和警报追加到 monitor.log
# 组合选项:自定义解析器、域名、间隔、时长和日志记录
dns-benchmark monitoring -r resolvers.json -d domains.txt -i 45 --duration 1800 -o monitor.log
# ^ 每 45 秒根据 domains.txt 监控来自 resolvers.json 的解析器,持续 30 分钟,并记录到 monitor.log
# 运行监控 1 小时并启用警报
dns-benchmark monitoring --use-defaults --interval 30 --duration 3600 \
--alert-latency 150 --alert-failure-rate 5 --output monitor.log
```
⚠️ **关于新命令的说明:** 没有成功查询的解析器将被排除在排名之外,并显示 `Avg Latency: N/A`。
## 解析器和域名的内联输入支持
此补丁为 `--resolvers` 和 `--domains` 标志引入了对逗号分隔内联值的全面支持,修复了问题 [#39](https://github.com/frankovo/dns-benchmark-tool/issues/39),并在不破坏任何现有工作流的情况下改善了 cli 的可用性。
### 新功能
1. **内联解析器**:`--resolvers "1.1.1.1,8.8.8.8,9.9.9.9"`
2. **内联域名**:`--domains "google.com,github.com"`
3. **单一值**:`--resolvers "1.1.1.1"` 或 `--domains "google.com"`
4. **命名解析器**:`--resolvers "cloudflare,google,quad9"`
5. **混合输入**:`--resolvers "1.1.1.1,cloudflare,8.8.8.8"`
### 向后兼容性
- 所有现有的基于文件的配置继续有效
- 对 cli 没有破坏性更改
- 文件检测优先于内联解析
### 使用示例
#### 升级前(仅支持文件)
```
dns-benchmark benchmark \
--resolvers data/resolvers.json \
--domains data/domains.txt
```
#### 升级后(两者皆可)
```
# 内联(全新)
dns-benchmark benchmark \
--resolvers "1.1.1.1,8.8.8.8,9.9.9.9" \
--domains "google.com,github.com" \
--timeout 10 \
--retries 3 \
--formats csv \
--output ./troubleshooting
# 文件(仍然有效)
dns-benchmark benchmark \
--resolvers data/resolvers.json \
--domains data/domains.txt \
--formats csv
```
#### 命名解析器
```
# 命名解析器
dns-benchmark benchmark \
--resolvers "Cloudflare,Google,Quad9" \
--domains "google.com,github.com" \
--timeout 10 \
--retries 3 \
--formats csv \
--output ./troubleshooting_named
```
#### 混合输入
```
# 混合输入
dns-benchmark benchmark \
--resolvers "1.1.1.1,Cloudflare,8.8.8.8" \
--domains "google.com,github.com" \
--timeout 10 \
--retries 3 \
--formats csv \
--output ./troubleshooting_mixed
```
#### 单一输入
```
# 单一
dns-benchmark benchmark \
--resolvers "1.1.1.1" \
--domains "google.com" \
--timeout 10 \
--retries 3 \
--formats csv \
--output ./troubleshooting
```
## 🔧 实用工具
### 解析器管理
```
# 显示默认解析器和域名
dns-benchmark list-defaults
# 浏览所有可用的解析器
dns-benchmark list-resolvers
# 浏览详细信息
dns-benchmark list-resolvers --details
# 按类别过滤
dns-benchmark list-resolvers --category security
dns-benchmark list-resolvers --category privacy
dns-benchmark list-resolvers --category family
# 将解析器导出为不同格式
dns-benchmark list-resolvers --format csv
dns-benchmark list-resolvers --format json
```
### 域名管理
```
# 列出所有测试域名
dns-benchmark list-domains
# 按类别显示域名
dns-benchmark list-domains --category tech
dns-benchmark list-domains --category ecommerce
dns-benchmark list-domains --category social
# 限制结果数量
dns-benchmark list-domains --count 10
dns-benchmark list-domains --category news --count 5
# 导出域名列表
dns-benchmark list-domains --format csv
dns-benchmark list-domains --format json
```
### 分类概览
```
# 查看所有可用的类别
dns-benchmark list-categories
```
### 配置管理
```
# 生成示例配置
dns-benchmark generate-config --output sample_config.yaml
# 特定类别的配置
dns-benchmark generate-config --category security --output security_test.yaml
dns-benchmark generate-config --category family --output family_protection.yaml
dns-benchmark generate-config --category performance --output performance_test.yaml
# 针对特定用例的自定义配置
dns-benchmark generate-config --category privacy --output privacy_audit.yaml
```
## 完整使用指南
### 快速性能测试
```
# 带进度条的基础测试
dns-benchmark benchmark --use-defaults
# 仅输出 CSV 的快速测试
dns-benchmark benchmark --use-defaults --formats csv --quiet
# 测试特定的记录类型
dns-benchmark benchmark --use-defaults --record-types A,AAAA,MX
```
附加分析标志:
```
# 包含域名和记录类型分析及错误分类
dns-benchmark benchmark --use-defaults \
--domain-stats --record-type-stats --error-breakdown
```
JSON 导出:
```
# 导出机器可读的打包文件
dns-benchmark benchmark --use-defaults --json --output ./results
```
#### 网络管理员
```
# 比较内部与外部 DNS
dns-benchmark benchmark \
--resolvers "192.168.1.1,1.1.1.1,8.8.8.8,9.9.9.9" \
--domains "internal.company.com,google.com,github.com,api.service.com" \
--formats excel,pdf \
--timeout 3 \
--max-concurrent 50 \
--output ./network_audit
# 测试 DNS 故障转移场景
dns-benchmark benchmark \
--resolvers data/primary_resolvers.json \
--domains data/business_critical_domains.txt \
--record-types A,AAAA \
--retries 3 \
--formats csv,excel \
--output ./failover_test
```
#### ISP 和网络运营商
```
# 全面的 ISP 解析器比较
dns-benchmark benchmark \
--resolvers data/isp_resolvers.json \
--domains data/popular_domains.txt \
--timeout 5 \
--max-concurrent 100 \
--formats csv,excel,pdf \
--output ./isp_performance_analysis
# 区域性能测试
dns-benchmark benchmark \
--resolvers data/regional_resolvers.json \
--domains data/regional_domains.txt \
--formats excel \
--quiet \
--output ./regional_analysis
```
#### 开发者与 DevOps
```
# 测试应用程序依赖项
dns-benchmark benchmark \
--resolvers "1.1.1.1,8.8.8.8" \
--domains "api.github.com,registry.npmjs.org,pypi.org,docker.io,aws.amazon.com" \
--formats csv \
--quiet \
--output ./app_dependencies
# CI/CD 集成测试
dns-benchmark benchmark \
--resolvers data/ci_resolvers.json \
--domains data/ci_domains.txt \
--timeout 2 \
--formats csv \
--quiet
```
#### 安全审计员
```
# 侧重于安全性的解析器测试
dns-benchmark benchmark \
--resolvers data/security_resolvers.json \
--domains data/malware_test_domains.txt \
--formats csv,pdf \
--output ./security_audit
# 侧重于隐私的测试
dns-benchmark benchmark \
--resolvers data/privacy_resolvers.json \
--domains data/tracking_domains.txt \
--formats excel \
--output ./privacy_analysis
```
#### 企业 IT
```
# 企业网络评估
dns-benchmark benchmark \
--resolvers data/enterprise_resolvers.json \
--domains data/corporate_domains.txt \
--record-types A,AAAA,MX,TXT,SRV \
--timeout 10 \
--max-concurrent 25 \
--retries 2 \
--formats csv,excel,pdf \
--output ./enterprise_dns_audit
# 多地点测试
dns-benchmark benchmark \
--resolvers data/global_resolvers.json \
--domains data/international_domains.txt \
--formats excel \
--output ./global_performance
```
## 🔍 针对最终补丁的 README 调整
### 新 CLI 选项
| 选项 | 描述 | 示例 |
|--------------------|-----------------------------------------------------------------------------|-------------------------------------------------------------------------|
| `--iterations, -i` | 运行完整的基准测试循环 **N 次** | `dns-benchmark benchmark --use-defaults -i 3` |
| `--use-cache` | 允许在迭代中重用缓存的结果 | `dns-benchmark benchmark --use-defaults -i 3 --use-cache` |
| `--warmup` | 运行**完整预热**(所有解析器 × 域名 × 记录类型) | `dns-benchmark benchmark --use-defaults --warmup` |
| `--warmup-fast` | 运行**轻量级预热**(每个解析器探测一次) | `dns-benchmark benchmark --use-defaults --warmup-fast` |
| `--include-charts` | 在 PDF/Excel 报告中嵌入图表和图形,用于可视化性能分析 | `dns-benchmark benchmark --use-defaults --formats pdf,excel --include-charts` |
## ⚡ CLI 命令
DNS 基准测试工具现在包含三个针对不同工作流的专用命令:
### 🚀 顶级
按速度和可靠性快速对解析器进行排名。
```
# 快速解析器排名
dns-benchmark top
# 使用自定义域名列表
dns-benchmark top -d domains.txt
# 将结果导出为 JSON
dns-benchmark top -o results.json
```
### 📊 比较
对解析器进行并排基准测试,并提供详细统计信息。
```
# 比较 Cloudflare、Google 和 Quad9
dns-benchmark compare Cloudflare Google Quad9
# 通过 IP 地址比较
dns-benchmark compare 1.1.1.1 8.8.8.8 9.9.9.9
# 显示每个域名的详细分类
dns-benchmark compare Cloudflare Google --show-details
# 将结果导出为 CSV
dns-benchmark compare Cloudflare Google -o results.csv
```
### 🔄 监控
通过警报持续监控解析器性能。
```
# 持续监控默认解析器(每 60 秒)
dns-benchmark monitoring --use-defaults
# 使用自定义解析器和域名进行监控
dns-benchmark monitoring -r resolvers.json -d domains.txt
# 运行监控 1 小时并启用警报
dns-benchmark monitoring --use-defaults --interval 30 --duration 3600 \
--alert-latency 150 --alert-failure-rate 5 --output monitor.log
```
### 🌟 命令展示
| 命令 | 目的 | 典型用例 | 主要选项 | 输出 |
|--------------|---------|------------------|-------------|--------|
| **top** | 按速度和可靠性快速对解析器进行排名 | 快速检查当前哪个解析器最好 | `--domains`、`--record-types`、`--output` | 按延迟和成功率排序的解析器列表 |
| **compare** | 特定解析器的并排比较 | 跨所选解析器/域名的详细基准测试 | `--domains`、`--record-types`、`--iterations`、`--output`、`--show-details` | 包含延迟、成功率、按域名细分的解析器表格 |
| **monitoring** | 带有警报的持续监控 | 随时间推移实时追踪解析器性能 | `--interval`、`--duration`、`--alert-latency`、`--alert-failure-rate`、`--output`、`--use-defaults` | 实时状态指示器、警报、可选日志文件 |
## 📊 分析增强功能
- **迭代次数**:在运行多次迭代时显示。
- **缓存命中数**:显示有多少查询由缓存提供(当启用 `--use-cache` 时)。
- **失败追踪**:对反复出错的解析器进行计数,并可通过 `get_failed_resolvers()` 进行检查。
- **缓存统计**:可通过 `get_cache_stats()` 获取,显示缓存条目数以及是否启用缓存。
- **预热结果**:预热查询在原始数据中标记为 `iteration=0`,便于在分析中将其过滤掉。
摘要输出示例:
```
=== BENCHMARK SUMMARY ===
Total queries: 150
Successful: 140 (93.33%)
Average latency: 212.45 ms
Median latency: 198.12 ms
Fastest resolver: Cloudflare
Slowest resolver: Quad9
Iterations: 3
Cache hits: 40 (26.7%)
```
## ⚡ 最佳实践
| 模式 | 推荐标志 | 目的 |
|-----------------|------------------------------------------------------------------------------------|-------------------------------------------------------------------------|
| **快速运行** | `--iterations 1 --timeout 1 --retries 0 --warmup-fast` | 快速反馈,最少重试,轻量级预热。适合快速检查。 |
| **彻底运行** `--iterations 3 --use-cache --warmup --timeout 5 --retries 2` | 多次传递,启用缓存,完整预热。最适合详细的基准测试。 |
| **Debug 模式** | `--iterations 1 --timeout 10 --retries 0 --quiet` | 长超时,无重试,最少输出。有助于诊断解析器问题。 |
| **平衡运行**| `--iterations 2 --use-cache --warmup-fast --timeout 2 --retries 1` | 折中方案:适中的速度,部分重试,启用缓存,快速预热。 |
## ⚙️ 配置文件
### 解析器 JSON 格式
```
{
"resolvers": [
{
"name": "Cloudflare",
"ip": "1.1.1.1",
"ipv6": "2606:4700:4700::1111"
},
{
"name": "Google DNS",
"ip": "8.8.8.8",
"ipv6": "2001:4860:4860::8888"
}
]
}
```
### 域名文本文件格式
```
# 热门网站
google.com
github.com
stackoverflow.com
# 企业域名
microsoft.com
apple.com
amazon.com
# CDN 和云
cloudflare.com
aws.amazon.com
```
## 输出格式
### CSV 输出
- 原始数据:带有时间戳和元数据的单个查询结果
- 摘要统计:每个解析器的汇总指标
- 域名统计:按域名统计的指标(当使用 --domain-stats 时)
- 记录类型统计:按记录类型统计的指标(当使用 --record-type-stats 时)
- 错误细分:按错误类型统计的数量(当使用 --error-breakdown 时)
### Excel 报告
- 原始数据表:所有查询结果及格式
- 解析器摘要:带有条件格式的综合统计
- 域名统计:按域名统计的性能(可选)
- 记录类型统计:按记录类型统计的性能(可选)
- 错误细分:汇总的错误计数(可选)
- 性能分析:图表和比较分析
### PDF 报告
- 执行摘要:主要发现和建议
- 性能图表:延迟比较;可选的成功率图表
- 解析器排名:按平均延迟排序
- 详细分析:包含百分位数的技术深入探讨
### 📄 可选的 PDF 导出
默认情况下,该工具支持 **CSV** 和 **Excel** 导出。
PDF 导出需要额外的依赖 **weasyprint**,为了避免在某些平台上出现运行时问题,它不会自动安装。
#### 安装 PDF 支持
```
pip install dns-benchmark-tool[pdf]
```
#### 用法
安装完成后,你可以通过 CLI 请求 PDF 输出:
```
dns-benchmark --use-defaults --formats pdf --output ./results
```
如果未安装 `weasyprint` 而你请求了 PDF 输出,CLI 将显示:
```
[-] Error during benchmark: PDF export requires 'weasyprint'. Install with: pip install dns-benchmark-tool[pdf]
```
### ⚠️ WeasyPrint 设置(用于 PDF 导出)
DNS 基准测试工具使用 **WeasyPrint** 生成 PDF 报告。
如果你需要 PDF 导出,除了 Python 包之外,还需要额外的系统库。
#### 🛠 Linux (Debian/Ubuntu)
```
sudo apt install python3-pip libpango-1.0-0 libpangoft2-1.0-0 \
libharfbuzz-subset0 libjpeg-dev libopenjp2-7-dev libffi-dev
```
#### 🛠 macOS (Homebrew)
```
brew install pango cairo libffi gdk-pixbuf jpeg openjpeg harfbuzz
```
#### 🛠 Windows
使用以下方法之一安装 GTK+ 库:
- **MSYS2**:[下载 MSYS2](https://www.msys2.org/),然后运行:
pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-libffi
- **GTK+ 64‑bit 安装程序**:[下载 GTK+ Runtime](https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases) 并运行安装程序。
安装后请重启你的终端。
#### ✅ 验证安装
安装系统库后,安装 Python 扩展包:
```
pip install dns-benchmark-tool[pdf]
```
然后运行:
```
dns-benchmark --use-defaults --formats pdf --output ./results
```
### JSON 导出
- 机器可读的捆绑包,包含:
- 总体统计数据
- 解析器统计数据
- 原始查询结果
- 域名统计数据
- 记录类型统计数据
- 错误细分
### 生成示例配置
```
dns-benchmark generate-config \
--category privacy \
--output my-config.yaml
```
## 性能优化
```
# 大规模测试(1000+ 次查询)
dns-benchmark benchmark \
--resolvers data/many_resolvers.json \
--domains data/many_domains.txt \
--max-concurrent 50 \
--timeout 3 \
--quiet \
--formats csv
# 不稳定的网络
dns-benchmark benchmark \
--resolvers data/backup_resolvers.json \
--domains data/critical_domains.txt \
--timeout 10 \
--retries 3 \
--max-concurrent 10
# 快速诊断
dns-benchmark benchmark \
--resolvers "1.1.1.1,8.8.8.8" \
--domains "google.com,cloudflare.com" \
--formats csv \
--quiet \
--timeout 2
```
## 故障排除
```
# 找不到命令
pip install -e .
python -m dns_benchmark.cli --help
# PDF 生成失败 (Ubuntu/Debian)
sudo apt-get install libcairo2 libpango-1.0-0 libpangocairo-1.0-0 \
libgdk-pixbuf2.0-0 libffi-dev shared-mime-info
# 或者跳过 PDF
dns-benchmark benchmark --use-defaults --formats csv,excel
# 网络超时
dns-benchmark benchmark --use-defaults --timeout 10 --retries 3
dns-benchmark benchmark --use-defaults --max-concurrent 25
```
### Debug 模式
```
# 详细运行
python -m dns_benchmark.cli benchmark --use-defaults --formats csv
# 最简配置
dns-benchmark benchmark --resolvers "1.1.1.1" --domains "google.com" --formats csv
```
## 自动化与 CI
### Cron 任务
```
# 每日监控
0 2 * * * /usr/local/bin/dns-benchmark benchmark --use-defaults --formats csv --quiet --output /var/log/dns_benchmark/daily_$(date +\%Y\%m\%d)
# 基于时间的变动(每 6 小时)
0 */6 * * * /usr/local/bin/dns-benchmark benchmark --use-defaults --formats csv --quiet --output /var/log/dns_benchmark/$(date +\%Y\%m\%d_\%H)
```
### GitHub Actions 示例
```
- name: DNS Performance Test
run: |
pip install dnspython pandas click tqdm colorama
dns-benchmark benchmark \
--resolvers "1.1.1.1,8.8.8.8" \
--domains "api.service.com,database.service.com" \
--formats csv \
--quiet
```
## 截图
将图片放置在 `docs/screenshots/` 目录下:
- `docs/screenshots/cli_run.png`
- `docs/screenshots/excel_report.png`
- `docs/screenshots/pdf_summary.png`
- `docs/screenshots/pdf_charts.png`
- `docs/screenshots/excel_charts.png`
- `docs/screenshots/real_time_monitoring.png`
### 1. CLI 基准测试运行
[](https://github.com/frankovo/dns-benchmark-tool)
### 2. Excel 报告输出
[](https://github.com/frankovo/dns-benchmark-tool)
### 3. PDF 执行摘要
[](https://github.com/frankovo/dns-benchmark-tool)
### 4. PDF 图表
[](https://github.com/frankovo/dns-benchmark-tool)
### 5. Excel 图表
[](https://github.com/frankovo/dns-benchmark-tool)
### 6. 实时监控
[](https://github.com/frankovo/dns-benchmark-tool)
## 获取帮助
```
dns-benchmark --help
dns-benchmark benchmark --help
dns-benchmark list-resolvers --help
dns-benchmark list-domains --help
dns-benchmark list-categories --help
dns-benchmark generate-config --help
```
常见场景:
```
# 我是新手 — 从哪里开始?
dns-benchmark list-defaults
dns-benchmark benchmark --use-defaults
# 测试特定的解析器
dns-benchmark list-resolvers --category security
dns-benchmark benchmark --resolvers data/security_resolvers.json --use-defaults
# 生成管理报告
dns-benchmark benchmark --use-defaults --formats excel,pdf \
--domain-stats --record-type-stats --error-breakdown --json \
--output ./management_report
```
## 发布工作流
- **前置条件**
- **已配置 GPG 密钥:** 运行 `make gpg-check` 进行验证。
- **分支保护:** main 分支需要签名的提交和通过的 CI。
- **CI 发布:** 在匹配 vX.Y.Z 的签名标签上触发。
- **准备发布(已签名)**
- **补丁/次要/主要版本号提升:**
make release-patch # 或者:make release-minor / make release-major
- 更新版本。
- 创建或重用 `release/X.Y.Z` 分支。
- 进行签名提交并推送该分支。
- **打开 PR:** 从 `release/X.Y.Z` 向 main 分支发起,然后在 CI 通过后合并。
- **打标签并发布**
- **创建签名标签并推送:**
make release-tag VERSION=X.Y.Z
- 使用 `vX.Y.Z`(已签名)标记 main 分支。
- CI 发布到 PyPI。
- **手动替代方案**
- **创建分支并进行签名提交:**
git checkout -b release/manually-update-version-based-on-release-pattern
git add .
git commit -S -m "Release release/$NEXT_VERSION"
git push origin release/$NEXT_VERSION
- **打开 PR 并合并到 main 分支。**
- **然后打标签:**
make release-tag VERSION=$NEXT_VERSION
- **备注**
- **签名提交:** `git commit -S ...`
- **签名标签:** `git tag -s vX.Y.Z -m "Release vX.Y.Z"`
- **版本来源:** `pyproject.toml` 和 `src/dns_benchmark/__init__.py`
## 🌐 BuildTools Web 仪表盘 — 现已上线
**CLI 将永久免费。** Web 仪表盘现已在 [buildtools.net](https://buildtools.net) 上线
### 当前已上线(免费 + 专业版)
- 📊 **DNS 基准测试** — 可视化结果、历史记录,由该 CLI 引擎驱动
- 🔔 **DNS 监控** — 当你的记录发生更改时提供实时警报
- 🆓 **免费版** — 立即开始使用,无需信用卡
- 💼 **专业版 €14/月** — 延长保留期和优先支持
### 2026 年第二季度即将推出
- ⚡ **HTTP 基准测试** — 测量 API 响应时间和 CDN 性能
- 🔒 **SSL 监控** — 在问题发生前提供证书到期警报
### 2026 年第三季度即将推出
- 🌍 **多区域测试** — 同时从多个位置进行测试
[→ 在 buildtools.net 免费注册](https://buildtools.net)
## 🛣️ 路线图
### ✅ 当前版本 (CLI 版本)
- 基准测试、比较、监控 DNS 解析器
- DoH、DoT、DNSSEC 支持(此版本新增)
- 导出到 CSV、Excel、PDF、JSON
### ✅ Web 仪表盘 (已上线)
- 带有可视化历史记录的 DNS 基准测试
- 带有实时警报的 DNS 监控
- 免费版 + 专业版 €14/月
- [buildtools.net](https://buildtools.net)
### 🔜 2026 年第二季度即将推出
- HTTP 基准测试
- SSL 监控
#### 2026 年第三季度
- 多区域测试
## 🤝 贡献
我们欢迎各种贡献!你可以通过以下方式提供帮助:
### 贡献方式
- 🐛 **报告 Bug** - [提出 Issue](https://github.com/frankovo/dns-benchmark-tool/issues)
- 💡 **提出功能建议** - [发起讨论](https://github.com/frankovo/dns-benchmark-tool/discussions)
- 📝 **改进文档** - README、示例、教程
- 🔧 **提交 PR** - Bug 修复、功能、测试
- ⭐ **为仓库加星** - 帮助其他人发现这个工具
- 📢 **传播出去** - 发推文、写博客、分享
### 🛠 开发与 Makefile 命令
本项目包含一个 `Makefile`,用于简化安装、测试和代码质量检查。
```
.PHONY: install install-dev uninstall mypy black isort flake8 cov test clean cli-test
# 🔧 安装包(仅运行时)
install:
pip install .
# 🔧 安装包含开发附加组件的包(pytest、mypy、flake8、black、isort 等)
install-dev:
pip install .[dev]
# 🔧 卸载包
uninstall:
pip uninstall -y dns-benchmark-tool \
dnspython pandas aiohttp click pyfiglet colorama Jinja2 weasyprint openpyxl pyyaml tqdm matplotlib \
mypy black flake8 autopep8 pytest coverage isort
mypy:
mypy .
isort:
isort .
black:
black .
flake8:
flake8 src tests --ignore=E126,E501,E712,F405,F403,E266,W503 --max-line-length=88 --extend-ignore=E203
cov:
coverage erase
coverage run --source=src -m pytest -vv -s
coverage html
test: mypy black isort flake8 cov
clean:
rm -rf __pycache__ .pytest_cache htmlcov .coverage coverage.xml \
build dist *.egg-info .eggs benchmark_results
cli-test:
# Run only the CLI smoke tests marked with @pytest.mark.cli
pytest -vv -s -m cli tests/test_cli_commands.py
```
### 常见用法
- **仅安装运行时依赖**
make install
- **安装开发依赖**
make install-dev
- **运行类型检查、代码检查、格式化和测试**
make test
- **仅运行 CLI 冒烟测试**
make cli-test
- **清理构建/测试产物**
make clean
### 代码准则
- 遵循 PEP 8 风格指南
- 为新功能添加测试
- 更新文档
- 保持 PR 专注且原子化
## ❓ 常见问题
为什么我的 ISP 的 DNS 不是最快的?
本地 ISP 的 DNS 通常具有缓存优势,但可能缺乏:
- 全球任播网络(对于远程域名较慢)
- DNSSEC 验证
- 隐私功能 (DoH/DoT)
- 可靠性保证
请对两者都进行测试,并根据你自己的优先事项做出决定!
我应该多久进行一次 DNS 基准测试?
- **一次性**:在选择 DNS 提供商时
- **每月**:用于网络健康检查
- **迁移前**:在更换提供商时
- **出现问题后**:用于排查性能问题
我可以测试自己的 DNS 服务器吗?
可以!只需将其添加到自定义解析器 JSON 文件中:
```
{
"resolvers": [
{"name": "My DNS", "ip": "192.168.1.1"}
]
}
```
CLI 版本和托管版本有什么区别?
**CLI(永久免费):**
- 从你所在的位置运行测试
- 在本地保存结果
- 开源 — 与驱动仪表盘的引擎相同
**Web 仪表盘(已在 buildtools.net 上线):**
- 可视化的基准测试结果和历史记录
- 带有实时警报的 DNS 监控
- 提供免费版本,专业版 €14/月
- 多区域测试将于 2026 年第三季度推出
这个工具在生产环境中使用安全吗?
安全!该工具仅执行 DNS 查找(只读操作)。它不会:
- 修改 DNS 记录
- 执行攻击
- 将数据发送到外部服务器(除非你启用了托管功能)
所有测试都是任何解析器每天都会处理的标准 DNS 查询。
为什么每次运行的结果会有所不同?
DNS 性能会因以下因素而异:
- 网络状况
- DNS 缓存(解析器和中间环节)
- 服务器负载
- 地理路由变化
多次运行迭代 (`--iterations 5`) 可以获得更一致的结果。
## 🔗 链接与支持
### 官方
- **网站**:[buildtools.net](https://buildtools.net)
- **PyPI**:[dns-benchmark-tool](https://pypi.org/project/dns-benchmark-tool/)
- **GitHub**:[frankovo/dns-benchmark-tool](https://github.com/frankovo/dns-benchmark-tool)
### 社区
- **讨论区**:[GitHub Discussions](https://github.com/frankovo/dns-benchmark-tool/discussions)
- **问题**:[Bug 报告](https://github.com/frankovo/dns-benchmark-tool/issues)
### 统计
- **下载量**:1,400+(本周)
- **活跃用户**:600+
## 许可证
本项目基于 MIT 许可证授权 — 有关详细信息,请参见 [LICENSE](LICENSE) 文件。
**由 [@frankovo](https://github.com/frankovo) 用 ❤️ 构建**
[BuildTools](https://buildtools.net) 的一部分 - 网络性能套件
[⭐ 在 GitHub 上加星](https://github.com/frankovo/dns-benchmark-tool) • [📦 从 PyPI 安装]()