我有一个来自防火墙的日志,我认为这是一种可怕的格式,但是我实际上想要提取的信息是相对一致的。一个例子(尽管我已经删除了所有隐私方面的特定信息)是:
<46>Nov7 04:33:25 FirewallDeviceName [Some identifier from the firewall, can contain spaces]: in:[InterfaceName] out:[InterfaceName], connection-state:new src-mac [Mac-ID], proto UDP, [SourceIP]:[SourcePort]->[Dst-IP]:[Dst-Port], len 32我想从中提取的只是源和目标IP地址和端口,也可能是输入和输出接口,也许是协议。
我认为最好的方法是将.SubString(pos,length)和.IndexOf(char)与RegEx组合起来,以匹配每个字符串所需的位。
例如:
分隔开。
我不知道的一点是如何在RegEx (获取字符位置)或SubString函数中使用IndexOf,或者即使这是可能的。
这里有任何帮助或建议。
我最初想要写的是一个解析器来解析我生成的一些文本文件日志(这些日志是从我为我们的新防火墙编写的syslog侦听器生成的,用来计算输出的样子).最终,解析器将被内置到侦听器本身中,以便我想要的位直接记录到SQL数据库,但是我可以这样做。我不确定的是带有Regex的解析器。
非常感谢。
发布于 2022-11-07 16:46:20
基于给出的示例文本,RegEx
, (\[SourceIP\]:\[SourcePort\])->(\[Dst-IP\]:\[Dst-Port\]),将源和目的地捕获到$1和$2中。然而,我怀疑它们实际上是带有圆点的数字,而不是方括号内的单词。因此,一个更好的表达方式可能是
, ([\d.]+:\d+)->([\d.]+:\d+),这个RegEx与proto UDP, 1.2.3.4:567->8.9.0:123, len 32中的两个部分相匹配。
https://stackoverflow.com/questions/74349873
复制相似问题