Python 分隔符问题

Python split delimiter issue

我几个月前构建了一个小的 python 脚本,它从我的蜜罐日志中收集一些非常基本的统计数据。我发现这个脚本有问题,我自己也找不到答案。

该脚本将从攻击中读取日志文件。 日志文件每行包含五条数据。


示例:

2014-12-24 13:37:00,1.2.3.4,root,password,0    

五条数据之间用','隔开。
所以我使用','作为分隔符将行分成一个列表,就像这样。

['2014-12-24 13:37:00', '1.2.3.4', 'root', 'password', '0']    

我可以从中获取我需要的数据。

这个问题,我相信你们中的一些人已经想通了,
当尝试的密码中存在定界符时发生,
在这种情况下 H4ck3r,h4cker,2015

日志文件最终看起来像这样

2015-01-02 01:44:38,2.3.4.5,root,H4ck3r,,h4cker,,2015,0    

并在 slpit 之后将结果列表变成这个。

['2015-01-02 01:44:38', '2.3.4.5', 'root', 'H4ck3r', '', 'h4cker', '', '2015', '0']    


我首先想到的解决方法是删除 [0:3] 和 [-1],
然后接受剩下的密码但是,
至少可以说不是很干净也不准确。
如果攻击者在用户名中使用定界符,我会回到原点。

问题。

正如 mgilson 已经指出的,您应该更改日志文件的格式(如果可能)。

要解析现有日志,您可以使用正则表达式^([^,]*),([^,]*),([^,]*),(.*),(\d+)\s*$。这会捕获组 1 中的时间戳、组 2 中的 ip 等等。

regex101 demo.

>>> pattern= r'^([^,]*),([^,]*),([^,]*),(.*),(\d+)\s*$'
>>> string= 'time,ip,user,H4ck3r,,h4cker,,2015 ,1'
>>> match= re.match(pattern, string)
>>> print match.groups()
('time', 'ip', 'user', 'H4ck3r,,h4cker,,2015 ', '1')