Herramienta completa en Python para análisis masivo de direcciones IP con consultas WHOIS y geolocalización. Diseñada para procesar miles de IPs de forma eficiente, con soporte para reanudación, procesamiento paralelo y generación de estadísticas detalladas.
- ✅ Procesamiento Paralelo: Consultas simultáneas con control de workers
- ✅ Múltiples Proveedores: Rotación automática entre servicios de geolocalización gratuitos
- ✅ Rate Limiting Inteligente: Evita bloqueos respetando límites de APIs
- ✅ Reanudación Automática: Guarda progreso para continuar después de interrupciones
- ✅ Consultas WHOIS: Obtiene información de propietarios y organizaciones
- ✅ Geolocalización: País, ciudad, ISP y coordenadas geográficas
- ✅ Reportes Detallados: Estadísticas agregadas con porcentajes por país, ciudad y organización
- ✅ Configuración Flexible: Parámetros personalizables sin modificar código
- ✅ Logging Completo: Registro detallado de operaciones y errores
ip_whois_crawler/
├── config/
│ └── config.yaml # Configuración principal
├── data/
│ └── input/
│ └── ips.txt # Archivo con IPs a procesar
├── output/
│ ├── raw/
│ │ └── ip_data.csv # Datos brutos por IP
│ └── reports/
│ └── statistics.json # Estadísticas agregadas
├── logs/
│ └── crawler.log # Logs de ejecución
├── src/
│ ├── __init__.py
│ ├── main.py # Script principal
│ ├── ip_processor.py # Procesador de IPs
│ ├── whois_client.py # Cliente WHOIS
│ ├── geo_client.py # Cliente de geolocalización
│ ├── progress_manager.py # Gestor de progreso
│ └── report_generator.py # Generador de reportes
├── requirements.txt # Dependencias
└── README.md # Este archivo
cd ip_whois_crawlerpython -m venv venv
# En Windows
venv\Scripts\activate
# En Linux/Mac
source venv/bin/activatepip install -r requirements.txtEdita el archivo config/config.yaml para personalizar:
input:
file: "data/input/ips.txt" # Tu archivo con IPs
output:
raw_data: "output/raw/ip_data.csv"
statistics: "output/reports/statistics.json"processing:
max_workers: 5 # Número de hilos paralelos
batch_size: 100 # Guardar progreso cada N IPs
retry_attempts: 3 # Reintentos por IPrate_limiting:
requests_per_minute: 45 # Peticiones por minuto
delay_between_requests: 1.5 # Segundos entre peticionesEl crawler usa tres servicios gratuitos en rotación:
- ip-api.com (45 req/min)
- ipapi.co (30 req/min)
- ipinfo.io (60 req/min)
Puedes habilitar/deshabilitar servicios en el config.yaml.
Crea el archivo data/input/ips.txt con una IP por línea:
8.8.8.8
1.1.1.1
208.67.222.222
# Esto es un comentario
9.9.9.9
Procesamiento completo:
python src/main.pyCon archivo de configuración personalizado:
python src/main.py --config mi_config.yamlReiniciar desde cero:
python src/main.py --resetSolo generar reportes (sin procesar):
python src/main.py --report-only--config PATH Archivo de configuración (default: config/config.yaml)
--reset Reiniciar procesamiento desde cero
--report-only Solo generar reportes de datos existentes
output/raw/ip_data.csv contiene todos los datos por IP:
| Campo | Descripción |
|---|---|
| ip | Dirección IP |
| country | País |
| city | Ciudad |
| region | Región/Estado |
| latitude | Latitud |
| longitude | Longitud |
| isp | Proveedor de Internet |
| organization | Organización propietaria |
| asn | Número de Sistema Autónomo |
| timezone | Zona horaria |
output/reports/statistics.json incluye:
- Resumen general: Total de IPs, exitosas, fallidas
- Distribución por país: Conteo y porcentajes
- Distribución por ciudad: Top 50 ciudades
- Distribución por organización: Top 50 organizaciones
- Distribución por ISP: Top 30 ISPs
- Distribución por ASN: Top 30 ASNs
El crawler muestra en tiempo real:
- Progreso de procesamiento
- Tasa de IPs procesadas por segundo
- Tiempo estimado de finalización
- Resumen final con gráficos de barras ASCII
Ejemplo:
🌍 TOP 10 PAÍSES
──────────────────────────────────────────────────────────────────
País Count Porcentaje
──────────────────────────────────────────────────────────────────
United States 4523 45.23% ██████████████████████
United Kingdom 1234 12.34% ████████
Germany 987 9.87% ██████
El crawler guarda progreso cada 100 IPs (configurable). Si se interrumpe:
- Ejecuta nuevamente el mismo comando
- Automáticamente continuará desde donde se quedó
- No volverá a procesar IPs ya completadas
Para forzar reinicio: python src/main.py --reset
- Procesamiento paralelo: Múltiples IPs simultáneamente
- Rotación de servicios: Distribuye carga entre proveedores
- Rate limiting inteligente: Evita bloqueos automáticamente
- Batch saving: Reduce operaciones de I/O
Para 10,000 IPs con configuración default (5 workers):
- Tiempo total: ~45-90 minutos
- Tasa promedio: 2-3 IPs/segundo
Ajusta max_workers en config.yaml según tu conexión.
| Servicio | Límite Gratuito | Notas |
|---|---|---|
| ip-api.com | 45 req/min | Sin registro |
| ipapi.co | 1000/día, 30000/mes | Sin registro |
| ipinfo.io | 50000/mes | Token opcional |
El crawler respeta estos límites automáticamente.
pip install ipwhois- Reduce
max_workersen config.yaml (ej: 3) - Aumenta
delay_between_requests(ej: 2.0)
Las IPs privadas (192.168.x.x, 10.x.x.x) no requieren consultas externas y se marcan como "Private IP".
Verifica la ruta en config.yaml o crea data/input/ips.txt.
Este proyecto es de código abierto. Úsalo libremente para tus análisis.
¿Sugerencias o mejoras? ¡Son bienvenidas!
Para problemas o preguntas, revisa los logs en logs/crawler.log.
Desarrollado con ❤️ para análisis eficiente de IPs