
Pruebas de rendimiento DNS rápidas y completas con validación DNSSEC, soporte DoH/DoT y funciones empresariales.
⚠️ este proyecto se ha trasladado y ya no se mantiene. instala el sucesor:
pip install net-benchmarkrepositorio: https://github.com/net-benchmark/net-benchmark todos los comandos y opciones existentes siguen siendo completamente compatibles.
Pruebas de rendimiento DNS rápidas y completas con validación DNSSEC, soporte DoH/DoT y características empresariales```bash pip install dns-benchmark-tool dns-benchmark benchmark --use-defaults --formats csv,excel
> 🎉 **¡Más de 1,400 descargas · más de 600 usuarios activos!**
> 🚀 **¡El panel web ya está disponible!** [Prueba BuildTools gratis →](https://buildtools.net)
---
**Seguimiento en tiempo real**
[](https://github.com/frankovo/dns-benchmark-tool)
*Observa consultas DNS en movimiento*
**Seguimiento en tiempo real - Interfaz web**
[](https://github.com/frankovo/dns-benchmark-tool)
*Supervisa consultas DNS en vivo con alertas por correo electrónico*
</div>
## 🎉 Novedades en 
Hemos añadido **tres potentes comandos de CLI** y soporte completo para **DoH, DoT y DNSSEC**:
- 🚀 **top** — clasificación rápida de resolutores por velocidad y confiabilidad
- 📊 **compare** — comparación lado a lado con estadísticas detalladas y opciones de exportación
- 🔄 **monitoring** — seguimiento continuo del rendimiento con alertas y registro
- 🔒 **DoH / DoT / DNSSEC** — evaluación comparativa de DNS cifrado con datos reales de compensación de latencia```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 resolución de DNS suele ser el cuello de botella oculto en el rendimiento de la red. Un resolutor lento puede añadir cientos de milisegundos a cada solicitud.
dns-benchmark-tool te ayuda a:
pip install dns-benchmark-tool
### Ejecute su primer benchmark```bash
# Test default resolvers against popular domains
dns-benchmark benchmark --use-defaults --formats csv,excel
Los resultados se guardan automáticamente en ./benchmark_results/ con:
¡Eso es todo! Acabas de evaluar 5 resolutores DNS contra 10 dominios.
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
---
## ✨ Características Principales
### 🚀 Rendimiento
- **Consultas asíncronas** - Prueba más de 100 resolutores simultáneamente
- **Multi-iteración** - Ejecuta benchmarks varias veces para precisión
- **Análisis estadístico** - Media, mediana, P95, P99, jitter, consistencia
- **Control de caché** - Prueba con/sin caché DNS
### 🔒 Seguridad y Privacidad
- **Validación DNSSEC** - Verifica cadenas de confianza criptográficas
- **DNS-over-HTTPS (DoH)** - Benchmarking de DNS cifrado
- **DNS-over-TLS (DoT)** - Pruebas de transporte seguro
- **DNS-over-QUIC (DoQ)** - Soporte experimental de QUIC
### 📊 Análisis y Exportación
- **Múltiples formatos** - CSV, Excel, PDF, JSON
- **Informes visuales** - Gráficos y diagramas
- **Estadísticas por dominio** - Análisis de rendimiento por dominio
- **Desglose de errores** - Identifica resolutores problemáticos
### 🏢 Características Empresariales
- **Autenticación TSIG** - Consultas empresariales seguras
- **Transferencias de zona** - Validación AXFR/IXFR
- **Actualizaciones dinámicas** - Prueba operaciones de escritura DNS
- **Informes de cumplimiento** - Documentación lista para auditoría
### 🌐 Multiplataforma
- **Linux, macOS, Windows** - Funciona en todas partes
- **Amigable con CI/CD** - Salida JSON, códigos de salida
- **Soporte IDNA** - Nombres de dominio internacionalizados
- **Detección automática** - Descubrimiento DNS de Windows WMI
---
## 🔒 Seguridad y DNS Cifrado
Tres protocolos son totalmente compatibles — cada uno añade privacidad a costa de latencia.
| Protocolo | Indicador | Sobrecarga típica | Cuándo usarlo |
|---|---|---|---|
| UDP simple | *(predeterminado)* | línea base | Benchmarking de latencia |
| DNS-over-HTTPS | `--doh` | +50–200ms | Privacidad, evitar firewall |
| DNS-over-TLS | `--dot` | +200–500ms en frío, ~50ms en caliente | Transporte cifrado |
| DNSSEC | `--dnssec-validate` | +30–100ms | Validar integridad del resolutor |
> ⚠️ **Compensaciones**
> - DoH y DoT añaden sobrecarga de handshake TLS en la primera consulta por resolutor. Usa `--warmup-fast` para absorber esto antes de medir.
> - `--dnssec-validate` solicita registros RRSIG y exige el marcador AD. Solo ~33% de los dominios comunes están firmados con DNSSEC — espera resultados `DNSSEC_FAILED` en dominios no firmados. Los números de latencia con y sin este indicador **no son directamente comparables**.
> - Los resultados en móvil/hotspot mostrarán una varianza 2–5 veces mayor que en ethernet cableado. Usa `--iterations 5` y compara la mediana de latencia, no el promedio.```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
Ejemplos de fallos tempranos — estos fallan inmediatamente antes de que se ejecute cualquier consulta:```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
---
## 🔧 Capacidades Avanzadas
---
> ⚠️ Estas banderas están **documentadas para visibilidad** pero aún no implementadas.
> Representan próximas características avanzadas.
- `--zone-transfer` → Pruebas de transferencia de zona AXFR/IXFR *(próximamente)*
- `--tsig` → Consultas autenticadas por TSIG *(próximamente)*
- `--idna` → Soporte de nombres de dominio internacionalizados *(próximamente)*
---
<details>
<summary><b>🚀 Características de Rendimiento y Concurrencia</b></summary>
<br>
- **Async I/O con dnspython** - Pruebe más de 100 resolvedores simultáneamente
- **Soporte del framework Trio** - Operaciones asíncronas de alta concurrencia
- **Concurrencia configurable** - Controlar consultas concurrentes máximas
- **Lógica de reintentos** - Retroceso exponencial para consultas fallidas
- **Simulación de caché** - Probar con/sin almacenamiento en caché de DNS
- **Puntos de referencia multi-iteración** - Ejecutar pruebas múltiples veces para precisión
- **Fase de calentamiento** - Precalentar cachés DNS antes de probar
- **Análisis estadístico** - Media, mediana, P95, P99, jitter, puntuaciones de consistencia
**Ejemplo:**```bash
dns-benchmark benchmark \
--max-concurrent 200 \
--iterations 5 \
--timeout 3.0 \
--warmup
Ejemplo:```bash
dns-benchmark benchmark
--doh
--resolvers doh-providers.json
--dnssec-validate
</details>
<details>
<summary><b>🏢 Funciones empresariales y de migración</b></summary>
<br>
- **Transferencias de zona (AXFR/IXFR)** - Validación de transferencias de zona completas e incrementales
- **Actualizaciones de DNS dinámico** - Prueba de operaciones de escritura y actualizaciones de DNS
- **Soporte EDNS0** - Opciones DNS extendidas, subred de cliente, cargas útiles más grandes
- **Integración con WMI de Windows** - Detección automática de configuraciones DNS activas del sistema
- **Informes de cumplimiento** - Generar informes PDF/Excel listos para auditoría
- **Validación de SLA** - Seguimiento de tiempo de actividad y umbrales de rendimiento
**Ejemplo:**```bash
# Validate DNS migration
dns-benchmark benchmark \
--resolvers old-provider.json,new-provider.json \
--zone-transfer \ # coming soon
--output migration-report/ \
--formats pdf,excel
Ejemplo:```bash
dns-benchmark benchmark
--use-defaults
--formats csv,excel
--domain-stats
--record-type-stats
--error-breakdown
--formats csv,excel,pdf
</details>
<details>
<summary><b>🌐 Internacionalización y compatibilidad</b></summary>
<br>
- **Soporte IDNA** - Nombres de dominio internacionalizados (IDN)
- **Múltiples tipos de registro** - A, AAAA, MX, TXT, CNAME, NS, SOA, PTR, SRV, CAA
- **Multiplataforma** - Linux, macOS, Windows (soporte nativo)
- **Integración CI/CD** - salida JSON, códigos de salida adecuados, modo silencioso
- **Resolvedores personalizados** - Cargar desde JSON, probar tus propios servidores DNS
- **Dominios personalizados** - Probar contra tu lista de dominios específica
**Ejemplo:**```bash
# Test internationalized domains
dns-benchmark benchmark \
--domains international-domains.txt \
--record-types A,AAAA,MX \
--resolvers custom-resolvers.json
💡 La mayoría de los usuarios solo necesita funciones básicas. Estas capacidades avanzadas están disponibles cuando las necesites.
dns-benchmark benchmark
--domains api.myapp.com,cdn.myapp.com
--record-types A,AAAA
--resolvers production.json
--iterations 10
**Resultado:** Reduzca la latencia de la API en 100-300 ms
---
### 🛡️ Para DevOps/SRE: Validar antes de la migración```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
Resultado: Verifique el rendimiento y la seguridad antes de la migración
dns-benchmark compare
--resolvers pihole.local,1.1.1.1,8.8.8.8,9.9.9.9
--domains common-sites.txt
--rounds 10
**Resultado:** Prueba basada en datos de que tu DNS auto-alojado es más rápido (¡o no!)
---
### 📊 Para administradores de redes: Comprobaciones de salud automatizadas```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
Resultado: Informes automatizados de cumplimiento y SLA
dns-benchmark benchmark
--doh
--resolvers privacy-resolvers.json
--domains sensitive-sites.txt
--dnssec-validate
**Resultado:** Encuentre el DNS cifrado más rápido sin sacrificar la privacidad
---
## 📦 Instalación y Configuración
### Requisitos
- Python 3.9+
- administrador de paquetes pip
### Instalar desde PyPI```bash
pip install dns-benchmark-tool
git clone https://github.com/frankovo/dns-benchmark-tool.git cd dns-benchmark-tool pip install -e .
### Verificar Instalación```bash
dns-benchmark --version
dns-benchmark --help
dns-benchmark benchmark --use-defaults --formats csv,excel
---
## 📖 Ejemplos de Uso
### Uso Básico```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 para nuevos comandos:** Los resolutores sin consultas exitosas son excluidos del ranking y mostrarán `Avg Latency: N/A`.
---
## Soporte de entrada en línea para resolutores y dominios
Esta mejora introduce soporte completo para valores en línea separados por comas para las
banderas `--resolvers` y `--domains`, solucionando el problema [#39](https://github.com/frankovo/dns-benchmark-tool/issues/39) y mejorando la usabilidad de la CLI sin romper ningún flujo de trabajo existente.
### Nuevas capacidades
1. **resolutores en línea**: `--resolvers "1.1.1.1,8.8.8.8,9.9.9.9"`
2. **dominios en línea**: `--domains "google.com,github.com"`
3. **valores únicos**: `--resolvers "1.1.1.1"` o `--domains "google.com"`
4. **resolutores nombrados**: `--resolvers "cloudflare,google,quad9"`
5. **entrada mixta**: `--resolvers "1.1.1.1,cloudflare,8.8.8.8"`
### Compatibilidad hacia atrás
- todas las configuraciones existentes basadas en archivos continúan funcionando
- sin cambios que rompan la CLI
- la detección de archivos tiene prioridad sobre el análisis en línea
### Ejemplos de uso
#### Antes (Solo los archivos funcionaban)```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
#### Resolvedores nombrados```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
#### Único```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
### Gestión de dominios```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
### Gestión de configuración```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
Banderas de análisis de complementos:```bash
# Include domain and record-type analytics and error breakdown
dns-benchmark benchmark --use-defaults \
--domain-stats --record-type-stats --error-breakdown
Exportación JSON:```bash
dns-benchmark benchmark --use-defaults --json --output ./results
#### Administrador de red```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
#### Desarrollador y 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
#### TI Empresarial```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
La Herramienta de Benchmark DNS ahora incluye tres comandos especializados para diferentes flujos de trabajo:
dns-benchmark top
dns-benchmark top -d domains.txt
dns-benchmark top -o results.json
---
### 📊 Comparar
Evalúe resolutores uno al lado del otro con estadísticas detalladas.```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
Supervise continuamente el rendimiento del resolvedor con alertas.```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
---
### 🌟 Demostración de comandos
| Comando | Propósito | Caso de uso típico | Opciones clave | Salida |
|--------------|---------|------------------|-------------|--------|
| **top** | Clasificación rápida de resolvedores por velocidad y confiabilidad | Verificación rápida para saber qué resolvedor es el mejor en este momento | `--domains`, `--record-types`, `--output` | Lista ordenada de resolvedores con latencia y tasa de éxito |
| **compare** | Comparación lado a lado de resolvedores específicos | Evaluación comparativa detallada entre resolvedores/dominios seleccionados | `--domains`, `--record-types`, `--iterations`, `--output`, `--show-details` | Tabla de resolvedores con latencia, tasa de éxito y desglose por dominio |
| **monitoring** | Monitoreo continuo con alertas | Seguimiento en tiempo real del rendimiento del resolvedor a lo largo del tiempo | `--interval`, `--duration`, `--alert-latency`, `--alert-failure-rate`, `--output`, `--use-defaults` | Indicadores de estado en vivo, alertas, archivo de registro opcional |
---
## 📊 Mejoras de análisis
- **Recuento de iteraciones**: se muestra cuando se ejecuta más de una iteración.
- **Aciertos de caché**: muestra cuántas consultas se sirvieron desde la caché (cuando `--use-cache` está habilitado).
- **Seguimiento de fallos**: los resolvedores con errores repetidos se cuentan y se pueden inspeccionar con `get_failed_resolvers()`.
- **Estadísticas de caché**: disponibles a través de `get_cache_stats()`, muestra el número de entradas en caché y si la caché está habilitada.
- **Resultados de calentamiento**: las consultas de calentamiento se marcan con `iteration=0` en los datos sin procesar, lo que facilita su filtrado en el análisis.
Ejemplo de salida resumen:```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 de archivo de texto de dominios```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
Por defecto, la herramienta admite exportaciones en CSV y Excel.
La exportación a PDF requiere la dependencia adicional weasyprint, que no se instala automáticamente para evitar problemas de ejecución en algunas plataformas.
pip install dns-benchmark-tool[pdf]
#### Usage
Una vez instalado, puede solicitar la salida PDF a través de la CLI:```bash
dns-benchmark --use-defaults --formats pdf --output ./results
Si weasyprint no está instalado y solicitas salida PDF, la CLI mostrará:```bash
[-] Error during benchmark: PDF export requires 'weasyprint'. Install with: pip install dns-benchmark-tool[pdf]
---
### ⚠️ Configuración de WeasyPrint (para exportación a PDF)
La herramienta DNS Benchmark Tool utiliza **WeasyPrint** para generar informes PDF.
Si deseas exportar a PDF, necesitas bibliotecas del sistema adicionales además del paquete de 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
Instala las librerías GTK+ usando uno de estos métodos:
- **MSYS2**: [Descarga MSYS2](https://www.msys2.org/), luego ejecuta: ```bash
pacman -S mingw-w64-x86_64-gtk3 mingw-w64-x86_64-libffi
Reinicie su terminal después de la instalación.
Después de instalar las bibliotecas del sistema, instale el extra de Python:```bash pip install dns-benchmark-tool[pdf]
Luego ejecuta:```bash
dns-benchmark --use-defaults --formats pdf --output ./results
dns-benchmark generate-config
--category privacy
--output my-config.yaml
---
## Optimización del rendimiento```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
### Modo de depuración```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)
### Ejemplo de 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
Coloca las imágenes en 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
Escenarios comunes:```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
Requisitos previos
make gpg-check para verificar.Preparar lanzamiento (firmado)
Incremento de parche/menor/principal:
make release-patch # or: make release-minor / make release-major
release/X.Y.Z.Abrir PR: desde release/X.Y.Z hacia main, luego fusiona una vez que CI pase.
Etiquetar y publicar
Crear etiqueta firmada y subir:
make release-tag VERSION=X.Y.Z
vX.Y.Z (firmada).Alternativa manual
Crear rama y commit firmado:
La CLI sigue siendo gratuita para siempre. El panel web ya está disponible en buildtools.net
→ Regístrate gratis en buildtools.net
¡Nos encantan las contribuciones! Así es como puedes ayudar:
Este proyecto incluye un Makefile para simplificar la instalación, las pruebas y las comprobaciones de calidad de código.```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
### Uso común
- **Instalar solo el entorno de ejecución** ```bash
make install
El DNS del ISP local a menudo tiene ventajas de almacenamiento en caché, pero puede carecer de:
¡Prueba ambos y decide según TUS prioridades!
¡Sí! Simplemente agrégalo a un archivo JSON de resolvers personalizado:```json { "resolvers": [ {"name": "My DNS", "ip": "192.168.1.1"} ] }
</details>
<details>
<summary><b>¿Cuál es la diferencia entre la versión CLI y la versión alojada?</b></summary>
**CLI (Gratis para siempre):**
- Ejecuta pruebas desde TU ubicación
- Guarda los resultados localmente
- Código abierto: el mismo motor que impulsa el panel
**Panel web (en vivo en buildtools.net):**
- Resultados visuales de evaluación comparativa e historial
- Monitoreo de DNS con alertas en tiempo real
- Nivel gratuito disponible, Pro a 14 €/mes
- Pruebas multirregión próximamente en el tercer trimestre de 2026
</details>
<details>
<summary><b>¿Es seguro usar esta herramienta en producción?</b></summary>
¡Sí! La herramienta solo realiza consultas DNS (operaciones de lectura). NO:
- Modifica registros DNS
- Realiza ataques
- Envía datos a servidores externos (a menos que habilites funciones alojadas)
Todas las pruebas son consultas DNS estándar que cualquier resolución maneja a diario.
</details>
<details>
<summary><b>¿Por qué varían los resultados entre ejecuciones?</b></summary>
El rendimiento de DNS varía debido a:
- Condiciones de red
- Caché de DNS (resolución e intermedia)
- Carga del servidor
- Cambios de enrutamiento geográfico
Ejecuta múltiples iteraciones (`--iterations 5`) para obtener resultados más consistentes.
</details>
---
## 🔗 Enlaces y Soporte
### Oficial
- **Sitio 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)
### Comunidad
- **Discusiones**: [GitHub Discussions](https://github.com/frankovo/dns-benchmark-tool/discussions)
- **Incidencias**: [Informes de errores](https://github.com/frankovo/dns-benchmark-tool/issues)
### Estadísticas
- **Descargas**: más de 1,400 (esta semana)
- **Usuarios activos**: más de 600
---
## Licencia
Este proyecto está licenciado bajo la Licencia MIT — consulte el archivo [LICENSE](https://github.com/net-benchmark/dns-benchmark-tool/blob/main/LICENSE) para obtener más detalles.
---
<div align="center">
**Creado con ❤️ por [@frankovo](https://github.com/frankovo)**
Parte de [BuildTools](https://buildtools.net) - Suite de rendimiento de red
[⭐ Marcar en GitHub](https://github.com/frankovo/dns-benchmark-tool) • [📦 Instalar desde PyPI](https://pypi.org/project/dns-benchmark-tool/)
</div>
| Comando | Qué hace | Ejemplo rápido |
|---|
benchmark | Evaluación DNS completa con exportaciones | dns-benchmark benchmark --use-defaults |
top | Clasificar todos los resolutores por velocidad | dns-benchmark top --limit 5 |
compare | Comparación lado a lado de resolutores | dns-benchmark compare Cloudflare Google Quad9 |
monitoring | Monitoreo continuo con alertas | dns-benchmark monitoring --use-defaults |
| Opción | Descripción | Ejemplo |
|---|
--iterations, -i | Ejecutar el bucle completo de benchmark N veces | dns-benchmark benchmark --use-defaults -i 3 |
--use-cache | Permitir que los resultados en caché se reutilicen entre iteraciones | dns-benchmark benchmark --use-defaults -i 3 --use-cache |
--warmup | Ejecutar un calentamiento completo (todos los resolvedores × dominios × tipos de registro) | dns-benchmark benchmark --use-defaults --warmup |
--warmup-fast | Ejecutar un calentamiento ligero (una sonda por resolvedor) | dns-benchmark benchmark --use-defaults --warmup-fast |
--include-charts | Insertar gráficos en informes PDF/Excel para análisis visual de rendimiento | dns-benchmark benchmark --use-defaults --formats pdf,excel --include-charts |
| Modo | Banderas recomendadas | Propósito |
|---|
| Ejecución rápida | --iterations 1 --timeout 1 --retries 0 --warmup-fast | Retroalimentación rápida, reintentos mínimos, calentamiento ligero. Bueno para comprobaciones rápidas. |
| Ejecución exhaustiva | --iterations 3 --use-cache --warmup --timeout 5 --retries 2 | Múltiples pasadas, caché habilitada, calentamiento completo. Ideal para evaluaciones comparativas detalladas. |
| Modo depuración | --iterations 1 --timeout 10 --retries 0 --quiet | Tiempo de espera largo, sin reintentos, salida mínima. Útil para diagnosticar problemas del resolvedor. |
| Ejecución equilibrada | --iterations 2 --use-cache --warmup-fast --timeout 2 --retries 1 | Un punto medio: velocidad moderada, algunos reintentos, caché habilitado, calentamiento rápido. |
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
Abrir PR y fusionar en main.
Luego etiquetar:
make release-tag VERSION=$NEXT_VERSION
Notas
git commit -S ...git tag -s vX.Y.Z -m "Release vX.Y.Z"pyproject.toml y src/dns_benchmark/__init__.py