簡體   English   中英

正則表達式代碼以解析完整的Iptables日志Python

[英]Regex code to parse full Iptables log Python

我在iptables日志上有這個字符串,我想解析全部內容。 我的實際正則表達式解析90%,但我需要所有內容日志。

我的python正則表達式:

regex = re.compile('([^ ]+)=([^ ]+)')

我也需要以下參數:

Aug 13 17:16:33 app-srv01 kernel: newConnection -

正則表達式結果:

[('IN', 'eth0'), ('MAC', '56:00:01:a1:5c:b7:fe:00:01:a1:5c:b7:08:00'), ('SRC', '91.103.125.80'), ('DST', '45.33.223.166'), ('LEN', '52'), ('TOS', '0x00'), ('PREC', '0x00'), ('TTL', '113'), ('ID', '21200'), ('PROTO', 'TCP'), ('SPT', '55743'), ('DPT', '445'), ('WINDOW', '8192'), ('RES', '0x00'), ('URGP', '0')] 

日志字符串:

8月13日17:16:33 app-srv01內核:newConnection-IN = eth0 OUT = MAC = 56:00:01:a1:5c:b7:fe:00:01:a1:5c:b7:08:00 SRC = 91.103.125.80 DST = 45.33.223.166 LEN = 52 TOS = 0x00 PREC = 0x00 TTL = 113 ID = 21200 DF PROTO = TCP SPT = 55743 DPT = 445 WINDOW = 8192 RES = 0x00 SYN URGP = 0

預期輸出:

[('Aug 13 17:16:33'), ('app-srv01 kernel:'), ('newConnection -'), 
('IN', 'eth0'), ('MAC', '56:00:01:a1:5c:b7:fe:00:01:a1:5c:b7:08:00'), ('SRC', 
'91.103.125.80'), ('DST', '45.33.223.166'), ('LEN', '52'), ('TOS', '0x00'), ('PREC', 
'0x00'), ('TTL', '113'), ('ID', '21200'), ('PROTO', 'TCP'), ('SPT', '55743'), ('DPT', 
'445'), ('WINDOW', '8192'), ('RES', '0x00'), ('URGP', '0')] 

有些可以幫助。 我正在使用python3謝謝

您可以使用re.split來做到這一點,在abc = def之前使用空格作為分隔符,然后第二次分割等號上的每個項目:

[x.split('=') for x in re.split(r' (?=\S+=)', s)]

如果您想在開始時輸入日期(另外2個不是注釋中最重要的日期),並且希望從當前模式中進行匹配,則可以使用交替顯示

^([a-zA-Z]+ \d{1,2} \d{1,2}:\d{1,2}:\d{1,2})|([^ ]+)=([^ ]+)
  • ^字符串的開頭
  • ([a-zA-Z]+ \\d{1,2} \\d{1,2}:\\d{1,2}:\\d{1,2})捕獲組1,匹配一個“喜歡的日期”圖案
  • | 要么
  • ([^ ]+)=([^ ]+)您的初始模式捕獲組2和組3中的值

正則表達式演示 | Python演示

例如

import re
regex = r"^([a-zA-Z]+ \d{1,2} \d{1,2}:\d{1,2}:\d{1,2})|([^ ]+)=([^ ]+)"     
test_str = "Aug 13 17:16:33 app-srv01 kernel: newConnection - IN=eth0 OUT= MAC=56:00:01:a1:5c:b7:fe:00:01:a1:5c:b7:08:00 SRC=91.103.125.80 DST=45.33.223.166 LEN=52 TOS=0x00 PREC=0x00 TTL=113 ID=21200 DF PROTO=TCP SPT=55743 DPT=445 WINDOW=8192 RES=0x00 SYN URGP=0"

print(list(map(lambda x: tuple(filter(None, x)), re.findall(regex, test_str))))

結果

[(''Aug 13 17:16:33',),('IN','eth0'),('MAC','56:00:01:a1:5c:b7:fe:00:01:a1: 5c:b7:08:00'),('SRC','91.103.125.80'),('DST','45.33.223.166'),('LEN','52'),('TOS',' 0x00'),('PREC','0x00'),('TTL','113'),('ID','21200'),('PROTO','TCP'),('SPT',' 55743'),('DPT','445'),('WINDOW','8192'),('RES','0x00'),('URGP','0')]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM