我正在尝试使用Python中的regex来解析snort警报文件中的源、目的地( in和端口)和时间戳。示例如下:
03/09-14:10:43.323717 [**] [1:2008015:9] ET MALWARE User-Agent (Win95) [**] [Classification: A Network Trojan was detected] [Priority: 1] {TCP} 172.16.116.194:28692 -> 205.181.112.65:80我有一个IP的正则表达式,但由于IP中的端口,它不能正确触发。如何将端口与IP分离?
^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$发布于 2016-07-03 21:23:07
这将从整个行中提取必要的部分:
r'([0-9:./-]+)\s+.*?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5})\s+->\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5})'请参阅此示例:
In [22]: line = '03/09-14:10:43.323717 [**] [1:2008015:9] ET MALWARE User-Agent (Win95) [**] [Classification: A Network Trojan was detected] [Priority: 1] {TCP} 172.16.116.194:28692 -> 205.181.112.65:80'
In [23]: m = re.match(r'([0-9:./-]+)\s+.*?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5})\s+->\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5})', line)
In [24]: m.group(1)
Out[24]: '03/09-14:10:43.323717'
In [25]: m.group(2)
Out[25]: '172.16.116.194'
In [26]: m.group(3)
Out[26]: '28692'
In [27]: m.group(4)
Out[27]: '205.181.112.65'
In [28]: m.group(5)
Out[28]: '80'发布于 2016-07-03 21:16:50
您可以通过以下方式将它们划分为不同的捕获组:
(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5})同时失去^和$将使您能够在行的中间进行匹配,而不仅仅是整个行。
发布于 2016-07-03 21:17:14
如果我理解正确的话,您希望分别捕获I和端口,对吗?
在这种情况下,在正则表达式中使用“group”可以解决您的问题:
result = re.search(r'((\d{1,3}\.){3}\d{1,3}):(\d{1,5})', input)现在,result.group(1)包含IP地址并对端口执行result.group(3)操作。
https://stackoverflow.com/questions/38170253
复制相似问题