
Test de performance DNS rapide et complet avec validation DNSSEC, support DoH/DoT et fonctionnalités d'entreprise
⚠️ ce projet a été déplacé et n'est plus maintenu. installez le successeur :
pip install net-benchmarkdépôt : https://github.com/net-benchmark/net-benchmark toutes les commandes et options existantes restent entièrement compatibles.
Tests de performance DNS rapides et complets avec validation DNSSEC, support DoH/DoT et fonctionnalités entreprise```bash pip install dns-benchmark-tool dns-benchmark benchmark --use-defaults --formats csv,excel
> 🎉 **1 400+ téléchargements · 600+ utilisateurs actifs**
> 🚀 **Le tableau de bord web est désormais en ligne !** [Essayez BuildTools gratuitement →](https://buildtools.net)
---
**Suivi en temps réel**
[](https://github.com/frankovo/dns-benchmark-tool)
*Observez les requêtes DNS en action*
**Suivi en temps réel - Interface Web**
[](https://github.com/frankovo/dns-benchmark-tool)
*Surveillez les requêtes DNS en direct avec alertes par e-mail*
</div>
## 🎉 Quoi de neuf dans 
Nous avons ajouté **trois puissantes commandes CLI** et la prise en charge complète de **DoH, DoT et DNSSEC** :
- 🚀 **top** — classement rapide des résolveurs par vitesse et fiabilité
- 📊 **compare** — analyse comparative côte à côte avec statistiques détaillées et options d'exportation
- 🔄 **monitoring** — suivi continu des performances avec alertes et journalisation
- 🔒 **DoH / DoT / DNSSEC** — analyse comparative DNS chiffrée avec données réelles de compromis de latence```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
La résolution DNS est souvent le goulot d'étranglement caché dans les performances réseau. Un résolveur lent peut ajouter des centaines de millisecondes à chaque requête.
dns-benchmark-tool vous aide à :
pip install dns-benchmark-tool
### Exécutez votre premier benchmark```bash
# Test default resolvers against popular domains
dns-benchmark benchmark --use-defaults --formats csv,excel
Les résultats sont automatiquement sauvegardés dans ./benchmark_results/ avec :
C'est tout ! Vous venez de benchmarker 5 résolveurs DNS sur 10 domaines.
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
## ✨ Fonctionnalités clés
### 🚀 Performances
- **Requêtes asynchrones** - Testez 100+ résolveurs simultanément
- **Multi-itération** - Exécutez les benchmarks plusieurs fois pour la précision
- **Analyse statistique** - Moyenne, médiane, P95, P99, gigue, cohérence
- **Contrôle du cache** - Testez avec/sans cache DNS
### 🔒 Sécurité et confidentialité
- **Validation DNSSEC** - Vérifiez les chaînes de confiance cryptographiques
- **DNS-over-HTTPS (DoH)** - Benchmarking DNS chiffré
- **DNS-over-TLS (DoT)** - Test de transport sécurisé
- **DNS-over-QUIC (DoQ)** - Support expérimental QUIC
### 📊 Analyse et export
- **Formats multiples** - CSV, Excel, PDF, JSON
- **Rapports visuels** - Graphiques et diagrammes
- **Statistiques par domaine** - Analyse des performances par domaine
- **Répartition des erreurs** - Identifiez les résolveurs problématiques
### 🏢 Fonctionnalités entreprise
- **Authentification TSIG** - Requêtes sécurisées en entreprise
- **Transferts de zone** - Validation AXFR/IXFR
- **Mises à jour dynamiques** - Testez les opérations d'écriture DNS
- **Rapports de conformité** - Documentation prête pour l'audit
### 🌐 Multi-plateforme
- **Linux, macOS, Windows** - Fonctionne partout
- **Amical pour CI/CD** - Sortie JSON, codes de sortie
- **Support IDNA** - Noms de domaine internationalisés
- **Détection automatique** - Découverte DNS WMI Windows
---
## 🔒 Sécurité et DNS chiffré
Trois protocoles sont entièrement supportés — chacun ajoute de la confidentialité au prix d'une latence.
| Protocole | Drapeau | Surcharge typique | Quand l'utiliser |
|---|---|---|---|
| UDP simple | *(défaut)* | référence | Test de latence |
| DNS-over-HTTPS | `--doh` | +50–200ms | Confidentialité, contournement de pare-feu |
| DNS-over-TLS | `--dot` | +200–500ms à froid, ~50ms à chaud | Transport chiffré |
| DNSSEC | `--dnssec-validate` | +30–100ms | Validation de l'intégrité du résolveur |
> ⚠️ **Compromis**
> - DoH et DoT ajoutent une surcharge de négociation TLS lors de la première requête par résolveur. Utilisez `--warmup-fast` pour absorber cela avant de mesurer.
> - `--dnssec-validate` demande des enregistrements RRSIG et applique le flag AD. Seulement environ 33 % des domaines courants sont signés DNSSEC — attendez-vous à des résultats `DNSSEC_FAILED` sur les domaines non signés. Les chiffres de latence avec et sans ce drapeau **ne sont pas directement comparables**.
> - Les résultats sur mobile/hotspot montreront une variance 2 à 5 fois plus élevée que sur Ethernet filaire. Utilisez `--iterations 5` et comparez la latence médiane, pas la moyenne.```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
Exemples d'échecs précoces — ceux-ci échouent immédiatement avant qu'une requête ne s'exécute :```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
---
## 🔧 Capacités avancées
---
> ⚠️ Ces drapeaux sont **documentés pour visibilité** mais pas encore implémentés.
> Ils représentent des fonctionnalités avancées à venir.
- `--zone-transfer` → Test de transfert de zone AXFR/IXFR *(bientôt disponible)*
- `--tsig` → Requêtes authentifiées TSIG *(bientôt disponible)*
- `--idna` → Prise en charge des noms de domaine internationalisés *(bientôt disponible)*
---
<details>
<summary><b>🚀 Fonctionnalités de performance et de concurrence</b></summary>
<br>
- **E/S asynchrones avec dnspython** - Testez 100+ résolveurs simultanément
- **Prise en charge du framework Trio** - Opérations asynchrones à haute concurrence
- **Concurrence configurable** - Contrôle du nombre max de requêtes simultanées
- **Logique de tentative** - Recul exponentiel pour les requêtes échouées
- **Simulation de cache** - Testez avec ou sans mise en cache DNS
- **Benchmarks multi-itérations** - Exécutez plusieurs fois les tests pour plus de précision
- **Phase d'échauffement** - Pré-remplissez les caches DNS avant les tests
- **Analyse statistique** - Moyenne, médiane, P95, P99, gigue, scores de cohérence
**Exemple :**```bash
dns-benchmark benchmark \
--max-concurrent 200 \
--iterations 5 \
--timeout 3.0 \
--warmup
Exemple :```bash
dns-benchmark benchmark
--doh
--resolvers doh-providers.json
--dnssec-validate
</details>
<details>
<summary><b>🏢 Fonctionnalités d'entreprise et de migration</b></summary>
<br>
- **Transferts de zone (AXFR/IXFR)** - Validation des transferts de zone complets et incrémentiels
- **Mises à jour DNS dynamiques** - Test des opérations d'écriture et des mises à jour DNS
- **Prise en charge d'EDNS0** - Options DNS étendues, sous-réseau client, charges utiles plus volumineuses
- **Intégration Windows WMI** - Détection automatique des paramètres DNS système actifs
- **Rapports de conformité** - Génération de rapports PDF/Excel prêts pour l'audit
- **Validation des SLA** - Suivi des seuils de disponibilité et de performance
**Exemple :**```bash
# Validate DNS migration
dns-benchmark benchmark \
--resolvers old-provider.json,new-provider.json \
--zone-transfer \ # coming soon
--output migration-report/ \
--formats pdf,excel
Exemple :```bash
dns-benchmark benchmark
--use-defaults
--formats csv,excel
--domain-stats
--record-type-stats
--error-breakdown
--formats csv,excel,pdf
</details>
<details>
<summary><b>🌐 Internationalisation et compatibilité</b></summary>
<br>
- **Support IDNA** - Noms de domaine internationalisés (IDN)
- **Types d'enregistrements multiples** - A, AAAA, MX, TXT, CNAME, NS, SOA, PTR, SRV, CAA
- **Multi-plateforme** - Linux, macOS, Windows (support natif)
- **Intégration CI/CD** - Sortie JSON, codes de sortie appropriés, mode silencieux
- **Résolveurs personnalisés** - Charger depuis JSON, tester vos propres serveurs DNS
- **Domaines personnalisés** - Tester avec votre liste de domaines spécifique
**Exemple :**```bash
# Test internationalized domains
dns-benchmark benchmark \
--domains international-domains.txt \
--record-types A,AAAA,MX \
--resolvers custom-resolvers.json
💡 La plupart des utilisateurs n'ont besoin que des fonctionnalités de base. Ces capacités avancées sont disponibles lorsque vous en avez besoin.
dns-benchmark benchmark
--domains api.myapp.com,cdn.myapp.com
--record-types A,AAAA
--resolvers production.json
--iterations 10
**Résultat :** Réduire la latence de l'API de 100 à 300 ms
---
### 🛡️ Pour DevOps/SRE : Valider avant la migration```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
Résultat : Vérifier les performances et la sécurité avant la migration
dns-benchmark compare
--resolvers pihole.local,1.1.1.1,8.8.8.8,9.9.9.9
--domains common-sites.txt
--rounds 10
**Résultat :** Preuve basée sur les données que votre DNS auto-hébergé est plus rapide (ou pas !)
---
### 📊 Pour les administrateurs réseau : vérifications automatisées de l'état de santé```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
Résultat: Rapport automatisé de conformité et de SLA
dns-benchmark benchmark
--doh
--resolvers privacy-resolvers.json
--domains sensitive-sites.txt
--dnssec-validate
**Résultat :** Trouvez le DNS chiffré le plus rapide sans sacrifier la confidentialité
---
## 📦 Installation et configuration
### Prérequis
- Python 3.9+
- Gestionnaire de paquets pip
### Installation depuis PyPI```bash
pip install dns-benchmark-tool
git clone https://github.com/frankovo/dns-benchmark-tool.git cd dns-benchmark-tool pip install -e .
### Vérifier l'installation```bash
dns-benchmark --version
dns-benchmark --help
dns-benchmark benchmark --use-defaults --formats csv,excel
---
## 📖 Exemples d'utilisation
### Utilisation de base```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
---
⚠️ **Note pour les nouvelles commandes :** Les résolveurs sans requêtes réussies sont exclus du classement et afficheront `Avg Latency: N/A`.
---
## Prise en charge des entrées en ligne pour les résolveurs et les domaines
Ce correctif introduit la prise en charge complète des valeurs en ligne séparées par des virgules pour les options `--resolvers` et `--domains`, corrigeant le problème [#39](https://github.com/frankovo/dns-benchmark-tool/issues/39) et améliorant l'utilisabilité de la CLI sans rupture des flux de travail existants.
### Nouvelles fonctionnalités
1. **résolveurs en ligne** : `--resolvers "1.1.1.1,8.8.8.8,9.9.9.9"`
2. **domaines en ligne** : `--domains "google.com,github.com"`
3. **valeurs uniques** : `--resolvers "1.1.1.1"` ou `--domains "google.com"`
4. **résolveurs nommés** : `--resolvers "cloudflare,google,quad9"`
5. **entrée mixte** : `--resolvers "1.1.1.1,cloudflare,8.8.8.8"`
### Rétrocompatibilité
- toutes les configurations existantes basées sur des fichiers continuent de fonctionner
- aucune modification cassante de la CLI
- la détection des fichiers prime sur l'analyse des entrées en ligne
### Exemples d'utilisation
#### Avant (Seuls les fichiers fonctionnaient)```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
#### Résolveurs nommés```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
#### Unique```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
### Gestion des domaines```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
### Gestion de la configuration```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
Drapeaux d'analyse des add-ons :```bash
# Include domain and record-type analytics and error breakdown
dns-benchmark benchmark --use-defaults \
--domain-stats --record-type-stats --error-breakdown
JSON export:```bash
dns-benchmark benchmark --use-defaults --json --output ./results
#### Administrateur réseau```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
#### Développeur & 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
#### IT d'entreprise```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
L'outil DNS Benchmark inclut désormais trois commandes spécialisées pour différents flux de travail :
Classe rapidement les résolveurs par vitesse et fiabilité.```bash
dns-benchmark top
dns-benchmark top -d domains.txt
dns-benchmark top -o results.json
---
### 📊 Compare
Comparez les résolveurs côte à côte avec des statistiques détaillées.```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
Surveillez en continu les performances du résolveur avec des alertes.```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
---
### 🌟 Présentation des commandes
| Commande | Objectif | Cas d'utilisation typique | Options clés | Sortie |
|--------------|---------|--------------------------|-------------|--------|
| **top** | Classement rapide des résolveurs par vitesse et fiabilité | Vérification rapide pour voir quel résolveur est le meilleur actuellement | `--domains`, `--record-types`, `--output` | Liste triée des résolveurs avec latence et taux de succès |
| **compare** | Comparaison côte à côte de résolveurs spécifiques | Évaluation détaillée sur les résolveurs/domaines choisis | `--domains`, `--record-types`, `--iterations`, `--output`, `--show-details` | Tableau des résolveurs avec latence, taux de succès, décomposition par domaine |
| **monitoring** | Surveillance continue avec alertes | Suivi en temps réel des performances des résolveurs dans le temps | `--interval`, `--duration`, `--alert-latency`, `--alert-failure-rate`, `--output`, `--use-defaults` | Indicateurs d'état en direct, alertes, fichier journal optionnel |
---
## 📊 Améliorations de l'analyse
- **Nombre d'itérations** : affiché lorsque plus d'une itération est exécutée.
- **Hits de cache** : montre combien de requêtes ont été servies depuis le cache (lorsque `--use-cache` est activé).
- **Suivi des échecs** : les résolveurs avec des erreurs répétées sont comptés et peuvent être inspectés avec `get_failed_resolvers()`.
- **Statistiques du cache** : disponibles via `get_cache_stats()`, montrant le nombre d'entrées en cache et si le cache est activé.
- **Résultats d'échauffement** : les requêtes d'échauffement sont marquées avec `iteration=0` dans les données brutes, ce qui permet de les filtrer facilement dans l'analyse.
Exemple de résumé de sortie :
---```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" } ] }
### Format de fichier texte des domaines```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
Par défaut, l'outil prend en charge les exports CSV et Excel.
L'export PDF nécessite la dépendance supplémentaire weasyprint, qui n'est pas installée automatiquement pour éviter des problèmes d'exécution sur certaines plateformes.
pip install dns-benchmark-tool[pdf]
#### Utilisation
Une fois installé, vous pouvez demander une sortie PDF via la CLI :```bash
dns-benchmark --use-defaults --formats pdf --output ./results
Si weasyprint n'est pas installé et que vous demandez une sortie PDF, le CLI affichera :```bash
[-] Error during benchmark: PDF export requires 'weasyprint'. Install with: pip install dns-benchmark-tool[pdf]
---
### ⚠️ Configuration de WeasyPrint (pour l'export PDF)
L'outil DNS Benchmark utilise **WeasyPrint** pour générer des rapports PDF.
Si vous souhaitez exporter en PDF, vous avez besoin de bibliothèques système supplémentaires en plus du package 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
Installez les bibliothèques GTK+ en utilisant l'une de ces méthodes :
- **MSYS2**: [Télécharger MSYS2](https://www.msys2.org/), puis exécutez : ```bash
pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-libffi
Redémarrez votre terminal après l'installation.
Après avoir installé les bibliothèques système, installez l'extension Python supplémentaire :```bash pip install dns-benchmark-tool[pdf]
Ensuite, exécutez :```bash
dns-benchmark --use-defaults --formats pdf --output ./results
dns-benchmark generate-config
--category privacy
--output my-config.yaml
---
## Optimisation des performances```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
### Mode débogage```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 exemple```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
Scénarios courants :```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
Prérequis
make gpg-check pour vérifier.Préparer la release (signée)
Incrémentation patch/minor/major :
make release-patch # ou : make release-minor / make release-major
release/X.Y.Z.Ouvrir une PR : depuis release/X.Y.Z vers main, puis fusionner une fois la CI passée.
Tagger et publier
Créer un tag signé et pousser :
make release-tag VERSION=X.Y.Z
vX.Y.Z (signé).Alternative manuelle
Créer une branche et un commit signé :
La CLI reste gratuite pour toujours. Le tableau de bord web est maintenant disponible sur buildtools.net
→ Inscrivez-vous gratuitement sur buildtools.net
Nous adorons les contributions ! Voici comment vous pouvez aider :
Ce projet inclut un Makefile pour simplifier l'installation, les tests et les vérifications de qualité du code.```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
### Utilisation courante
- **Installer uniquement le runtime** ```bash
make install
Le DNS local du FAI a souvent des avantages de mise en cache mais peut manquer :
Testez les deux et décidez en fonction de VOS priorités !
Oui ! Ajoutez-le simplement à un fichier JSON de résolveurs personnalisés :
---```json { "resolvers": [ {"name": "My DNS", "ip": "192.168.1.1"} ] }
</details>
<details>
<summary><b>Quelle est la différence entre la version CLI et la version hébergée ?</b></summary>
**CLI (Gratuit pour toujours) :**
- Exécutez les tests depuis VOTRE emplacement
- Enregistrez les résultats localement
- Open source — le même moteur qui alimente le tableau de bord
**Tableau de bord web (En direct sur buildtools.net) :**
- Résultats de benchmark visuels et historique
- Surveillance DNS avec alertes en temps réel
- Niveau gratuit disponible, Pro à 14 €/mois
- Tests multi-régions à venir au T3 2026
</details>
<details>
<summary><b>Cet outil est-il sûr à utiliser en production ?</b></summary>
Oui ! L'outil effectue uniquement des requêtes DNS (opérations de lecture). Il ne :
- Modifie pas les enregistrements DNS
- Effectue pas d'attaques
- Envoie pas de données à des serveurs externes (sauf si vous activez les fonctionnalités hébergées)
Tous les tests sont des requêtes DNS standard que tout résolveur traite quotidiennement.
</details>
<details>
<summary><b>Pourquoi les résultats varient-ils entre les exécutions ?</b></summary>
Les performances DNS varient en raison de :
- Conditions réseau
- Mise en cache DNS (résolveur et intermédiaire)
- Charge du serveur
- Modifications du routage géographique
Exécutez plusieurs itérations (`--iterations 5`) pour des résultats plus cohérents.
</details>
---
## 🔗 Liens et support
### Officiel
- **Site web** : [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)
### Communauté
- **Discussions** : [GitHub Discussions](https://github.com/frankovo/dns-benchmark-tool/discussions)
- **Problèmes** : [Signaler un bug](https://github.com/frankovo/dns-benchmark-tool/issues)
### Statistiques
- **Téléchargements** : 1 400+ (cette semaine)
- **Utilisateurs actifs** : 600+
---
## Licence
Ce projet est sous licence MIT — voir le fichier [LICENSE](https://github.com/net-benchmark/dns-benchmark-tool/blob/HEAD/LICENSE) pour plus de détails.
---
<div align="center">
**Construit avec ❤️ par [@frankovo](https://github.com/frankovo)**
Fait partie de [BuildTools](https://buildtools.net) - Suite de performance réseau
[⭐ Star sur GitHub](https://github.com/frankovo/dns-benchmark-tool) • [📦 Installer depuis PyPI](https://pypi.org/project/dns-benchmark-tool/)
</div>
| Commande | Ce qu'elle fait | Exemple rapide |
|---|
benchmark | Benchmark DNS complet avec exports | dns-benchmark benchmark --use-defaults |
top | Classer tous les résolveurs par vitesse | dns-benchmark top --limit 5 |
compare | Comparaison côte à côte de résolveurs | dns-benchmark compare Cloudflare Google Quad9 |
monitoring | Surveillance continue avec alertes | dns-benchmark monitoring --use-defaults |
| Option | Description | Exemple |
|---|
--iterations, -i | Exécute la boucle complète de benchmark N fois | dns-benchmark benchmark --use-defaults -i 3 |
--use-cache | Permet de réutiliser les résultats en cache entre les itérations | dns-benchmark benchmark --use-defaults -i 3 --use-cache |
--warmup | Exécute un échauffement complet (tous les résolveurs × domaines × types d'enregistrement) | dns-benchmark benchmark --use-defaults --warmup |
--warmup-fast | Exécute un échauffement léger (une sonde par résolveur) | dns-benchmark benchmark --use-defaults --warmup-fast |
--include-charts | Intègre des graphiques et diagrammes dans les rapports PDF/Excel pour l'analyse visuelle des performances | dns-benchmark benchmark --use-defaults --formats pdf,excel --include-charts |
| Mode | Flags recommandées | Objectif |
|---|
| Exécution rapide | --iterations 1 --timeout 1 --retries 0 --warmup-fast | Retour rapide, nouvelles tentatives minimales, préchauffage léger. Bon pour des vérifications rapides. |
| Exécution approfondie | --iterations 3 --use-cache --warmup --timeout 5 --retries 2 | Plusieurs passages, cache activé, préchauffage complet. Idéal pour des benchmarks détaillés. |
| Mode débogage | --iterations 1 --timeout 10 --retries 0 --quiet | Délai d'attente long, aucune nouvelle tentative, sortie minimale. Utile pour diagnostiquer les problèmes de résolveur. |
| Exécution équilibrée | --iterations 2 --use-cache --warmup-fast --timeout 2 --retries 1 | Un compromis : vitesse modérée, quelques nouvelles tentatives, cache activé, préchauffage rapide. |
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
Ouvrir une PR et fusionner dans main.
Ensuite, tagger :
make release-tag VERSION=$NEXT_VERSION
Remarques
git commit -S ...git tag -s vX.Y.Z -m "Release vX.Y.Z"pyproject.toml et src/dns_benchmark/__init__.py