
Test delle prestazioni DNS rapido e completo con validazione DNSSEC, supporto DoH/DoT e funzionalità enterprise.
⚠️ questo progetto è stato spostato e non è più mantenuto. installa il successore:
pip install net-benchmarkrepository: https://github.com/net-benchmark/net-benchmark tutti i comandi e flag esistenti rimangono completamente compatibili.
Test delle prestazioni DNS veloci e completi con validazione DNSSEC, supporto DoH/DoT e funzionalità enterprise```bash pip install dns-benchmark-tool dns-benchmark benchmark --use-defaults --formats csv,excel
> 🎉 **1.400+ download · 600+ utenti attivi**
> 🚀 **Il web dashboard è ora disponibile!** [Prova BuildTools gratuitamente →](https://buildtools.net)
---
**Tracciamento in Tempo Reale**
[](https://github.com/frankovo/dns-benchmark-tool)
*Guarda le query DNS in movimento*
**Tracciamento in Tempo Reale - Interfaccia Web**
[](https://github.com/frankovo/dns-benchmark-tool)
*Monitora le query DNS in tempo reale con avvisi email*
</div>
## 🎉 Novità in 
Abbiamo aggiunto **tre potenti comandi CLI** e il supporto completo per **DoH, DoT e DNSSEC**:
- 🚀 **top** — classifica rapida dei resolver per velocità e affidabilità
- 📊 **compare** — benchmarking affiancato con statistiche dettagliate e opzioni di esportazione
- 🔄 **monitoring** — monitoraggio continuo delle prestazioni con avvisi e logging
- 🔒 **DoH / DoT / DNSSEC** — benchmark DNS crittografato con dati reali sul compromesso della latenza```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 risoluzione DNS è spesso il collo di bottiglia nascosto nelle prestazioni di rete. Un resolver lento può aggiungere centinaia di millisecondi a ogni richiesta.
dns-benchmark-tool ti aiuta a:
pip install dns-benchmark-tool
### Esegui il tuo primo benchmark```bash
# Test default resolvers against popular domains
dns-benchmark benchmark --use-defaults --formats csv,excel
I risultati vengono salvati automaticamente in ./benchmark_results/ con:
Tutto qui! Hai appena eseguito il benchmark di 5 resolver DNS su 10 domini.
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
---
## ✨ Caratteristiche Principali
### 🚀 Prestazioni
- **Query asincrone** - Testa oltre 100 resolver simultaneamente
- **Iterazioni multiple** - Esegui benchmark più volte per precisione
- **Analisi statistica** - Media, mediana, P95, P99, jitter, coerenza
- **Controllo cache** - Test con/senza caching DNS
### 🔒 Sicurezza e Privacy
- **Validazione DNSSEC** - Verifica le catene di fiducia crittografiche
- **DNS-over-HTTPS (DoH)** - Benchmark DNS crittografato
- **DNS-over-TLS (DoT)** - Test di trasporto sicuro
- **DNS-over-QUIC (DoQ)** - Supporto sperimentale per QUIC
### 📊 Analisi e Esportazione
- **Formati multipli** - CSV, Excel, PDF, JSON
- **Report visivi** - Grafici e diagrammi
- **Statistiche per dominio** - Analisi delle prestazioni per dominio
- **Suddivisione errori** - Identifica resolver problematici
### 🏢 Funzionalità Aziendali
- **Autenticazione TSIG** - Query aziendali sicure
- **Trasferimenti di zona** - Validazione AXFR/IXFR
- **Aggiornamenti dinamici** - Test delle operazioni di scrittura DNS
- **Report di conformità** - Documentazione pronta per audit
### 🌐 Multipiattaforma
- **Linux, macOS, Windows** - Funziona ovunque
- **Adatto a CI/CD** - Output JSON, codici di uscita
- **Supporto IDNA** - Nomi di dominio internazionalizzati
- **Rilevamento automatico** - Rilevamento DNS WMI di Windows
---
## 🔒 Sicurezza e DNS Crittografato
Tre protocolli sono completamente supportati — ciascuno aggiunge privacy a costo di latenza.
| Protocollo | Flag | Overhead tipico | Quando usarlo |
|---|---|---|---|
| UDP semplice | *(predefinito)* | baseline | Benchmark di latenza |
| DNS-over-HTTPS | `--doh` | +50–200ms | Privacy, bypass firewall |
| DNS-over-TLS | `--dot` | +200–500ms freddo, ~50ms caldo | Trasporto crittografato |
| DNSSEC | `--dnssec-validate` | +30–100ms | Validazione integrità resolver |
> ⚠️ **Compromessi**
> - DoH e DoT aggiungono overhead di handshake TLS alla prima query per resolver. Usa `--warmup-fast` per assorbirlo prima della misurazione.
> - `--dnssec-validate` richiede record RRSIG e impone il flag AD. Solo circa il 33% dei domini comuni è firmato DNSSEC — aspettati risultati `DNSSEC_FAILED` sui domini non firmati. I numeri di latenza con e senza questo flag **non sono direttamente confrontabili**.
> - I risultati su mobile/hotspot mostreranno una varianza 2–5× superiore rispetto all'ethernet cablata. Usa `--iterations 5` e confronta la latenza mediana, non la media.```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
Esempi di fallimento precoce — questi falliscono immediatamente prima che venga eseguita qualsiasi query:```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à Avanzate
---
> ⚠️ Questi flag sono **documentati per visibilità** ma non ancora implementati.
> Rappresentano funzionalità avanzate in arrivo.
- `--zone-transfer` → Test di trasferimento di zona AXFR/IXFR *(in arrivo)*
- `--tsig` → Query autenticate TSIG *(in arrivo)*
- `--idna` → Supporto per nomi di dominio internazionalizzati *(in arrivo)*
---
<details>
<summary><b>🚀 Funzionalità di Prestazioni e Concorrenza</b></summary>
<br>
- **Async I/O con dnspython** - Testa 100+ resolver contemporaneamente
- **Supporto framework Trio** - Operazioni asincrone ad alta concorrenza
- **Concorrenza configurabile** - Controlla il massimo di query concorrenti
- **Logica di retry** - Backoff esponenziale per query fallite
- **Simulazione cache** - Test con/senza caching DNS
- **Benchmark multi-iterazione** - Esegui test più volte per accuratezza
- **Fase di warmup** - Pre-riscalda le cache DNS prima del test
- **Analisi statistica** - Media, mediana, P95, P99, jitter, punteggi di consistenza
**Esempio:**```bash
dns-benchmark benchmark \
--max-concurrent 200 \
--iterations 5 \
--timeout 3.0 \
--warmup
Esempio:```bash
dns-benchmark benchmark
--doh
--resolvers doh-providers.json
--dnssec-validate
</details>
<details>
<summary><b>🏢 Funzionalità Enterprise e Migrazione</b></summary>
<br>
- **Trasferimenti di zona (AXFR/IXFR)** - Validazione del trasferimento di zona completo e incrementale
- **Aggiornamenti DNS dinamici** - Test delle operazioni di scrittura e aggiornamenti DNS
- **Supporto EDNS0** - Opzioni DNS estese, sottorete client, payload più grandi
- **Integrazione WMI di Windows** - Rilevamento automatico delle impostazioni DNS di sistema attive
- **Report di conformità** - Genera report PDF/Excel pronti per l'audit
- **Validazione SLA** - Monitoraggio dei tempi di attività e delle soglie di prestazione
**Esempio:**```bash
# Validate DNS migration
dns-benchmark benchmark \
--resolvers old-provider.json,new-provider.json \
--zone-transfer \ # coming soon
--output migration-report/ \
--formats pdf,excel
Esempio:```bash
dns-benchmark benchmark
--use-defaults
--formats csv,excel
--domain-stats
--record-type-stats
--error-breakdown
--formats csv,excel,pdf
</details>
<details>
<summary><b>🌐 Internazionalizzazione e compatibilità</b></summary>
<br>
- **Supporto IDNA** - Nomi di dominio internazionalizzati (IDN)
- **Tipi di record multipli** - A, AAAA, MX, TXT, CNAME, NS, SOA, PTR, SRV, CAA
- **Multipiattaforma** - Linux, macOS, Windows (supporto nativo)
- **Integrazione CI/CD** - Output JSON, codici di uscita appropriati, modalità silenziosa
- **Resolver personalizzati** - Caricamento da JSON, test dei propri server DNS
- **Domini personalizzati** - Test con la propria lista di domini specifica
**Esempio:**```bash
# Test internationalized domains
dns-benchmark benchmark \
--domains international-domains.txt \
--record-types A,AAAA,MX \
--resolvers custom-resolvers.json
💡 La maggior parte degli utenti ha bisogno solo delle funzionalità di base. Queste capacità avanzate sono disponibili quando ne hai bisogno.
dns-benchmark benchmark
--domains api.myapp.com,cdn.myapp.com
--record-types A,AAAA
--resolvers production.json
--iterations 10
**Risultato:** Riduci la latenza dell'API di 100-300ms
---
### 🛡️ Per DevOps/SRE: Convalida prima della migrazione```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
Risultato: Verifica prestazioni e sicurezza prima della migrazione
dns-benchmark compare
--resolvers pihole.local,1.1.1.1,8.8.8.8,9.9.9.9
--domains common-sites.txt
--rounds 10
**Risultato:** Prova basata sui dati che il tuo DNS self-hosted è più veloce (o no!)
---
### 📊 Per Amministratori di Rete: Controlli di Salute Automatizzati```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
Risultato: Report automatizzato di conformità e SLA
dns-benchmark benchmark
--doh
--resolvers privacy-resolvers.json
--domains sensitive-sites.txt
--dnssec-validate
**Risultato:** Trova il DNS crittografato più veloce senza sacrificare la privacy
---
## 📦 Installazione e Configurazione
### Requisiti
- Python 3.9+
- pip (gestore di pacchetti)
### Installazione da PyPI```bash
pip install dns-benchmark-tool
git clone https://github.com/frankovo/dns-benchmark-tool.git cd dns-benchmark-tool pip install -e .
### Verifica dell'installazione```bash
dns-benchmark --version
dns-benchmark --help
dns-benchmark benchmark --use-defaults --formats csv,excel
---
## 📖 Esempi di Utilizzo
### Utilizzo 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
---
⚠️ **Nota per i nuovi comandi:** I resolver senza query riuscite sono esclusi dalla classifica e visualizzeranno `Avg Latency: N/A`.
---
## Supporto per input inline per resolver e domini
Questa patch introduce il supporto completo per valori inline separati da virgola per i flag `--resolvers` e `--domains`, risolvendo il problema [#39](https://github.com/frankovo/dns-benchmark-tool/issues/39) e migliorando l'usabilità della CLI senza interrompere i flussi di lavoro esistenti.
### Nuove funzionalità
1. **resolver inline**: `--resolvers "1.1.1.1,8.8.8.8,9.9.9.9"`
2. **domini inline**: `--domains "google.com,github.com"`
3. **valori singoli**: `--resolvers "1.1.1.1"` o `--domains "google.com"`
4. **resolver nominati**: `--resolvers "cloudflare,google,quad9"`
5. **input misto**: `--resolvers "1.1.1.1,cloudflare,8.8.8.8"`
### Compatibilità all'indietro
- tutte le configurazioni esistenti basate su file continuano a funzionare
- nessuna modifica di rottura alla CLI
- il rilevamento dei file ha priorità rispetto all'analisi inline
### Esempi di utilizzo
#### Prima (Funzionavano solo i file)```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
#### Resolver con nome```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
#### Singolo```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
### Gestione dei domini```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
### Gestione della configurazione```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
Flag di analisi aggiuntive:```bash
# Include domain and record-type analytics and error breakdown
dns-benchmark benchmark --use-defaults \
--domain-stats --record-type-stats --error-breakdown
Esportazione JSON:```bash
dns-benchmark benchmark --use-defaults --json --output ./results
#### Amministratore di rete```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
#### Sviluppatore & 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 aziendale```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
Il DNS Benchmark Tool ora include tre comandi specializzati per diversi flussi di lavoro:
Classifica rapidamente i resolver in base a velocità e affidabilità.```bash
dns-benchmark top
dns-benchmark top -d domains.txt
dns-benchmark top -o results.json
### 📊 Confronta
Confronta i resolver affiancati con statistiche dettagliate.```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
Monitora continuamente le prestazioni del resolver con avvisi.```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
---
### 🌟 Vetrina dei Comandi
| Comando | Scopo | Caso d'uso tipico | Opzioni chiave | Output |
|--------------|-------|-------------------|----------------|--------|
| **top** | Classifica rapida dei resolver per velocità e affidabilità | Controllo rapido per vedere quale resolver è il migliore in questo momento | `--domains`, `--record-types`, `--output` | Elenco ordinato dei resolver con latenza e tasso di successo |
| **compare** | Confronto affiancato di resolver specifici | Benchmark dettagliato tra resolver/domini scelti | `--domains`, `--record-types`, `--iterations`, `--output`, `--show-details` | Tabella dei resolver con latenza, tasso di successo, ripartizione per dominio |
| **monitoring** | Monitoraggio continuo con avvisi | Tracciamento in tempo reale delle prestazioni del resolver nel tempo | `--interval`, `--duration`, `--alert-latency`, `--alert-failure-rate`, `--output`, `--use-defaults` | Indicatori di stato in tempo reale, avvisi, file di log opzionale |
---
## 📊 Miglioramenti all'Analisi
- **Conteggio iterazioni**: visualizzato quando viene eseguita più di una iterazione.
- **Colpi in cache**: mostra quante query sono state servite dalla cache (quando `--use-cache` è abilitato).
- **Tracciamento degli errori**: i resolver con errori ripetuti vengono contati e possono essere ispezionati con `get_failed_resolvers()`.
- **Statistiche della cache**: disponibili tramite `get_cache_stats()`, mostrano il numero di voci in cache e se la cache è abilitata.
- **Risultati di riscaldamento**: le query di riscaldamento sono contrassegnate con `iteration=0` nei dati grezzi, rendendo facile filtrarle nell'analisi.
Esempio di output riepilogativo:```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" } ] }
### Formato file di testo dei domini```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
--domain-stats)--record-type-stats)--error-breakdown)Per impostazione predefinita, lo strumento supporta esportazioni CSV ed Excel.
L'esportazione PDF richiede la dipendenza aggiuntiva weasyprint, che non viene installata automaticamente per evitare problemi di esecuzione su alcune piattaforme.
pip install dns-benchmark-tool[pdf]
#### Utilizzo
Una volta installato, puoi richiedere l'output PDF tramite la CLI:```bash
dns-benchmark --use-defaults --formats pdf --output ./results
Se weasyprint non è installato e richiedi un output PDF, la CLI mostrerà:```bash
[-] Error during benchmark: PDF export requires 'weasyprint'. Install with: pip install dns-benchmark-tool[pdf]
---
### ⚠️ Configurazione di WeasyPrint (per esportazione PDF)
Il DNS Benchmark Tool utilizza **WeasyPrint** per generare report PDF.
Se desideri l'esportazione PDF, hai bisogno di librerie di sistema aggiuntive oltre al pacchetto 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
Installa le librerie GTK+ usando uno di questi metodi:
- **MSYS2**: [Scarica MSYS2](https://www.msys2.org/), quindi esegui: ```bash
pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-libffi
Riavvia il terminale dopo l'installazione.
Dopo aver installato le librerie di sistema, installa il pacchetto Python extra:```bash pip install dns-benchmark-tool[pdf]
Poi esegui:```bash
dns-benchmark --use-defaults --formats pdf --output ./results
dns-benchmark generate-config
--category privacy
--output my-config.yaml
## Ottimizzazione delle prestazioni```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
### Modalità di debug```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 esempio```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
Posiziona le immagini 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
Scenari comuni:```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
Prerequisiti
make gpg-check per verificare.Prepara rilascio (firmato)
Bump patch/minor/major:
make release-patch # oppure: make release-minor / make release-major
release/X.Y.Z.Apri PR: da release/X.Y.Z verso main, poi unisci una volta che il CI è superato.
Tagga e pubblica
Crea tag firmato e push:
make release-tag VERSION=X.Y.Z
vX.Y.Z (firmato).Alternativa manuale
Crea branch e commit firmato:
La CLI rimane gratuita per sempre. La dashboard web è ora disponibile su buildtools.net
→ Registrati gratuitamente su buildtools.net
Adoriamo i contributi! Ecco come puoi aiutare:
Questo progetto include un Makefile per semplificare installazione, test e controlli di qualità del codice.```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
### Utilizzo comune
- **Installa solo il runtime** ```bash
make install
Il DNS dell'ISP locale ha spesso vantaggi di caching ma potrebbe mancare di:
Testa entrambi e decidi in base alle TUE priorità!
Sì! Basta aggiungerlo a un file JSON di risolutori personalizzati:```json { "resolvers": [ {"name": "My DNS", "ip": "192.168.1.1"} ] }
</details>
<details>
<summary><b>Qual è la differenza tra la versione CLI e quella hosted?</b></summary>
**CLI (Gratuito per sempre):**
- Esegui test dalla TUA posizione
- Salva i risultati localmente
- Open source — lo stesso motore che alimenta la dashboard
**Web Dashboard (Live su buildtools.net):**
- Risultati benchmark visivi e cronologia
- Monitoraggio DNS con avvisi in tempo reale
- Livello gratuito disponibile, Pro a €14/mese
- Test multi-regione in arrivo nel Q3 2026
</details>
<details>
<summary><b>Questo strumento è sicuro da usare in produzione?</b></summary>
Sì! Lo strumento esegue solo query DNS (operazioni di lettura). NON:
- Modifica i record DNS
- Esegue attacchi
- Invia dati a server esterni (a meno che non si abilitino le funzionalità in hosting)
Tutti i test sono query DNS standard che qualsiasi resolver gestisce quotidianamente.
</details>
<details>
<summary><b>Perché i risultati variano tra un'esecuzione e l'altra?</b></summary>
Le prestazioni DNS variano a causa di:
- Condizioni di rete
- Cache DNS (resolver e intermediario)
- Carico del server
- Cambiamenti di routing geografico
Esegui più iterazioni (`--iterations 5`) per risultati più consistenti.
</details>
---
## 🔗 Link e Supporto
### Ufficiale
- **Sito 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)
### Comunità
- **Discussioni**: [GitHub Discussions](https://github.com/frankovo/dns-benchmark-tool/discussions)
- **Segnalazioni di bug**: [Bug Reports](https://github.com/frankovo/dns-benchmark-tool/issues)
### Statistiche
- **Download**: 1,400+ (questa settimana)
- **Utenti attivi**: 600+
---
## Licenza
Questo progetto è concesso in licenza sotto la licenza MIT — vedi il file [LICENSE](https://github.com/net-benchmark/dns-benchmark-tool/blob/HEAD/LICENSE) per i dettagli.
---
<div align="center">
**Realizzato con ❤️ da [@frankovo](https://github.com/frankovo)**
Parte di [BuildTools](https://buildtools.net) - Suite per le prestazioni di rete
[⭐ Metti stella su GitHub](https://github.com/frankovo/dns-benchmark-tool) • [📦 Installa da PyPI](https://pypi.org/project/dns-benchmark-tool/)
</div>
| Comando | Cosa fa | Esempio rapido |
|---|
benchmark | Benchmark DNS completo con esportazioni | dns-benchmark benchmark --use-defaults |
top | Classifica tutti i resolver per velocità | dns-benchmark top --limit 5 |
compare | Confronto affiancato dei resolver | dns-benchmark compare Cloudflare Google Quad9 |
monitoring | Monitoraggio continuo con avvisi | dns-benchmark monitoring --use-defaults |
| Opzione | Descrizione | Esempio |
|---|
--iterations, -i | Esegui il ciclo completo di benchmark N volte | dns-benchmark benchmark --use-defaults -i 3 |
--use-cache | Consenti il riutilizzo dei risultati in cache tra le iterazioni | dns-benchmark benchmark --use-defaults -i 3 --use-cache |
--warmup | Esegui un riscaldamento completo (tutti i resolver × domini × tipi di record) | dns-benchmark benchmark --use-defaults --warmup |
--warmup-fast | Esegui un riscaldamento leggero (un probe per resolver) | dns-benchmark benchmark --use-defaults --warmup-fast |
--include-charts | Incorpora grafici nei report PDF/Excel per l'analisi visiva delle prestazioni | dns-benchmark benchmark --use-defaults --formats pdf,excel --include-charts |
| Modalità | Flag Consigliati | Scopo |
|---|
| Esecuzione Rapida | --iterations 1 --timeout 1 --retries 0 --warmup-fast | Feedback rapido, tentativi minimi, warmup leggero. Ideale per controlli veloci. |
| Esecuzione Approfondita | --iterations 3 --use-cache --warmup --timeout 5 --retries 2 | Passaggi multipli, cache abilitata, warmup completo. Ottimo per benchmarking dettagliato. |
| Modalità Debug | --iterations 1 --timeout 10 --retries 0 --quiet | Timeout lungo, nessun tentativo, output minimo. Utile per diagnosticare problemi del resolver. |
| Esecuzione Bilanciata | --iterations 2 --use-cache --warmup-fast --timeout 2 --retries 1 | Un compromesso: velocità moderata, alcuni tentativi, cache abilitata, warmup rapido. |
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
Apri PR e unisci in main.
Poi tagga:
make release-tag VERSION=$NEXT_VERSION
Note
git commit -S ...git tag -s vX.Y.Z -m "Release vX.Y.Z"pyproject.toml e src/dns_benchmark/__init__.py