Fast, comprehensive DNS performance testing with DNSSEC validation, DoH/DoT support, and enterprise features.
Project description
DNS Benchmark Tool
Fast, comprehensive DNS performance testing
Part of BuildTools - Network Performance Suite
pip install dns-benchmark-tool
dns-benchmark benchmark --use-defaults --formats csv,excel
๐ 1,400+ downloads this week! Thank you to our growing community.
Real Time Tracking
Watch DNS queries in motion
๐ Todayโs Release Highlights 
Weโve added three powerful CLI commands to make DNS benchmarking even more versatile:
- ๐ top โ quick ranking of resolvers by speed and reliability
- ๐ compare โ sideโbyโside benchmarking with detailed statistics and export options
- ๐ monitoring โ continuous performance tracking with alerts and logging
# 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 --interval 30 --duration 3600 \
--alert-latency 150 --alert-failure-rate 5 --output monitor.log
Why DNS Benchmarking?
DNS resolution can add 300ms+ to every request. This tool helps you find the fastest resolver for YOUR location.
The Problem:
- DNS adds hidden latency to every request
- Fastest resolver depends on your location
- Security varies wildly (DNSSEC, DoH, DoT)
- Most developers never test their DNS
The Solution:
- Test multiple DNS resolvers side-by-side
- Get statistical analysis (P95, P99, jitter, consistency)
- Validate DNSSEC security
- Compare privacy options (DoH, DoT, DoQ)
Key Features
๐ Performance
โ
Async queries let you test 100+ resolvers simultaneously.
โ
Multiโiteration runs (--iterations 3) provide more accurate results.
โ
Statistical analysis includes P95, P99, jitter, and consistency scores.
โ
Smart caching reuses results with --use-cache.
โ
Warmup options (--warmup or --warmup-fast) ensure accurate tests.
๐ Security & Privacy
โ
DNSSEC validation verifies cryptographic trust chains.
โ
DNS-over-HTTPS (DoH) enables encrypted DNS benchmarking.
โ
DNS-over-TLS (DoT) secures transport testing.
โ
DNS-over-QUIC (DoQ) adds experimental QUIC support.
โ
TSIG authentication provides enterprise-grade secure queries.
๐ Analysis & Export
โ
Multiple formats supported: CSV, Excel, PDF, JSON.
โ
Visual reports with charts and graphs in PDF/Excel.
โ
Record type statistics (--record-type-stats) compare A, AAAA, MX, etc.
โ
Error breakdown (--error-breakdown) highlights problematic resolvers.
๐ข Enterprise Features
โ
Zone transfers (AXFR/IXFR) validate DNS migrations.
โ
Dynamic updates allow DNS write operation testing.
โ
EDNS0 support extends DNS features.
โ
Windows WMI integration auto-detects system DNS.
โ
Compliance reports generate audit-ready PDF/Excel documentation.
๐ Cross-Platform
โ
Native support for Linux, macOS, and Windows.
โ
CI/CD friendly with JSON output, exit codes, and --quiet mode.
โ
IDNA support for internationalized domain names.
โ
Custom configurations using JSON resolvers and text domain lists.
Installation
pip install dns-benchmark-tool
#Verify Installation
dns-benchmark --version
dns-benchmark --help
๐ Optional PDF Export
By default, the tool supports CSV and Excel exports.
PDF export requires the extra dependency weasyprint, which is not installed automatically to avoid runtime issues on some platforms.
Install with PDF support
pip install dns-benchmark-tool[pdf]
Usage
Once installed, you can request PDF output via the CLI:
dns-benchmark --use-defaults --formats pdf --output ./results
If weasyprint is not installed and you request PDF output, the CLI will show:
[-] Error during benchmark: PDF export requires 'weasyprint'. Install with: pip install dns-benchmark-tool[pdf]
โ ๏ธ WeasyPrint Setup (for PDF export)
The DNS Benchmark Tool uses WeasyPrint to generate PDF reports.
If you want PDF export, you need extra system libraries in addition to the Python package.
๐ 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
Install GTK+ libraries using one of these methods:
-
MSYS2: Download MSYS2, then run:
pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-libffi
-
GTK+ 64โbit Installer: Download GTK+ Runtime and run the installer.
Restart your terminal after installation.
โ Verify Installation
After installing the system libraries, install the Python extra:
pip install dns-benchmark-tool[pdf]
Then run:
dns-benchmark --use-defaults --formats pdf --output ./results
Quick usage
# Run first benchmark
dns-benchmark benchmark --use-defaults
# Custom resolvers and domains
dns-benchmark benchmark --resolvers data/resolvers.json --domains data/domains.txt
# Results saved to ./benchmark_results/
๐ Usage Examples
Basic Usage
# 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
Advanced Usage
# Export a machine-readable bundle
dns-benchmark benchmark --use-defaults --json --output ./results
# Test specific record types
dns-benchmark benchmark --use-defaults --formats csv,excel --record-types A,AAAA,MX
# Custom output location and formats
dns-benchmark benchmark \
--use-defaults \
--output ./my-results \
--formats csv,excel,pdf,json
# Include detailed statistics
dns-benchmark benchmark \
--use-defaults \
--record-type-stats \
--error-breakdown
# High concurrency with retries
dns-benchmark benchmark \
--use-defaults \
--max-concurrent 200 \
--timeout 3.0 \
--retries 3
# Website migration planning
dns-benchmark benchmark \
--resolvers data/global_resolvers.json \
--domains data/migration_domains.txt \
--formats excel,pdf \
--output ./migration_analysis
# DNS provider selection
dns-benchmark benchmark \
--resolvers data/provider_candidates.json \
--domains data/business_domains.txt \
--formats csv,excel \
--output ./provider_selection
# Network troubleshooting
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
# Security assessment
dns-benchmark benchmark \
--resolvers data/security_resolvers.json \
--domains data/security_test_domains.txt \
--formats pdf \
--output ./security_assessment
# Performance monitoring
dns-benchmark benchmark \
--use-defaults \
--formats csv \
--quiet \
--output /var/log/dns_benchmark/$(date +%Y%m%d_%H%M%S)
Utilities
# List default resolvers and domains
dns-benchmark list-defaults
# Browse available resolvers
dns-benchmark list-resolvers
dns-benchmark list-resolvers --category privacy
dns-benchmark list-resolvers --format csv
# Browse test domains
dns-benchmark list-domains
dns-benchmark list-domains --category tech
# Generate sample config
dns-benchmark generate-config --output my-config.yaml
dns-benchmark generate-config --category security --output security.yaml
Real-World Use Cases
For Developers & DevOps/SRE:
# Optimize API performance
dns-benchmark benchmark \
--domains api.myapp.com,cdn.myapp.com \
--record-types A,AAAA \
--iterations 10
# CI/CD integration test
dns-benchmark benchmark \
--resolvers data/ci_resolvers.json \
--domains data/ci_domains.txt \
--timeout 2 \
--formats csv \
--quiet
For Enterprise IT:
# 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
For Network Admins:
# Monthly health check (crontab)
0 0 1 * * dns-benchmark benchmark \
--use-defaults \
--formats pdf,csv \
--output /var/reports/dns/
Performance Tips
| Mode | Flags | Purpose |
|---|---|---|
| Quick | --iterations 1 --warmup-fast --timeout 1 |
Fast feedback |
| Thorough | --iterations 3 --use-cache --warmup |
Accurate results |
| CI/CD | --quiet --formats csv --timeout 2 |
Automated testing |
| Large Scale | --max-concurrent 200 --quiet |
100+ resolvers |
โก CLI Commands
The DNS Benchmark Tool now includes three specialized commands for different workflows:
๐ Top
Quickly rank resolvers by speed and reliability.
# Rank resolvers quickly
dns-benchmark top
# Use custom domain list
dns-benchmark top -d domains.txt
# Export results to JSON
dns-benchmark top -o results.json
๐ Compare
Benchmark resolvers sideโbyโside with detailed statistics.
# 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
๐ Monitoring
Continuously monitor resolver performance with alerts.
# Monitor default resolvers continuously (every 60s)
dns-benchmark monitoring --use-defaults
# Monitor with custom resolvers and domains
dns-benchmark monitoring -r resolvers.json -d domains.txt
# Run monitoring for 1 hour with alerts
dns-benchmark monitoring --use-defaults --interval 30 --duration 3600 \
--alert-latency 150 --alert-failure-rate 5 --output monitor.log
๐ Command Showcase
| Command | Purpose | Typical Use Case | Key Options | Output |
|---|---|---|---|---|
| top | Quick ranking of resolvers by speed and reliability | Fast check to see which resolver is best right now | --domains, --record-types, --output |
Sorted list of resolvers with latency & success rate |
| compare | Sideโbyโside comparison of specific resolvers | Detailed benchmarking across chosen resolvers/domains | --domains, --record-types, --iterations, --output, --show-details |
Table of resolvers with latency, success rate, perโdomain breakdown |
| monitoring | Continuous monitoring with alerts | Realโtime tracking of resolver performance over time | --interval, --duration, --alert-latency, --alert-failure-rate, --output, --use-defaults |
Live status indicators, alerts, optional log file |
Feedback & Community
Share Your Input
Help us improve dns-benchmark! Share your DNS challenges and feature requests:
dns-benchmark feedback
Opens a 2-minute survey that directly shapes our roadmap: https://forms.gle/BJBiyBFvRJHskyR57
Smart Prompts (Non-Intrusive)
The tool occasionally shows a feedback prompt:
- Only after runs 5, 15, and 30 (not random)
- With 24-hour cooldown between prompts
- Stops after you submit feedback or dismiss 3 times
Privacy First
Local storage only: State stored in ~/.dns-benchmark/feedback.json
No telemetry: Zero automatic data collection
Full control: Multiple opt-out options available
Opt Out
Dismiss when prompted:
Show this again? (y/n) [y]: n
Environment variable (permanent):
export DNS_BENCHMARK_NO_FEEDBACK=1
Auto-disabled in CI/CD: Respects CI=true and --quiet flag
๐ Hosted Version (Coming Soon)
CLI stays free forever. The hosted version adds features impossible to achieve locally:
๐ Multi-Region Testing
Test from US-East, US-West, EU, Asia simultaneously. See how your DNS performs for users worldwide.
๐ Historical Tracking
Monitor DNS performance over time. Identify trends, degradation, and optimize continuously.
๐จ Smart Alerts
Get notified via Email, Slack, PagerDuty when DNS performance degrades or SLA thresholds are breached.
๐ฅ Team Collaboration
Share results, dashboards, and reports across your team. Role-based access control.
๐ SLA Compliance
Automated monthly reports proving DNS provider meets SLA guarantees. Audit-ready documentation.
๐ API Access
Integrate DNS monitoring into your existing observability stack. Prometheus, Datadog, Grafana.
Join the Waitlist โ | Early access gets 50% off for 3 months
๐ฃ๏ธ Roadmap
โ Current Release (CLI Edition)
- Benchmark DNS resolvers across domains and record types
- Export to CSV, Excel, PDF, JSON
- Statistical analysis (P95, P99, jitter, consistency)
- Automation support (CI/CD, cron)
๐ง Hosted Version (Q1 2026)
CLI stays free forever. Hosted adds:
- ๐ Multi-region testing (US, EU, Asia, custom)
- ๐ Historical tracking with charts and trends
- ๐จ Alerts (Email, Slack, PagerDuty, webhooks)
- ๐ฅ Team collaboration and sharing
- ๐ SLA compliance reporting
- ๐ API access and integrations
Join Waitlist for early access
๐ More Network Tools (Q1-Q2 2026)
Part of BuildTools - Network Performance Suite:
- ๐ HTTP/HTTPS Benchmark - Test API endpoints and CDNs
- ๐ SSL Certificate Monitor - Never miss renewals
- ๐ก Uptime Monitor - 24/7 availability tracking
- ๐ API Health Dashboard - Complete network observability
๐ก Your Input Matters
Help shape our roadmap:
- ๐ 2-minute feedback survey
- ๐ฌ GitHub Discussions
- โญ Star us if this helps you!
๐ค Contributing
We love contributions! Here's how you can help:
Ways to Contribute
- ๐ Report bugs - Open an issue
- ๐ก Suggest features - Start a discussion
- ๐ Improve docs - README, examples, tutorials
- ๐ง Submit PRs - Bug fixes, features, tests
- โญ Star the repo - Help others discover the tool
- ๐ข Spread the word - Tweet, blog, share
Code Guidelines
- Follow PEP 8 style guide
- Add tests for new features
- Update documentation
- Keep PRs focused and atomic
๐ Links & Support
Official
- Website: buildtools.net
- PyPI: dns-benchmark-tool
- GitHub: frankovo/dns-benchmark-tool
Community
- Documentation: Full usage guide, advanced examples, and screenshots are available on GitHub
- Feedback: 2-minute survey
- Discussions: GitHub Discussions
- Issues: Bug Reports
Stats
- Downloads: 1,400+ (this week)
- Active Users: 600+
License
MIT License - see LICENSE file for details.
Built with โค๏ธ by @frankovo
Part of BuildTools - Network Performance Suite
โญ Star on GitHub โข ๐ฆ Install from PyPI โข ๐ Join Waitlist
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dns_benchmark_tool-0.3.4.tar.gz.
File metadata
- Download URL: dns_benchmark_tool-0.3.4.tar.gz
- Upload date:
- Size: 5.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a6d95866da742f5805cbb683e1d8d34b2ae7f2e15e325f5775f3043096c177d
|
|
| MD5 |
7725809b2869a8bb98495deb4ba223c7
|
|
| BLAKE2b-256 |
b4d0eb43979226a2dc8e551f8d711ac17118d7d43c7f0de8880d1f1d6628b021
|
Provenance
The following attestation bundles were made for dns_benchmark_tool-0.3.4.tar.gz:
Publisher:
pypi.yml on frankovo/dns-benchmark-tool
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dns_benchmark_tool-0.3.4.tar.gz -
Subject digest:
4a6d95866da742f5805cbb683e1d8d34b2ae7f2e15e325f5775f3043096c177d - Sigstore transparency entry: 778186933
- Sigstore integration time:
-
Permalink:
frankovo/dns-benchmark-tool@27a852c1c6517dac6af4a4dbc54461b121f65b7f -
Branch / Tag:
refs/tags/v0.3.4 - Owner: https://github.com/frankovo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@27a852c1c6517dac6af4a4dbc54461b121f65b7f -
Trigger Event:
push
-
Statement type:
File details
Details for the file dns_benchmark_tool-0.3.4-py3-none-any.whl.
File metadata
- Download URL: dns_benchmark_tool-0.3.4-py3-none-any.whl
- Upload date:
- Size: 40.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e5bfcfe127a5b7dc4ab630e0e6473e83a7bef540083ebaca0c6939bb35f40f9f
|
|
| MD5 |
58a7ed810a120a92d0216899bd45814a
|
|
| BLAKE2b-256 |
61d836cad7fb778113f58c73c8c3528bf13307cdd16ea1845d48205ff1904aa6
|
Provenance
The following attestation bundles were made for dns_benchmark_tool-0.3.4-py3-none-any.whl:
Publisher:
pypi.yml on frankovo/dns-benchmark-tool
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dns_benchmark_tool-0.3.4-py3-none-any.whl -
Subject digest:
e5bfcfe127a5b7dc4ab630e0e6473e83a7bef540083ebaca0c6939bb35f40f9f - Sigstore transparency entry: 778186938
- Sigstore integration time:
-
Permalink:
frankovo/dns-benchmark-tool@27a852c1c6517dac6af4a4dbc54461b121f65b7f -
Branch / Tag:
refs/tags/v0.3.4 - Owner: https://github.com/frankovo
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@27a852c1c6517dac6af4a4dbc54461b121f65b7f -
Trigger Event:
push
-
Statement type: