
Быстрое и всестороннее тестирование производительности DNS с проверкой DNSSEC, поддержкой DoH/DoT и корпоративными функциями.
⚠️ этот проект перемещён и больше не поддерживается. установите преемника:
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/ и включают:
Вот и всё! Вы только что протестировали 5 DNS-резолверов на 10 доменах.
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-поддержка** — интернационализированные доменные имена
- **Автоопределение** — обнаружение DNS через Windows WMI
---
## 🔒 Безопасность и зашифрованный DNS
Полностью поддерживаются три протокола — каждый добавляет конфиденциальность ценой увеличения задержки.
| Протокол | Флаг | Типичные накладные расходы | Когда использовать |
|---|---|---|---|
| Обычный UDP | *(по умолчанию)* | базовый уровень | Бенчмаркинг задержки |
| DNS-over-HTTPS | `--doh` | +50–200 мс | Конфиденциальность, обход брандмауэра |
| DNS-over-TLS | `--dot` | +200–500 мс (холодный), ~50 мс (тёплый) | Зашифрованный транспорт |
| DNSSEC | `--dnssec-validate` | +30–100 мс | Проверка целостности резолвера |
> ⚠️ **Компромиссы**
> - DoH и DoT добавляют накладные расходы на установку TLS-соединения при первом запросе к каждому резолверу. Используйте `--warmup-fast`, чтобы нивелировать это перед измерением.
> - `--dnssec-validate` запрашивает записи RRSIG и проверяет флаг AD. Только ~33% распространённых доменов подписаны DNSSEC — ожидайте результат `DNSSEC_FAILED` для неподписанных доменов. Показатели задержки с этим флагом и без него **напрямую не сравнимы**.
> - На мобильных устройствах/через хот-спот разброс будет в 2–5 раз выше, чем на проводном Ethernet. Используйте `--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** - Тестирование 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)** - Проверка полной и инкрементальной передачи зон
- **Обновления Dynamic 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
#### Разработчик и DevOps```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
#### Корпоративные ИТ```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 Benchmark теперь включает три специализированные команды для различных рабочих процессов:
Быстрая сортировка резолверов по скорости и надёжности.```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 dns-benchmark-tool[pdf]
#### Usage
После установки вы можете запросить вывод в PDF через CLI:```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]
---
### ⚠️ Настройка WeasyPrint (для экспорта PDF)
Инструмент DNS Benchmark использует **WeasyPrint** для создания PDF-отчетов.
Если вам нужен экспорт PDF, вам потребуются дополнительные системные библиотеки помимо пакета Python.
#### 🛠 Linux (Debian/Ubuntu)```bash
sudo apt install python3-pip libpango-1.0-0 libpangoft2-1.0-0 \
libharfbuzz-subset0 libjpeg-dev libopenjp2-7-dev libffi-dev
brew install pango cairo libffi gdk-pixbuf jpeg openjpeg harfbuzz
---
#### 🛠 Windows
Установите библиотеки GTK+, используя один из этих методов:
- **MSYS2**: [Скачать MSYS2](https://www.msys2.org/), затем выполните: ```bash
pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-libffi
Перезапустите терминал после установки.
После установки системных библиотек установите Python extra:```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
Place images in 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 # или: 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 (подписанный).Ручная альтернатива
Создать ветку и сделать подписанный коммит:
CLI остается бесплатным навсегда. Веб-панель теперь доступна на buildtools.net
→ Зарегистрируйтесь бесплатно на 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
Локальный DNS провайдера часто имеет преимущества кэширования, но может не иметь:
Тестируйте оба и принимайте решение исходя из ВАШИХ приоритетов!
Да! Просто добавьте его в пользовательский JSON-файл резолверов:```json { "resolvers": [ {"name": "My DNS", "ip": "192.168.1.1"} ] }
</details>
<details>
<summary><b>В чем разница между CLI и хостинг-версией?</b></summary>
**CLI (Бесплатно навсегда):**
- Запускайте тесты из ВАШЕГО местоположения
- Сохраняйте результаты локально
- Открытый исходный код — тот же движок, что и в панели управления
**Веб-панель (доступна на buildtools.net):**
- Визуальные результаты тестов и история
- Мониторинг DNS с оповещениями в реальном времени
- Бесплатный уровень, Pro за €14/мес
- Мультирегиональное тестирование ожидается в Q3 2026
</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 Discussions](https://github.com/frankovo/dns-benchmark-tool/discussions)
- **Проблемы**: [Сообщения об ошибках](https://github.com/frankovo/dns-benchmark-tool/issues)
### Статистика
- **Загрузки**: более 1 400 (на этой неделе)
- **Активные пользователи**: более 600
---
## Лицензия
Этот проект лицензирован по лицензии MIT — подробнее см. в файле [LICENSE](https://github.com/net-benchmark/dns-benchmark-tool/blob/HEAD/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 | Золотая середина: умеренная скорость, некоторые повторные попытки, кэш включен, быстрый прогрев. |
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