Python拆分分隔符issu

2024-09-30 14:24:28 发布

您现在位置:Python中文网/ 问答频道 /正文

几个月前,我构建了一个小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    

并将生成的列表转换为这个。你知道吗

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


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

问题。

  • 有什么简单明了的方法可以用split解决这个问题吗?
  • 正则表达式是最好的方法吗?你知道吗
  • …其他解决方法?你知道吗

Tags: 文件数据方法脚本密码列表rootpassword
1条回答
网友
1楼 · 发布于 2024-09-30 14:24:28

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

要解析现有日志,可以使用regex ^([^,]*),([^,]*),([^,]*),(.*),(\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')

相关问题 更多 >