Автоматически добавлять уникальные IP-адреса в текстовый файл - PullRequest
0 голосов
/ 03 июня 2019

В настоящее время я пытаюсь автоматически добавлять уникальные IP-адреса, которые атакуют мою артиллерийскую приманку, в текстовый файл.

В этом сценарии я обнаружил, что отслеживаю изменения в системном журнале (где артиллерия помещает новыежурналы атак) и запуск команды grep для поиска всех уникальных IP-адресов в системном журнале при каждом его изменении.

Теперь мне нужно направить вывод команды grep в «что-то», которое будет добавлять только уникальные IP-адреса.которые еще не находятся в текстовом файле, к которому они должны быть добавлены.

#!/bin/bash
import inotify-tools

inotifywait -r -m -e modify /var/log/syslog | 
while read path _ file; do
      grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" /var/log/syslog | sort | uniq | ??????

done

Я просто ищу команду, к которой нужно передать, чтобы добавить уникальные IP-адреса в текстовый файл,но только если они не существуют в текстовом файле уже.Спасибо

1 Ответ

0 голосов
/ 03 июня 2019
inotifywait -r -m -e modify /var/log/syslog | while read path _ file; do
        grep -E -o "([0-9]{1,3}[.]){3}[0-9]{1,3}" /var/log/syslog |
        sort | uniq | ??????

Вы повторно сканируете все значение /var/log/syslog каждый раз, когда оно изменяется.O (N²) сильно вас укусит.

Выключите tail -f /var/log/syslog при запуске и при попытках создания inotifywait, или, если вы используете systemd, вы можете просто сделать один journalctl -f.передать вывод через, например, этот lex:

%option main nodefault
IPBYTE  [0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]
%%
{IPBYTE}("."{IPBYTE}){3} puts(yytext);
[0-9.]+
[^0-9]{0,8192}

, чтобы извлечь все адреса ipv4, передать результаты через один

awk 'ARGIND==1 { seen[$0]++ } !seen[$0]++' known.ips - >> known.ips

, чтобы добавить только ранее невидимые адреса.

То есть, когда systemd догоняет с момента загрузки и остается в актуальном состоянии, это

(journalctl -b; journalctl -f) | extractip4s | that.awk known.ips - >>known.ips

, в противном случае замену journalctl на хвост -f и создание цикла inotifywait -me, запускающего больше, в подоболочке.

...