rsyslog регулярное выражение не станет жадным - PullRequest
0 голосов
/ 17 января 2019

Я пишу rsyslog-шаблон для фильтрации src и dst ip по событиям, но регулярное выражение возвращает только первое совпадение.

Пример события:

ulogd [20230]: id = "2002" severity = "info" sys = "SecureNet" sub = "packetfilter" name = "Пакет принят" action = "accept" fwrule = "89" initf = "eth1" outitf = "eth0" srcmac = "aa: bb: cc: dd: ee: 2c" dstmac = "00: 11: 22: ff: cc: aa" srcip = "10.10.1.250" dstip = "192.168.0.1" proto = "6" length = "52" tos = "0x00" prec = "0x00" ttl = "127" srcport = "64405" dstport = "1133" tcpflags = "ACK"

Template_syntax

%msg:R,ERE,0,FIELD:([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})+--end%

REGEX

([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})+

Я тестирую с: https://www.rsyslog.com/regex/

1 Ответ

0 голосов
/ 17 января 2019

Если вам нужно совпадать только с 2 ips, вы можете просто повторить шаблон регулярного выражения в 2 заменителях свойств, где второй указывает, что второй соответствующий ip-адрес должен быть взят.

Используя "..." для обозначения шаблона [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}, просто чтобы сделать его более читабельным, вы получите

%msg:R,ERE,0,FIELD,0:...--end%
%msg:R,ERE,0,FIELD,1:...--end%

или полностью:

$template outfmt,"%msg:R,ERE,0,FIELD,0:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}--end%  %msg:R,ERE,0,FIELD,1:[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}--end%\n"
...