Estou trabalhando em um script onde receberei entradas como hora e nome da pasta, preciso encontrar um arquivo (snort.log.*) que esteja nesse intervalo de tempo que meu usuário inserir (ele verá o arquivo de alerta em negrito registro de data e hora e inserção dessa hora para o arquivo snort.log.** real que contém os detalhes do ataque e o arquivo de alerta contém apenas os metadados) aqui está um exemplo de diretório
[jump1@widids01 snort-3]#ls -ltr | cauda -6 -rwxr-x--- 1 bufo bufo 301731 2 de fevereiro 18:18 snort.log.1517557015 -rwxr-x--- 1 bufo bufo 5720853 5 de fevereiro 21:11 snort.log.1517563475 -rwxr-x--- 1 bufo bufo 3566073 7 de fevereiro 16:00 snort.log.1517832965 -rwxr-x--- 1 snort snort 18999 7 de fevereiro 20:46 snort.log.1518003111 -rwxr-x--- 1 snort snort 20705098 15 de fevereiro 19:00 snort.log.1518004113 -rw------- 1 bufar bufar 357271 15 de fevereiro 22:22 bufar.log.1518688923 -rwxr-x--- 1 bufo bufo 50782147 15 de fevereiro 22:22 alerta [jump1@widids01 snort-3]# alerta tail -3 15/02-18:22:02.204655 [1:2403380:38412] ET CINS Inteligência de ameaças ativas Fraca reputação IP TCP grupo 41 [Classificação: Ataque diverso] [Prioridade: 2] {TCP} 15/02-22:22:03.335107 [1:2403408:38412] ET CINS Inteligência de ameaças ativas Fraca reputação IP TCP grupo 55 [Classificação: Ataque diverso] [Prioridade: 2] {TCP} 15/02-22:22:03.335107 [1:2403408:38412] ET CINS Inteligência de ameaças ativas Fraca reputação IP TCP grupo 55 [Classificação: Ataque diverso] [Prioridade: 2] {TCP}
Estou enfrentando os problemas aqui, snort.log.[epoch]
ou seja [epoch]
, o tempo de geração do arquivo, portanto, se o usuário inserir
caso de teste1:
time:2015-02-15-22:28:02
como fornecer a ele a correspondência snort.log.file
de onde os dados do ataque contêm
caso de teste2:
time:2015-02-15-18:22:02
como fornecer a ele a correspondência snort.log.file
de onde os dados do ataque contêm
Eu tentei com find . -newermt "2018-02-15 18:38:00" ! -newermt "2018-02-15 18:39:00"
não estou obtendo resultado adequado.
Responder1
Supondo que você tenha uma entrada como esta:
time="time:2015-02-15-18:22:02"
Então você pode convertê-lo para um carimbo de data/hora Unix (segundos desde a época) e salvá-lo em uma variável timestamp
com:
time=$(date -d$(<<<"$time" sed 's/time:\(.*\)-/\1T/') +%s)
Eu uso sed
aqui para me livrar do time:
prefixo e alterar os dois pontos entre data e hora para T
(ISO 8601), date
é então usado para converter o carimbo de data/hora em segundos desde a época.
Dependendo do que esse carimbo de data/hora representa, você pode usar find
para gerar o nome do arquivo do log:
se o nome do arquivo já contém o carimbo de data/hora, você pode usar
snort.log.$time
diretamentese for a hora de modificação do arquivo:
find . -type f -name "*snort.log.*" -newermt @$(($time-1)) ! -newermt @$time
Isso encontrará todos os arquivos de log com um tempo de modificação entre
time
-1 segundo etime
.se você precisar encontrar o arquivo de log mais antigo após o carimbo de data/hora fornecido, poderá usar
sort
ehead
:find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -print0 | sort -z | head -zn1
se você precisar encontrar o arquivo de log que (de alguma forma)contémo carimbo de data/hora fornecido, use
grep
:grep -l $time *
Se você tiver muitos arquivos de log longos, talvez combine isso com
find
e/ouparallel
para torná-lo mais rápido, por exemplo:find . -type f -name "*snort.log.*" -newermt @$(($time-1)) -exec grep -l $time {} +