正则表达式匹配IPTables src和dst mac地址

时间:2014-05-25 18:47:03

标签: regex parsing logging iptables

我想使用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?最后两个块可以忽略......

1 个答案:

答案 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

测试了这些正则表达式