You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则Look Ahead/Look Behind适配不同后瞻模式的问题求助

解决Trend Micro CEF日志中适配多格式的源IP/域名提取问题

核心正则方案

针对CEF日志中dst字段后内容不固定的问题,设计以下正则表达式,可同时匹配IPv4地址和合法域名,且不依赖后续固定字段:

dst=((?:\d{1,3}\.){3}\d{1,3}|(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,})(?:\s+\w+=|$)

正则逻辑拆解

  • dst=:精准定位目标字段的起始标识
  • 捕获组(提取核心内容):
    • (?:\d{1,3}\.){3}\d{1,3}:匹配标准IPv4地址格式
    • (?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}:匹配合法域名,支持带连字符的子域名及多后缀顶级域名
  • (?:\s+\w+=|$):匹配后续CEF字段(空格+字段名=)或日志结尾,作为终止边界,避免匹配多余内容

代码实现(避免AttributeError)

在调用捕获组前必须先判断匹配结果是否存在,彻底解决NoneType报错问题,以Python为例:

import re

# 示例CEF日志(完整/不完整格式均兼容)
cef_log1 = "CEF:0|Trend Micro|OfficeScan|11.0|530|Malware detected|High|src=10.0.0.5 dst=192.168.1.20 cs5=MD5:abc123 ..."
cef_log2 = "CEF:0|Trend Micro|OfficeScan|11.0|530|Malware detected|High|src=10.0.0.5 dst=malware-abc.example.org"

pattern = r'dst=((?:\d{1,3}\.){3}\d{1,3}|(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,})(?:\s+\w+=|$)'

# 处理日志1
match1 = re.search(pattern, cef_log1)
if match1:
    print(f"日志1提取结果:{match1.group(1)}")
else:
    print("日志1未匹配到有效源IP/域名")

# 处理日志2
match2 = re.search(pattern, cef_log2)
if match2:
    print(f"日志2提取结果:{match2.group(1)}")
else:
    print("日志2未匹配到有效源IP/域名")

补充说明

  • 若需要严格校验IPv4地址的合法性(比如排除256以上的数值),可将IP部分正则替换为:(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
  • 域名部分已覆盖绝大多数合法场景,若需适配特殊域名格式(如带下划线),可在字符集内添加_
  • 该方案完全不依赖dst字段后的固定字段,无论日志是否完整都能稳定匹配

内容的提问来源于stack exchange,提问作者OverflowStack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 17:07:36