我想使用rsyslog解析iptables日志。除mac地址外,一切正常。
日志如下所示:
May 24 23:24:14 firewall kernel: [1199323.036594] FORWARD: IN=eth1 OUT=eth0 MAC=74:d4:35:18:3d:f0:9c:c7:a6:f1:5a:0f:08:00 SRC=1.2.3.4 DST=192.168.1.3 LEN=125 TOS=0x00 PREC=0x00 TTL=59 ID=20570 DF PROTO=TCP SPT=443 DPT=50485 WINDOW=60368 RES=0x00 ACK PSH URGP=0
“Mac = ...”包含目标mac(前六个),源mac(下一个6)和另外两个块。
我想将其拆分为源和目标mac。这个正则表达式匹配第一个mac:
(([0-9A-Fa-f][0-9A-Fa-f][-:]){5}[0-9A-Fa-f][0-9A-Fa-f])
但是我怎么能只匹配第二台mac?最后两个块可以忽略......
答案 0 :(得分:1)
将你已经写好的正则表达式加倍,但是使用插入的冒号做了想要的事情
([0-9A-Fa-f][0-9A-Fa-f][-:]){5}[0-9A-Fa-f][0-9A-Fa-f])[-:](([0-9A-Fa-f][0-9A-Fa-f][-:]){5}[0-9A-Fa-f][0-9A-Fa-f])
从此提取第三个捕获组以获取第二个MAC地址。
捕获组按其左侧括号的顺序编号。因此,第一组给出第一个MAC地址。第二组和第四组是重复的十六进制数字和分隔符。
如果仅应匹配第二个MAC地址,则更改重复表达式以使用非捕获括号(?:
和)
,并省略第一对括号以给出:
(?:[0-9A-Fa-f][0-9A-Fa-f][-:]){5}[0-9A-Fa-f][0-9A-Fa-f][-:]((?:[0-9A-Fa-f][0-9A-Fa-f][-:]){5}[0-9A-Fa-f][0-9A-Fa-f])
使用Notepad ++ 6.3.2
测试了这些正则表达式