Extractor IP Texto

Extraer direcciones IP de texto libre

Contenido fuente
Procesamiento local (lado cliente)
Entendiendo Extraccion de IP desde texto
TL;DR

La extraccion de IP escanea texto no estructurado (logs, configuraciones, correos) e identifica todas las direcciones IPv4 e IPv6 mediante coincidencia de patrones regex.

Que es la extraccion de IP?

La extraccion de IP desde texto es el proceso de escanear texto no estructurado — archivos de log, volcados de configuracion, correos electronicos, reportes de incidentes o cualquier documento de formato libre — e identificar todas las direcciones IPv4 e IPv6 contenidas en el. Las direcciones extraidas pueden luego validarse, deduplicarse, ordenarse o alimentarse a otras herramientas para analisis posterior.

Esta es una tarea comun en operaciones de seguridad, administracion de sistemas y analisis de datos. Cuando recibes un log de acceso de 10,000 lineas o un extenso reporte de incidentes, detectar manualmente cada direccion IP es impractico. Una herramienta de extraccion automatiza esto en milisegundos, produciendo una lista limpia de todas las direcciones encontradas en el texto.

La tecnica central es la coincidencia de patrones con expresiones regulares (regex). La herramienta aplica patrones regex cuidadosamente elaborados que coinciden con el formato estructural de las direcciones IP, y luego devuelve todas las coincidencias con sus posiciones en el texto.

Patrones regex para IPv4 e IPv6

Patron IPv4

Un regex basico de IPv4 coincide con cuatro grupos de 1 a 3 digitos separados por puntos:

\b(\d{1,3}\.){3}\d{1,3}\b

Este patron captura cadenas como 192.168.1.1, 10.0.0.255 y 0.0.0.0. Los anclajes de limite de palabra \b aseguran que la coincidencia no capture cadenas parciales incrustadas en numeros mas largos.

Un patron mas estricto valida el rango de octetos (0-255) dentro del propio regex:

\b(25[0-5]|2[0-4]\d|[01]?\d\d?)(\.(25[0-5]|2[0-4]\d|[01]?\d\d?)){3}\b

Esto rechaza cadenas como 999.999.999.999 a nivel de regex en lugar de hacerlo en un paso de validacion separado.

Patron IPv6

La extraccion de IPv6 es significativamente mas compleja debido a las multiples representaciones validas:

  • Forma completa: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
  • Comprimida: 2001:db8:85a3::8a2e:370:7334
  • Mixta (mapeada a IPv4): ::ffff:192.168.1.1
  • Loopback: ::1

Un regex completo de IPv6 debe contemplar todas estas variantes, haciendolo considerablemente mas largo que el patron de IPv4. La mayoria de las herramientas de extraccion utilizan una combinacion de patrones o un enfoque de multiples pasadas: primero extraen candidatos con un patron permisivo, luego validan la estructura en una segunda pasada.

Falsos positivos y como manejarlos

El mayor desafio en la extraccion de IP son los falsos positivos — cadenas que coinciden con el patron regex pero no son direcciones IP reales. Los infractores mas comunes incluyen:

  • Numeros de version de software: OpenSSL 1.1.1.4, Python 3.9.7.1, v2.0.0.1
  • Numeros de seccion de documentos: Seccion 1.2.3.4, Figura 10.0.0.1
  • Datos con muchos decimales: Lecturas de sensores, cifras financieras o coordenadas que casualmente tienen cuatro grupos separados por puntos
  • Coincidencias parciales: Cadenas numericas mas largas donde una subcadena coincide casualmente (por ejemplo, un numero de telefono o numero de serie)

Estrategias para reducir los falsos positivos:

  1. Validacion de rango: Despues de la extraccion, verificar que cada octeto este dentro del rango 0-255. Esto elimina coincidencias como 999.1.2.3.
  2. Analisis de contexto: Verificar los caracteres antes y despues de la coincidencia. Las direcciones IP en logs tipicamente siguen patrones predecibles (inicio de linea, despues de espacios en blanco, dentro de corchetes).
  3. Deduplicacion y frecuencia: En un archivo de log grande, las direcciones IP reales tienden a aparecer multiples veces. Un “numero de version” como 1.2.3.4 que aparece una sola vez probablemente no es una IP.
  4. Filtrado por rangos conocidos: Filtrar resultados contra rangos privados, de loopback y reservados conocidos, dependiendo de si espera verlos.

Casos de uso comunes

  • Analisis de logs: Extraer IPs de clientes de logs de acceso de servidores web (Apache, Nginx, IIS) para analisis de trafico, desglose geografico o deteccion de abuso
  • Respuesta a incidentes de seguridad: Extraer todas las direcciones IP de una alerta de seguridad, encabezado de correo o reporte de inteligencia de amenazas para verificar contra listas de bloqueo y bases de datos de reputacion
  • Auditoria de firewall: Extraer IPs de configuraciones de firewall exportadas para verificar que las reglas referencien direcciones validas y esperadas
  • Planificacion de migracion: Escanear archivos de configuracion, documentacion y scripts en busca de direcciones IP codificadas que necesiten actualizarse al migrar a una nueva red
  • Verificaciones de cumplimiento: Identificar direcciones IP en documentos, registros de chat o tickets de soporte que puedan indicar exposicion de datos o acceso no autorizado
  • Inventario de red: Extraer IPs de la salida de escaneos de descubrimiento, datos SNMP o tablas ARP para construir o actualizar un inventario de activos de red

Prueba estos ejemplos

Linea de log de Apache Válido

Una entrada estandar de log en formato combinado de Apache. El extractor identifica 203.0.113.42 como la direccion IP del cliente al inicio de la linea.

203.0.113.42 - frank [10/Oct/2024:13:55:36 -0700] "GET /index.html HTTP/1.1" 200 2326
Falso positivo de numero de version Válido

Las cadenas 1.2.3.4 y 3.1.0.5 coinciden con el patron regex de IPv4 (cuatro numeros separados por puntos) pero en realidad son numeros de version de software. Esto demuestra por que las IPs extraidas siempre deben validarse.

Upgraded OpenSSL from version 1.2.3.4 to 3.1.0.5 on the production servers.