Script en BASH que analiza un archivo LOG y busca direcciones IP en el REGISTRO, cuando las detecta, debe guardar las Direcciones IP en una MATRIZ Asociativa (Solo funciona en versiones de BASH sobre 4). Además, debe grabar un registro con la fecha y hora en que aparece las direcciones IP.
Al finalizar el SCRIPT, debe mostrar un resumen con las DIRECCIONES IP y la cantidad de veces que aparecieron en el LOG.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/bin/bash # Nombre del archivo de registro archivo_log="tu_archivo_de_registro.log" # Inicializa la matriz asociativa declare -A conteo_ips # Lee cada línea del archivo de registro while read linea; do # Busca la dirección IP y la fecha/hora en la línea usando una expresión regular if [[ "$linea" =~ ^([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}).*([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}) ]]; then fecha_hora="${BASH_REMATCH[1]}" ip="${BASH_REMATCH[2]}" # Incrementa el conteo para la dirección IP en la matriz ((conteo_ips["$ip"]++)) # Guarda la fecha y hora en un archivo separado echo "$fecha_hora - $ip" >> fechas_ips.log fi done < "$archivo_log" # Imprime el resumen echo "Resumen de direcciones IP:" for ip in "${!conteo_ips[@]}"; do echo "$ip: ${conteo_ips[$ip]}" done |
Explicación del SCRIPT :
- Expresión regular:
- ^([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}): Captura la fecha y hora en formato YYYY-MM-DD HH:MM:SS.
- .*([0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}): Captura la dirección IP en cualquier parte de la línea.
- Variables:
- fecha_hora=»${BASH_REMATCH[1]}»: Almacena la fecha y hora capturadas.
- ip=»${BASH_REMATCH[2]}»: Almacena la dirección IP capturada.
- Registro de fechas y horas:
- echo «$fecha_hora – $ip» >> fechas_ips.log: Guarda la fecha, hora y dirección IP en un archivo llamado fechas_ips.log.
Consideraciones:
- Asegúrate de que el formato de la fecha y hora en tu archivo de registro coincida con el patrón que hemos definido.
- Puedes cambiar el nombre del archivo de registro y el archivo de salida según tus necesidades.