Извлеките домен Splunk из поля payload_printable с помощью регулярного выражения - PullRequest
0 голосов
/ 08 марта 2020

Я пытаюсь извлечь домен из поля 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...................

Я не знаю, как это сделать. Спасибо за вашу помощь.

1 Ответ

1 голос
/ 11 марта 2020

Это регулярное выражение будет соответствовать доменным именам и правильно соответствует двум приведенным вами примерам:

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