【发布时间】:2020-03-08 08:21:08
【问题描述】:
我正在尝试从 Splunk payload_printable 字段(来源是 Suricata 日志)中提取域,并发现此正则表达式在大多数情况下都可以正常工作:
source="*suricata*" alert.signature="ET JA3*"
| rex field=payload_printable "(?<dom>[a-zA-Z0-9\-\_]{1,}\.[a-zA-Z0-9\-\_]{2,}\.[a-zA-Z0-9\-\_]{2,})"
| table payload_printable, dom
正则表达式为:
(?<dom>[a-zA-Z0-9\-\_]{1,}\.[a-zA-Z0-9\-\_]{2,}\.[a-zA-Z0-9\-\_]{2,})
例如,如果我的 printable_payload 如下所示:
...........^aO+.t....]......$.....mT*l.......&.,.+.0./.$.#.(.'.
...........=.<.5./.
...].........activity.windows.com..........
.................
.......................#...........
成功提取域“activity.windows.com”。现在,它不适用于这样的有效负载,因为正则表达式匹配与域不对应的另一部分:
...........^aO+]v;.~........:.Y.zORw._I..K>..&.,.+.0./.$.#.(.'.
...........=.<.5./.
...].........activity.windows.com..........
.................
.......................#...........
它提取“Y.zORw._I”。
另一个例子:
...........^h.'`.o2...
.y.k>..e.ef...]..8.G..&.,.+.0./.$.#.(.'.
...........=.<.5./.
...p.........arc.msn.com..........
.................
.......................#.........h2.http/1.1...................
我不知道该怎么做。感谢您的帮助。
【问题讨论】:
-
还要注意我的正则表达式可能不是最佳的,因为域可能是“abc.de”的形式,而它目前正在搜索“ab.cde.fg”或“ab”的形式.c_def.ghi.jk”。我不确定该怎么做,可能是结合了可选项目和负前瞻?
-
解析器如何知道域是 'activity.windows.com' 而不是 'Y.z0Rw._I'?域字段是否依赖于位置?它总是在特定字符之前还是之后?
-
从末尾附近删除 _ 可解决给定示例 (regex101.com/r/mmIPnn/1) 中非域的匹配问题。但是,对于所有有效域,您可能需要大量的正则表达式。举个例子:(regex101.com/r/7tXksJ/1)
标签: regex textfield splunk data-extraction