Filtrar logs de una web con un script de bash

Foro sobre GNU Linux
gbeltran
Mensajes: 344
Registrado: 13 May 2023, 01:15
Ubicación: Valencia - España
Contactar:

Filtrar logs de una web con un script de bash

Mensaje por gbeltran »

filtrar_log.jpg
filtrar_log.jpg (140.08 KiB) Visto 137 veces
Os lo dejo publicado aquí: https://indaga.net/como-filtrar-direcci ... solo-bash/

Y aquí el script:

Código: Seleccionar todo

#!/bin/bash

# ==============================================================================
# Script de filtrado de IPs y rangos en logs de acceso
# Publicado en Indaga.net
# ==============================================================================

# Validar que se introduzcan los argumentos necesarios
if [ "$#" -ne 2 ]; then
    echo "Error: Argumentos insuficientes."
    echo "Uso: $0 <log_origen> <log_destino>"
    exit 1
fi

LOG_ORIGEN="$1"
LOG_DESTINO="$2"

# Verificar la existencia del archivo de origen
if [ ! -f "$LOG_ORIGEN" ]; then
    echo "Error: El archivo '$LOG_ORIGEN' no existe."
    exit 1
fi

# Definición de reglas y rangos a excluir (formato Regex)
PATRONES=(
    "192\.168\.1\."           # Subred 192.168.1.0/24
    "10\.0\."                  # Subred 10.0.0.0/16
    "172\.16\.0\.[0-9]\b"      # IPs del 172.16.0.0 al 172.16.0.9
    "172\.16\.0\.1[0-9]\b"     # IPs del 172.16.0.10 al 172.16.0.19
    "203\.0\.113\.45"          # Dirección IP única estática
)

# Unir el array de patrones utilizando la barra vertical (|) como separador OR
PATRON_REGEX=$(IFS='|'; echo "${PATRONES[*]}")

# Ejecución del filtrado con grep
grep -v -E "$PATRON_REGEX" "$LOG_ORIGEN" > "$LOG_DESTINO"
RESULTADO=$?

# Confirmación de salida
# grep devuelve: 0 = hubo líneas tras filtrar, 1 = ninguna línea coincidió
# (log resultante vacío, no es un error), 2 = error real (lectura, etc.)
if [ "$RESULTADO" -le 1 ]; then
    echo "Filtrado completado con éxito."
    echo "Archivo limpio guardado en: $LOG_DESTINO"
else
    echo "Ocurrió un error al procesar el archivo."
fi
Responder