2014-05-25 89 views
1

我想使用rsyslog解析iptables日誌。除了mac地址以外,一切正常。正則表達式匹配IPTables src和dst 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-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