⚠️ 此项目已迁移,不再维护。 请安装替代项目:
pip install net-benchmark仓库:https://github.com/net-benchmark/net-benchmark 所有现有命令和标志完全兼容。
快速、全面的 DNS 性能测试,支持 DNSSEC 验证、DoH/DoT 及企业级功能```bash pip install dns-benchmark-tool dns-benchmark benchmark --use-defaults --formats csv,excel
> 🎉 **1,400+ 次下载 · 600+ 活跃用户**
> 🚀 **网页仪表盘现已上线!** [免费试用 BuildTools →](https://buildtools.net)
---
**实时追踪**
[](https://github.com/frankovo/dns-benchmark-tool)
*观看 DNS 查询的实时动态*
**实时追踪 - 网页界面**
[](https://github.com/frankovo/dns-benchmark-tool)
*通过电子邮件警报实时监控 DNS 查询*
</div>
## 🎉 新增内容 
我们新增了**三个强大的 CLI 命令**,并完全支持 **DoH、DoT 和 DNSSEC**:
- 🚀 **top** — 根据速度和可靠性快速对解析器排序
- 📊 **compare** — 并排基准测试,提供详细统计和导出选项
- 🔄 **monitoring** — 持续性能追踪,带警报和日志记录
- 🔒 **DoH / DoT / DNSSEC** — 加密 DNS 基准测试,带真实延迟权衡数据```bash
# Quick resolver ranking
dns-benchmark top
# Compare resolvers side-by-side
dns-benchmark compare Cloudflare Google Quad9 --show-details
# Run monitoring for 1 hour with alerts
dns-benchmark monitoring --use-defaults --formats csv,excel --interval 30 --duration 3600 \
--alert-latency 150 --alert-failure-rate 5 --output monitor.log
# Encrypted 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
DNS 解析通常是网络性能中隐藏的瓶颈。一个慢速的解析器可能给每个请求增加数百毫秒的延迟。
dns-benchmark-tool 可帮助您:
pip install dns-benchmark-tool
### 运行您的第一个基准测试```bash
# Test default resolvers against popular domains
dns-benchmark benchmark --use-defaults --formats csv,excel
结果会自动保存到 ./benchmark_results/,包含:
就这样! 您刚刚针对 10 个域名测试了 5 个 DNS 解析器。
dns-benchmark top --limit 5
dns-benchmark compare Cloudflare Google Quad9 --show-details
dns-benchmark monitoring --use-defaults --dot
--interval 30 --duration 3600
--alert-latency 150 --output monitor.log
## ✨ 主要特性
### 🚀 性能
- **异步查询** - 同时测试 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 和 DoT 在首次查询每个解析器时会增加 TLS 握手开销。使用 `--warmup-fast` 在测量前吸收此开销。
> - `--dnssec-validate` 请求 RRSIG 记录并强制 AD 标志。仅约 33% 的常见域名签署了 DNSSEC——在未签名域上会预期得到 `DNSSEC_FAILED` 结果。开启和关闭此标志的延迟数据**不可直接比较**。
> - 在移动/热点网络上的结果将显示 2–5 倍于有线以太网的方差。请使用 `--iterations 5` 并比较中位数延迟,而非平均值。```bash
# DoH benchmark
dns-benchmark benchmark \
--resolvers "Cloudflare,Google" \
--domains "cloudflare.com,google.com" \
--doh --warmup-fast
# custom resolvers — must supply urls 1:1, order matters, or it fails early
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
# DoT with DNSSEC on signed domains
dns-benchmark benchmark \
--resolvers "Cloudflare,Quad9" \
--domains "cloudflare.com,quad9.net" \
--dot \
--dnssec-validate
# DOH rank top resolvers
dns-benchmark top --doh --limit 5
# DOT rank top resolvers
dns-benchmark top --dot --metric reliability --limit 5
# Compare DoH resolvers
dns-benchmark compare Cloudflare Google --doh --iterations 3
# Monitor with DoT
dns-benchmark monitoring --use-defaults --dot \
--interval 60 --alert-latency 300
# DoH + DNSSEC enforced + export
dns-benchmark benchmark --use-defaults --doh --dnssec-validate --formats csv,excel
# DoT + DNSSEC enforced + multiple iterations
dns-benchmark benchmark \
--resolvers "Cloudflare,Quad9,Google" \
--domains "cloudflare.com,quad9.net,google.com" \
--dot \
--dnssec-validate \
--iterations 5 \
--formats excel
# DoH + custom urls + monitoring
dns-benchmark monitoring \
--resolvers "Cloudflare,Google" \
--doh \
--doh-url "https://cloudflare-dns.com/dns-query,https://dns.google/dns-query" \
--interval 30 --duration 7200
早期失败示例 — 这些在任何查询运行之前立即失败:```bash
dns-benchmark benchmark --use-defaults --doh --dot
dns-benchmark benchmark --resolvers "Cloudflare,Google" --doh
--doh-url "https://cloudflare-dns.com/dns-query"
dns-benchmark benchmark --resolvers "192.168.1.1" --doh
---
## 🔧 高级功能
---
> ⚠️ 这些标志**仅为可见性而记录**,尚未实现。
> 它们代表即将推出的高级功能。
- `--zone-transfer` → AXFR/IXFR 区域传输测试 *(即将推出)*
- `--tsig` → TSIG 认证查询 *(即将推出)*
- `--idna` → 国际化域名支持 *(即将推出)*
---
<details>
<summary><b>🚀 性能与并发特性</b></summary>
<br>
- **使用 dnspython 的异步 I/O** - 同时测试 100 多个解析器
- **支持 Trio 框架** - 高并发异步操作
- **可配置的并发性** - 控制最大并发查询数
- **重试逻辑** - 失败查询的指数退避
- **缓存模拟** - 在有/无 DNS 缓存的情况下进行测试
- **多次迭代基准测试** - 多次运行测试以提高准确性
- **预热阶段** - 测试前预热 DNS 缓存
- **统计分析** - 平均值、中位数、P95、P99、抖动、一致性评分
**示例:**```bash
dns-benchmark benchmark \
--max-concurrent 200 \
--iterations 5 \
--timeout 3.0 \
--warmup
示例:```bash
dns-benchmark benchmark
--doh
--resolvers doh-providers.json
--dnssec-validate
</details>
<details>
<summary><b>🏢 企业级与迁移功能</b></summary>
<br>
- **区域传输(AXFR/IXFR)** - 完整及增量区域传输验证
- **动态 DNS 更新** - 测试 DNS 写入操作与更新
- **EDNS0 支持** - 扩展 DNS 选项、客户端子网、更大的负载
- **Windows WMI 集成** - 自动检测活动系统 DNS 设置
- **合规报告** - 生成可供审计的 PDF/Excel 报告
- **SLA 验证** - 跟踪正常运行时间与性能阈值
**示例:**```bash
# Validate DNS migration
dns-benchmark benchmark \
--resolvers old-provider.json,new-provider.json \
--zone-transfer \ # coming soon
--output migration-report/ \
--formats pdf,excel
示例:```bash
dns-benchmark benchmark
--use-defaults
--formats csv,excel
--domain-stats
--record-type-stats
--error-breakdown
--formats csv,excel,pdf
</details>
<details>
<summary><b>🌐 国际化与兼容性</b></summary>
<br>
- **IDNA 支持** - 国际化域名 (IDN)
- **多种记录类型** - A, AAAA, MX, TXT, CNAME, NS, SOA, PTR, SRV, CAA
- **跨平台** - Linux, macOS, Windows (原生支持)
- **CI/CD 集成** - JSON 输出、正确退出码、静默模式
- **自定义解析器** - 从 JSON 加载,测试自己的 DNS 服务器
- **自定义域名** - 针对特定域名列表进行测试
**示例:**```bash
# Test internationalized domains
dns-benchmark benchmark \
--domains international-domains.txt \
--record-types A,AAAA,MX \
--resolvers custom-resolvers.json
💡 大多数用户只需基础功能。 这些高级能力在需要时即可使用。
dns-benchmark benchmark
--domains api.myapp.com,cdn.myapp.com
--record-types A,AAAA
--resolvers production.json
--iterations 10
**结果:** 将API延迟减少100-300毫秒
---
### 🛡️ 面向DevOps/SRE:迁移前验证```bash
# Test new DNS provider before switching
dns-benchmark benchmark \
--resolvers current-dns.json,new-dns.json \
--use-defaults \
--dnssec-validate \
--output migration-report/ \
--formats csv,excel
结果: 迁移前验证性能和安全性
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 更快(或不!)
---
### 📊 面向网络管理员:自动化健康检查```bash
# Add to crontab for monthly reports
0 0 1 * * dns-benchmark benchmark \
--use-defaults \
--output /var/reports/dns/ \
--formats excel,csv \
--domain-stats \
--error-breakdown
结果: 自动化合规与SLA报告
dns-benchmark benchmark
--doh
--resolvers privacy-resolvers.json
--domains sensitive-sites.txt
--dnssec-validate
**Result:** 在不牺牲隐私的前提下找到最快的加密DNS
---
## 📦 安装与设置
### 前提条件
- Python 3.9+
- pip 包管理器
### 从 PyPI 安装```bash
pip install dns-benchmark-tool
git clone https://github.com/frankovo/dns-benchmark-tool.git cd dns-benchmark-tool pip install -e .
### 验证安装```bash
dns-benchmark --version
dns-benchmark --help
dns-benchmark benchmark --use-defaults --formats csv,excel
---
## 📖 使用示例
### 基本用法```bash
# Basic test with progress bars
dns-benchmark benchmark --use-defaults --formats csv,excel
# Basic test without progress bars
dns-benchmark benchmark --use-defaults --formats csv,excel --quiet
# Test with custom resolvers and domains
dns-benchmark benchmark --resolvers data/resolvers.json --domains data/domains.txt
# Quick test with only CSV output
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-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
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-benchmark top --record-types A,AAAA,MX
dns-benchmark top --timeout 3.0 --max-concurrent 50
dns-benchmark top --output results.json
dns-benchmark top --output results.csv
dns-benchmark top --output results.txt
dns-benchmark top --quiet
dns-benchmark top --limit 10 --metric reliability --category privacy --output top_resolvers.csv
dns-benchmark compare Cloudflare Google Quad9
dns-benchmark compare 1.1.1.1 8.8.8.8 9.9.9.9
dns-benchmark compare "Cloudflare" "Google" --iterations 5
dns-benchmark compare Cloudflare Google -d ./data/domains.txt
dns-benchmark compare Cloudflare Google -t A,AAAA,MX
dns-benchmark compare Cloudflare Google --timeout 3.0 --max-concurrent 200
dns-benchmark compare Cloudflare Google -o results.json
dns-benchmark compare Cloudflare Google -o results.csv
dns-benchmark compare Cloudflare Google --quiet
dns-benchmark compare Cloudflare Google --show-details
dns-benchmark monitoring --use-defaults
dns-benchmark monitoring -r resolvers.json --use-defaults
dns-benchmark monitoring -d domains.txt --use-defaults
dns-benchmark monitoring --use-defaults --interval 30
dns-benchmark monitoring --use-defaults --duration 3600
dns-benchmark monitoring --use-defaults --alert-latency 150 --alert-failure-rate 5
dns-benchmark monitoring --use-defaults --output monitor.log
dns-benchmark monitoring -r resolvers.json -d domains.txt -i 45 --duration 1800 -o monitor.log
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 没有破坏性更改
- 文件检测优先于内联解析
### 用法示例
#### 之前(仅文件有效)```bash
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
#### 具名解析器```bash
# Named resolvers
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
#### 单一```bash
# Single
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
### 域名管理```bash
# List all test domains
dns-benchmark list-domains
# Show domains by category
dns-benchmark list-domains --category tech
dns-benchmark list-domains --category ecommerce
dns-benchmark list-domains --category social
# Limit results
dns-benchmark list-domains --count 10
dns-benchmark list-domains --category news --count 5
# Export domain list
dns-benchmark list-domains --format csv
dns-benchmark list-domains --format json
dns-benchmark list-categories
### 配置管理```bash
# Generate sample configuration
dns-benchmark generate-config --output sample_config.yaml
# Category-specific configurations
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
# Custom configuration for specific use case
dns-benchmark generate-config --category privacy --output privacy_audit.yaml
dns-benchmark benchmark --use-defaults
dns-benchmark benchmark --use-defaults --formats csv --quiet
dns-benchmark benchmark --use-defaults --record-types A,AAAA,MX
附加分析标志:```bash
# Include domain and record-type analytics and error breakdown
dns-benchmark benchmark --use-defaults \
--domain-stats --record-type-stats --error-breakdown
JSON 导出:```bash
dns-benchmark benchmark --use-defaults --json --output ./results
#### 网络管理员```bash
# Compare internal vs external 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
# Test DNS failover scenarios
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
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
#### 开发与运维```bash
# Test application dependencies
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 integration test
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```bash
# Corporate network assessment
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
# Multi-location testing
dns-benchmark benchmark \
--resolvers data/global_resolvers.json \
--domains data/international_domains.txt \
--formats excel \
--output ./global_performance
DNS基准测试工具现在包含三个专用命令,适用于不同的工作流程:
快速按速度和可靠性对解析器进行排名。```bash
dns-benchmark top
dns-benchmark top -d domains.txt
dns-benchmark top -o results.json
### 📊 比较
通过详细统计信息并排比较解析器。```bash
# Compare Cloudflare, Google, and Quad9
dns-benchmark compare Cloudflare Google Quad9
# Compare by IP addresses
dns-benchmark compare 1.1.1.1 8.8.8.8 9.9.9.9
# Show detailed per-domain breakdown
dns-benchmark compare Cloudflare Google --show-details
# Export results to CSV
dns-benchmark compare Cloudflare Google -o results.csv
通过告警持续监控解析器性能。```bash
dns-benchmark monitoring --use-defaults
dns-benchmark monitoring -r resolvers.json -d domains.txt
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`,便于分析时过滤。
示例摘要输出:```markdown
=== 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%)
{ "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" } ] }
### 域名文本文件格式```txt
# Popular websites
google.com
github.com
stackoverflow.com
# Corporate domains
microsoft.com
apple.com
amazon.com
# CDN and cloud
cloudflare.com
aws.amazon.com
默认情况下,该工具支持 CSV 和 Excel 导出。
PDF 导出需要额外的依赖 weasyprint,为了避免在某些平台上出现运行时问题,它不会自动安装。
pip install dnsvalidator[pdf]
``````bash
pip install dns-benchmark-tool[pdf]
安装后,您可以通过CLI请求PDF输出:```bash dns-benchmark --use-defaults --formats pdf --output ./results
如果未安装 `weasyprint` 并且您请求 PDF 输出,CLI 将显示:```bash
[-] Error during benchmark: PDF export requires 'weasyprint'. Install with: pip install dns-benchmark-tool[pdf]
DNS Benchmark Tool 使用 WeasyPrint 生成 PDF 报告。
如果您需要 PDF 导出功能,除了 Python 包之外,还需要额外的系统库。
sudo apt install python3-pip libpango-1.0-0 libpangoft2-1.0-0
libharfbuzz-subset0 libjpeg-dev libopenjp2-7-dev libffi-dev
#### 🛠 macOS (Homebrew)```bash
brew install pango cairo libffi gdk-pixbuf jpeg openjpeg harfbuzz
使用以下方法之一安装 GTK+ 库:
安装完成后重启终端。
安装系统库后,安装 Python 额外组件:```bash pip install dns-benchmark-tool[pdf]
然后运行:```bash
dns-benchmark --use-defaults --formats pdf --output ./results
dns-benchmark generate-config
--category privacy
--output my-config.yaml
## 性能优化```bash
# Large-scale testing (1000+ queries)
dns-benchmark benchmark \
--resolvers data/many_resolvers.json \
--domains data/many_domains.txt \
--max-concurrent 50 \
--timeout 3 \
--quiet \
--formats csv
# Unstable networks
dns-benchmark benchmark \
--resolvers data/backup_resolvers.json \
--domains data/critical_domains.txt \
--timeout 10 \
--retries 3 \
--max-concurrent 10
# Quick diagnostics
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
sudo apt-get install libcairo2 libpango-1.0-0 libpangocairo-1.0-0
libgdk-pixbuf2.0-0 libffi-dev shared-mime-info
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
### 调试模式```bash
# Verbose run
python -m dns_benchmark.cli benchmark --use-defaults --formats csv
# Minimal configuration
dns-benchmark benchmark --resolvers "1.1.1.1" --domains "google.com" --formats csv
0 2 * * * /usr/local/bin/dns-benchmark benchmark --use-defaults --formats csv --quiet --output /var/log/dns_benchmark/daily_$(date +%Y%m%d)
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 示例```yaml
- 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.pngdocs/screenshots/excel_report.pngdocs/screenshots/pdf_summary.pngdocs/screenshots/pdf_charts.pngdocs/screenshots/excel_charts.pngdocs/screenshots/real_time_monitoring.pngdns-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
常见场景:```bash
# I'm new — where to start?
dns-benchmark list-defaults
dns-benchmark benchmark --use-defaults
# Test specific resolvers
dns-benchmark list-resolvers --category security
dns-benchmark benchmark --resolvers data/security_resolvers.json --use-defaults
# Generate a management report
dns-benchmark benchmark --use-defaults --formats excel,pdf \
--domain-stats --record-type-stats --error-breakdown --json \
--output ./management_report
前提条件
make gpg-check 验证。准备发布(签名)
补丁/次要/主要版本号提升:
make release-patch # or: 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 标签(签名)。手动替代方案
创建分支并签名提交:
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
**CLI 永远免费。**网络仪表盘现已在 buildtools.net 上线。
我们欢迎贡献!以下是一些参与方式:
本项目包含一个 Makefile,用于简化安装、测试和代码质量检查。```makefile
.PHONY: install install-dev uninstall mypy black isort flake8 cov test clean cli-test
install: pip install .
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:
pytest -vv -s -m cli tests/test_cli_commands.py
### 常见用法
- **仅安装运行时** ```bash
make install
本地 ISP 的 DNS 通常有缓存优势,但可能缺乏:
两者都测试,并基于 YOUR 优先级来决定!
可以!只需将其添加到自定义解析器 JSON 文件中:```json { "resolvers": [ {"name": "My DNS", "ip": "192.168.1.1"} ] }
</details>
<details>
<summary><b>CLI 版本和托管版本有什么区别?</b></summary>
**CLI(永久免费):**
- 从您的位置运行测试
- 将结果保存到本地
- 开源——引擎与仪表板相同
**Web 仪表板(实时运行于 buildtools.net):**
- 可视化基准测试结果和历史记录
- DNS 监控,支持实时警报
- 提供免费套餐,Pro 版 €14/月
- 2026 年 Q3 将推出多区域测试
</details>
<details>
<summary><b>这个工具可以在生产环境中安全使用吗?</b></summary>
是的!该工具仅执行 DNS 查询(读取操作)。它不会:
- 修改 DNS 记录
- 进行攻击
- 向外部服务器发送数据(除非您启用托管功能)
所有测试都是标准 DNS 查询,任何解析器每天都会处理。
</details>
<details>
<summary><b>为什么每次运行的结果会不同?</b></summary>
DNS 性能因以下因素而异:
- 网络状况
- DNS 缓存(解析器和中间缓存)
- 服务器负载
- 地理路由变化
运行多次迭代(`--iterations 5`)可以获得更一致的结果。
</details>
---
## 🔗 链接与支持
### 官方
- **网站**:[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 讨论](https://github.com/frankovo/dns-benchmark-tool/discussions)
- **问题报告**:[Bug 报告](https://github.com/frankovo/dns-benchmark-tool/issues)
### 统计数据
- **下载量**:1,400+(本周)
- **活跃用户**:600+
---
## 许可证
本项目采用 MIT 许可证 —— 详情请参阅 [LICENSE](https://github.com/net-benchmark/dns-benchmark-tool/blob/main/LICENSE) 文件。
---
<div align="center">
**由 [@frankovo](https://github.com/frankovo) 用 ❤️ 构建**
属于 [BuildTools](https://buildtools.net) - 网络性能套件
[⭐ 在 GitHub 上星标](https://github.com/frankovo/dns-benchmark-tool) • [📦 从 PyPI 安装](https://pypi.org/project/dns-benchmark-tool/)
</div>
| 命令 | 功能 | 快速示例 |
|---|
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 |
| 选项 | 描述 | 示例 |
|---|
--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 |
| 模式 | 推荐标志 | 目的 |
|---|
| 快速运行 | --iterations 1 --timeout 1 --retries 0 --warmup-fast | 快速反馈,最少重试,轻量预热。适合快速检查。 |
| 全面运行 | --iterations 3 --use-cache --warmup --timeout 5 --retries 2 | 多次测试,启用缓存,完整预热。最适合详细基准测试。 |
| 调试模式 | --iterations 1 --timeout 10 --retries 0 --quiet | 长超时,无重试,最小输出。用于诊断解析器问题。 |
| 平衡运行 | --iterations 2 --use-cache --warmup-fast --timeout 2 --retries 1 | 折中方案:适中速度,部分重试,启用缓存,快速预热。 |
打开 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