【问题标题】:Extract Splunk domain from payload_printable field with regex使用正则表达式从 payload_printable 字段中提取 Splunk 域
【发布时间】: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


【解决方案1】:

此正则表达式将匹配域名并正确匹配您提供的两个示例:

"(?<dom>(?:[a-z0-9](?:[a-z0-9-_]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-_]{0,61}[a-z0-9])"

【讨论】:

  • 非常感谢您的帮助。这解决了许多情况,但不是全部。 ......^h.'`.o2... .yk>..e.ef...]..8.G..&.,.+.0 的示例。 /.$.#.(.'.............=.<.5. ........h2.http>
  • 我觉得我应该“忽略”有效载荷的开头,以确保正则表达式只获取有效载荷的相关部分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多