Estoy trabajando en un script donde recibiré entradas como hora y nombre de carpeta. Necesito encontrar un archivo (snort.log.*) que se encuentre en ese rango de tiempo que ingresa mi usuario (verá el archivo de alerta en negrita). marca de tiempo e ingresando esa hora para el archivo snort.log.** real que contiene los detalles del ataque y el archivo de alerta contiene solo los metadatos) aquí hay un ejemplo de directorio
[jump1@widids01 snort-3]# ls -ltr | cola -6 -rwxr-x--- 1 resoplido resoplido 301731 2 de febrero 18:18 snort.log.1517557015 -rwxr-x--- 1 resoplido resoplido 5720853 5 de febrero 21:11 snort.log.1517563475 -rwxr-x--- 1 resoplido resoplido 3566073 7 de febrero 16:00 snort.log.1517832965 -rwxr-x--- 1 resoplido snort 18999 7 de febrero 20:46 snort.log.1518003111 -rwxr-x--- 1 resoplido resoplido 20705098 15 de febrero 19:00 snort.log.1518004113 -rw------- 1 resoplido resoplido 357271 15 de febrero 22:22 snort.log.1518688923 -rwxr-x--- 1 resoplido resoplido 50782147 15 de febrero 22:22 alerta [jump1@widids01 snort-3]# cola -3 alerta 15/02-18:22:02.204655 [1:2403380:38412] ET CINS Active Threat Intelligence Mala reputación IP TCP grupo 41 [Clasificación: Ataque varios] [Prioridad: 2] {TCP} 15/02-22:22:03.335107 [1:2403408:38412] ET CINS Active Threat Intelligence Mala reputación IP TCP grupo 55 [Clasificación: Ataque varios] [Prioridad: 2] {TCP} 15/02-22:22:03.335107 [1:2403408:38412] ET CINS Active Threat Intelligence Mala reputación IP TCP grupo 55 [Clasificación: Ataque varios] [Prioridad: 2] {TCP}
Estoy enfrentando problemas aquí, snort.log.[epoch]
es decir [epoch]
, el tiempo de generación del archivo, por lo que si el usuario ingresa
caso de prueba1:
time:2015-02-15-22:28:02
cómo darle la coincidencia snort.log.file
de dónde contienen los datos del ataque
caso de prueba2:
time:2015-02-15-18:22:02
cómo darle la coincidencia snort.log.file
de dónde contienen los datos del ataque
Lo intenté y find . -newermt "2018-02-15 18:38:00" ! -newermt "2018-02-15 18:39:00"
no obtengo el resultado adecuado.
Respuesta1
Suponiendo que tenga una entrada como esta:
time="time:2015-02-15-18:22:02"
Luego puedes convertirlo a una marca de tiempo Unix (segundos desde la época) y guardarlo en una variable timestamp
con:
time=$(date -d$(<<<"$time" sed 's/time:\(.*\)-/\1T/') +%s)
Utilizo sed
aquí para deshacerme del time:
prefijo y cambiar los dos puntos entre fecha y hora a T
(ISO 8601), date
luego se usa para convertir la marca de tiempo a segundos desde la época.
Dependiendo de lo que represente esta marca de tiempo, puede usarla find
para generar el nombre de archivo del registro:
Si el nombre del archivo ya contiene la marca de tiempo, puede usarla
snort.log.$time
directamente.si es la hora de modificación del archivo:
find . -type f -name "*snort.log.*" -newermt @$(($time-1)) ! -newermt @$time
Esto encontrará todos los archivos de registro con un tiempo de modificación entre
time
-1 segundo ytime
.Si necesita encontrar el archivo de registro más antiguo posterior a la marca de tiempo dada, puede usar
sort
yhead
:find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -print0 | sort -z | head -zn1
si necesita encontrar el archivo de registro que (de cualquier manera)contienela marca de tiempo dada, use
grep
:grep -l $time *
Si tiene muchos archivos de registro largos, puede combinarlos con
find
y/oparallel
hacerlo más rápido, por ejemplo:find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -exec grep -l $time {} +