Skip to content

ocklham/ip_whois_crawler

Repository files navigation

IP WHOIS Crawler 🌍

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.

📋 Características

  • 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

🗂️ Estructura del Proyecto

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

🚀 Instalación

1. Clonar o descargar el proyecto

cd ip_whois_crawler

2. Crear entorno virtual (recomendado)

python -m venv venv

# En Windows
venv\Scripts\activate

# En Linux/Mac
source venv/bin/activate

3. Instalar dependencias

pip install -r requirements.txt

📝 Configuración

Edita el archivo config/config.yaml para personalizar:

Archivos de Entrada/Salida

input:
  file: "data/input/ips.txt"  # Tu archivo con IPs

output:
  raw_data: "output/raw/ip_data.csv"
  statistics: "output/reports/statistics.json"

Procesamiento Paralelo

processing:
  max_workers: 5        # Número de hilos paralelos
  batch_size: 100       # Guardar progreso cada N IPs
  retry_attempts: 3     # Reintentos por IP

Rate Limiting

rate_limiting:
  requests_per_minute: 45      # Peticiones por minuto
  delay_between_requests: 1.5  # Segundos entre peticiones

Servicios de Geolocalización

El crawler usa tres servicios gratuitos en rotación:

  1. ip-api.com (45 req/min)
  2. ipapi.co (30 req/min)
  3. ipinfo.io (60 req/min)

Puedes habilitar/deshabilitar servicios en el config.yaml.

🎯 Uso

Preparar Archivo de IPs

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

Ejecutar el Crawler

Procesamiento completo:

python src/main.py

Con archivo de configuración personalizado:

python src/main.py --config mi_config.yaml

Reiniciar desde cero:

python src/main.py --reset

Solo generar reportes (sin procesar):

python src/main.py --report-only

Opciones de Línea de Comandos

--config PATH    Archivo de configuración (default: config/config.yaml)
--reset          Reiniciar procesamiento desde cero
--report-only    Solo generar reportes de datos existentes

📊 Resultados

1. Datos Brutos (CSV)

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

2. Estadísticas Agregadas (JSON)

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

3. Salida en Consola

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% ██████

🔄 Reanudación Automática

El crawler guarda progreso cada 100 IPs (configurable). Si se interrumpe:

  1. Ejecuta nuevamente el mismo comando
  2. Automáticamente continuará desde donde se quedó
  3. No volverá a procesar IPs ya completadas

Para forzar reinicio: python src/main.py --reset

⚡ Rendimiento

Optimizaciones Implementadas

  • 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

Tiempos Estimados

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.

🛡️ Limitaciones de Servicios Gratuitos

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.

🐛 Solución de Problemas

Error: "ipwhois" no instalado

pip install ipwhois

Bloqueos frecuentes

  • Reduce max_workers en config.yaml (ej: 3)
  • Aumenta delay_between_requests (ej: 2.0)

IPs privadas

Las IPs privadas (192.168.x.x, 10.x.x.x) no requieren consultas externas y se marcan como "Private IP".

Archivo de IPs no encontrado

Verifica la ruta en config.yaml o crea data/input/ips.txt.

📄 Licencia

Este proyecto es de código abierto. Úsalo libremente para tus análisis.

🤝 Contribuciones

¿Sugerencias o mejoras? ¡Son bienvenidas!

📧 Soporte

Para problemas o preguntas, revisa los logs en logs/crawler.log.


Desarrollado con ❤️ para análisis eficiente de IPs

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors