python - 用于解析完整 Iptables 日志 Python 的正则表达式代码

标签 python regex iptables python-iptables

我在 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')] 

日志字符串:

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

预期输出:

[('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 谢谢

最佳答案

如果您想要开始时的日期(其他 2 个日期并不像注释中那样最重要)并且您想要当前模式的匹配项,您可以使用 alternation :

^([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 中的值

Regex demo | Python demo

例如

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')]

关于python - 用于解析完整 Iptables 日志 Python 的正则表达式代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57403459/

相关文章:

python - Gensim Doc2Vec 异常 AttributeError : 'str' object has no attribute 'decode'

python - 使用spark SQL读取Parquet格式的不存在列

regex - 如何从 Visual Studio Code 中的多个文件中删除多个空格/换行符?

ios - 用于将特定 URL 与小写字母和破折号匹配的正则表达式

linux - iptables 端口转发 - 没有返回任何内容

docker - 无法在kubernetes中保留KUBE-FORWARD自定义iptables规则

python - "ValueError: The truth value of an array with more than one element is ambiguous"

Python 列表从后面选择

正则表达式 - 将 xml 标签后的第一个字母大写

linux - 具有 LAN 的 VPN 客户端上的 Iptables 设置