Python拆分分隔符问题

时间:2015-01-06 23:47:20

标签: python regex split delimiter logfiles

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

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

  • 日期/时间戳
  • 发生攻击的IP地址
  • 尝试用户名
  • 尝试密码
  • 成功/失败代码


示例:

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],
然后接受剩下的密码,但是,
至少可以说不是很干净也不准确 如果攻击者使用用户名中的分隔符,我将返回原点
问题。

  • 是否有任何干净简便的方法可以使用拆分来解决这个问题?
  • 正则表达式会是最好的方式吗?
  • ......解决这个问题的其他方法?

1 个答案:

答案 0 :(得分: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')