net-benchmark/dns-benchmark-tool

GitHub: net-benchmark/dns-benchmark-tool

一款基于 Python 的 DNS 性能基准测试工具,支持 DoH/DoT 加密协议和 DNSSEC 验证,帮助用户量化对比不同 DNS 解析器的延迟、可靠性和安全性。

Stars: 360 | Forks: 11

# DNS 基准测试工具 ## [BuildTools](https://buildtools.net) 的一部分 - 网络性能套件 **快速、全面的 DNS 性能测试,支持 DNSSEC 验证、DoH/DoT 以及企业级功能** ``` pip install dns-benchmark-tool dns-benchmark benchmark --use-defaults --formats csv,excel ``` **实时追踪** [![实时追踪](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/97d2c935bb033638.gif)](https://github.com/frankovo/dns-benchmark-tool) *观看 DNS 查询的动态过程* **实时追踪 - Web UI** [![实时追踪 - Web UI](https://raw.githubusercontent.com/net-benchmark/dns-benchmark-tool/main/docs/BuildTools_DNS_Test_Demo.gif)](https://github.com/frankovo/dns-benchmark-tool) *通过电子邮件警报实时监控 DNS 查询*
## 🎉 ![new](https://img.shields.io/pypi/v/dns-benchmark-tool.svg?color=brightgreen&label=new) 中的新内容 我们新增了**三个强大的 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 的曝光是推动采用率的催化剂 [![CI Tests](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/3955f8e0a5033643.svg)](https://github.com/frankovo/dns-benchmark-tool/actions/workflows/test.yml) [![Publish to TestPyPI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/e439792c8e033645.svg)](https://github.com/frankovo/dns-benchmark-tool/actions/workflows/testpypi.yml) [![Publish to PyPI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/25f3dde63e033647.svg)](https://github.com/frankovo/dns-benchmark-tool/actions/workflows/pypi.yml) [![PyPI version](https://img.shields.io/pypi/v/dns-benchmark-tool.svg?color=brightgreen)](https://pypi.org/project/dns-benchmark-tool/) [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/dns-benchmark-tool.svg)](https://pypi.org/project/dns-benchmark-tool/) ![License](https://img.shields.io/badge/license-MIT-green.svg) ![Coverage](https://img.shields.io/badge/coverage-87%25-brightgreen.svg) [![Downloads](https://img.shields.io/pypi/dm/dns-benchmark-tool.svg?color=blueviolet)](https://pypi.org/project/dns-benchmark-tool/) [![GitHub stars](https://img.shields.io/github/stars/frankovo/dns-benchmark-tool.svg?style=social&label=Star)](https://github.com/frankovo/dns-benchmark-tool/stargazers) [![GitHub forks](https://img.shields.io/github/forks/frankovo/dns-benchmark-tool.svg?style=social&label=Fork)](https://github.com/frankovo/dns-benchmark-tool/network/members) [![Issues](https://img.shields.io/github/issues/frankovo/dns-benchmark-tool.svg?color=orange)](https://github.com/frankovo/dns-benchmark-tool/issues) [![Last commit](https://img.shields.io/github/last-commit/frankovo/dns-benchmark-tool.svg?color=blue)](https://github.com/frankovo/dns-benchmark-tool/commits/main) [![Main branch protected](https://img.shields.io/badge/branch%20protection-main%20✅-brightgreen)](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 基准测试运行 [![CLI 基准测试运行](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/82a5eac380033649.png)](https://github.com/frankovo/dns-benchmark-tool) ### 2. Excel 报告输出 [![Excel 报告输出](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/17c84fbd19033650.png)](https://github.com/frankovo/dns-benchmark-tool) ### 3. PDF 执行摘要 [![PDF 执行摘要](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/ead9955bd7033651.png)](https://github.com/frankovo/dns-benchmark-tool) ### 4. PDF 图表 [![PDF 图表](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/f5fc938843033652.png)](https://github.com/frankovo/dns-benchmark-tool) ### 5. Excel 图表 [![Excel 图表](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/826c09b813033654.png)](https://github.com/frankovo/dns-benchmark-tool) ### 6. 实时监控 [![实时监控](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/8e6afe2944033656.png)](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 安装]()
标签:BuildTools套件, DNSSEC验证, DNS基准测试, DNS解析器, DoH (DNS over HTTPS), DoT (DNS over TLS), TCP SYN 扫描, Web UI, 企业级网络工具, 加密DNS, 命令行工具(CLI), 实时跟踪, 性能分析与优化, 系统管理员工具, 网络安全测试, 网络延迟测试, 网络性能测试, 网络故障排查, 逆向工具, 邮件告警