Назад | Перейти на главную страницу

Как заполнить базу результатов iptable в определенных полях и просмотреть ее с помощью команды tail?

У меня есть этот журнал:

Jan  26 01:05:47 server54 kernel: [41s58.6w4335] INPUT:DROP: IN=eth4 OUT= MAC=d3:ss:43:23:23:43 SRC=1.1.1.1 DST=127.0.0.0 LEN=40 TOS=0x00 PREC=0x00 TTL=254 ID=65259 PROTO=TCP SPT=53252 DPT=22 WINDOW=14600 RES=0x00 RST URGP=0

И я хочу настроить результаты так, чтобы они отображали только часть SRC и DST со временем, показывая сначала что-то вроде этого:

 Jan  26 01:05:47 SRC=1.1.1.1 DST=127.0.0.0

Я дошел до:

tail -f -n 2 /var/log/kern.log | grep 'INPUT'

Но если я добавлю второй grep, это не сработает! и я хочу видеть результат в реальном времени, поэтому хвост должен быть там.

Принятый ответ правильный, но если вы хотите сделать его более интересным, вы можете сделать это:

red=$(tput bold;tput setaf 1)
yellow=$(tput bold;tput setaf 3)
green=$(tput bold;tput setaf 2)
magenta=$(tput bold;tput setaf 5)
normal=$(tput sgr0)

tail -f -n 30 /var/log/kern.log | grep "DROP"|sed -E "s/^([0-9a-zA-Z: ]+)([0-9]{2}:[0-9]{2}:[0-9]{2}).*(SRC=)([0-9.:]+).*$/$yellow\1$red \2$green \3$magenta\4/g"

Это раскрасит вывод, и не забудьте использовать двойная цитата вместо того одиночная цитата.

Попробуйте, если это сработает:

sed -E 's/^([0-9a-zA-Z: ]*[0-9]{2}:[0-9]{2}:[0-9]{2}).*(SRC=[0-9.:]+).*(DST=[0-9.:]+).*$/\1 \2 \3/g'

Это оставляет меня с Jan 26 01:05:47 SRC=1.1.1.1 DST=127.0.0.0

Объяснение регулярного выражения:
^ начало строки
( начать группу захвата \ 1
[0-9a-zA-Z: ]* ноль или более букв / двоеточие / пробел
[0-9]{2}:[0-9]{2}:[0-9]{2} дата (nn: nn: nn)
) конец группы захвата \ 1
.* все персонажи
( начать группу захвата \ 2
SRC=[0-9.:]+ SRC = за которым следует одно или несколько чисел / двоеточие / точка
) конец группы захвата \ 2
.* любой персонаж
( начать группу захвата \ 3
DST=[0-9.:]+ DST = за которым следует одно или несколько чисел / двоеточие / точка
) конец группы захвата \ 3
.* любой персонаж
$ конец линии

Тогда мы просто используем sed с участием -E (расширенное регулярное выражение) для замены каждой строки в файле тремя группами захвата (\ 1 \ 2 \ 3)
Вероятно, для этого есть более короткое регулярное выражение.