regex - 使用正则表达式解析 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
更多的初学者内容([^ ]+)=([^ ]+)
请有人可以帮我完成这个正则表达式。
谢谢
解决方案
您可以尝试从日志中获取任何条目并分组,例如,每个条目将是一个组,依此类推。正则表达式将是:
^[^ ]+|[^ ]+.
你可以在这里测试它: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']
>>>
不知道这是否是你要找的虽然......
推荐阅读
- python-3.x - 如何在 Python 3 中将列表拆分为多个不同的列表
- javascript - 使用正则表达式替换字符串中的所有图像标签
- typescript - 如何在函数声明中使用函数类型的 Typescript 类型别名
- api - 如何在 NetSuite REST API 中搜索多选字段?
- html - 页眉和页脚之间垂直居中的卡片
- python - 从一个 pyspark 数据帧中的两种不同时间戳格式获取日期
- azure-maps - 在本地运行 Azure Maps 教程时相对于 html 的数据文件位置 - atlas.io.read()
- sql - 根据用户访问 SQL 获取合约
- java - 流和过滤器未按预期工作
- javascript - 单击删除按钮时Vue改变输入字段的颜色