Wazuh自定义解码器正则无法解析含后缀空格的用户名
问题分析与解决方法
失败原因
你当前的正则表达式存在两个核心问题:
- 未转义特殊元字符:正则里的
[和]是定义字符集的特殊符号,不是匹配字面量的方括号。你的原正则[username:\s+(\S+)]实际是在匹配u、s、e、r、n、a、m、e、:、空格、任意非空白字符中的单个字符,完全没达到匹配[username: xxx]格式的目的。 - 匹配逻辑有局限:即便转义了方括号,
\S+只能匹配连续非空白字符,当用户名后带空格时,\S+会在空格处停止匹配,后续的\s*]虽然允许空格,但无法覆盖这种场景。
解决方法
正确的正则表达式
先转义方括号,再调整匹配逻辑,覆盖用户名前后有无空格的所有情况:
\[username:\s*(\S+)\s*\]
如果用户名本身允许包含空格(比如[username: hey its me]),可以把(\S+)换成([^\]]+),匹配到]之前的所有内容:
\[username:\s*([^\]]+)\s*\]
正则说明
\[和\]:转义方括号,匹配字面量的[和]\s*:匹配0个或多个空白字符,兼容用户名前/后有空格或无空格的场景(\S+):捕获连续非空白字符作为用户名;([^\]]+)则捕获除]外的所有字符,支持带空格的用户名
Wazuh解码器配置示例
在自定义解码器里这样配置即可生效:
<decoder name="custom_username_decoder"> <regex>\[username:\s*(\S+)\s*\]</regex> <order>username</order> </decoder>
如果支持带空格的用户名,就用:
<decoder name="custom_username_decoder"> <regex>\[username:\s*([^\]]+)\s*\]</regex> <order>username</order> </decoder>
内容的提问来源于stack exchange,提问作者Guitare
相关产品推荐
相关产品推荐

