首页 > 解决方案 > 使用正则表达式解析 iptables 日志

问题描述

我有一个在 centos 7 服务器上运行的 iptables 访问日志。

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

使用这个正则表达式([^ ]+)=([^ ]+),我可以解析 IN 字符串之后的所有内容,但我需要Aug 13 17:16:33 app-srv01 newConnection更多的初学者内容([^ ]+)=([^ ]+)

请有人可以帮我完成这个正则表达式。

谢谢

标签: regexiptables

解决方案


您可以尝试从日志中获取任何条目并分组,例如,每个条目将是一个组,依此类推。正则表达式将是:

^[^ ]+|[^ ]+.你可以在这里测试它:https ://regex101.com/r/sb7dLJ/1

请记住,上面的正则表达式是 pcre (php) 正则表达式。我不确定完全相同的正则表达式是否真的可以在 python 中工作,因为据我所知,python 正则表达式的语法是不同的。

如果您想在 python 中使用它,不确定为什么从一开始就需要该正则表达式。在python中你可以使用这样的东西:

Python 2.7.10(它也适用于任何 python 2.7.x 版本和 3.x)

>>> logline = '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'

>>> logline.split(' ')[0:25]

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

不知道这是否是你要找的虽然......


推荐阅读