首页/网络/抓包与流量分析速查/Wireshark matches 正则匹配
Wireshark 技巧75 条

Wireshark matches 正则匹配

matches 支持 PCRE 风格正则,可做复杂模式匹配(多值、可选、大小写不敏感);比 contains 灵活但开销更大。

正则匹配在做什么

matches 对字符串字段做正则表达式匹配,支持可选值、分组、数量限定以及忽略大小写等标志,比包含判断灵活得多。典型用法是按后缀筛资源类型、按标识筛客户端、按多个候选值一次匹配。代价是开销更大:每个报文都要跑一遍正则引擎,在大文件上可能明显变慢。因此常见做法是先用端口或协议粗筛,再叠加正则条件。它只能用于字符串类型的字段。

基本信息

语法字段 matches "正则"
适用类型字符串字段与整条报文,数值字段不可用
常用标志忽略大小写、多行等,按具体实现支持情况使用
转义规则反斜杠需要按分析工具的转义规则书写
性能开销高于包含判断,建议先粗筛再叠加

典型使用场景

  • 按资源后缀筛选请求:一次匹配多种图片或静态资源类型
  • 按客户端标识识别脚本调用:忽略大小写匹配多种客户端名称
  • 按路径模式定位接口:匹配带路径参数的接口地址
  • 按多个候选值批量筛选:用竖线列出候选串一次匹配
  • 在明文内容里做模式检索:找出疑似凭证或令牌的格式

常用示例

常用示例
http.request.uri matches "\\.(png|jpe?g|gif)$"              # 静态资源后缀
http.user_agent matches "(?i)curl|python-requests"            # 脚本类客户端
http.request.uri matches "/api/v[0-9]+/"                      # 带版本号的接口
http.host matches "^(api|gw)\\.example\\.com$"                # 多个子域名
frame matches "(?i)select .* from"                            # 明文里检索语句模式

与相邻写法对比

写法能力适用场景
等号比较完全相等已知完整值,性能最好
包含判断子串匹配,区分大小写片段匹配且不需要模式组合
正则匹配支持分组、可选、忽略大小写模式复杂或需要一次匹配多个候选
集合判断离散取值枚举端口、状态码等有限的取值集合
组合使用正则加协议字段粗筛大文件上兼顾灵活性与速度
先在小样本上验证正则再放大到整个文件,写错时容易得到空结果而不报错。忽略大小写用行内标志最方便,比枚举大小写组合清晰得多。
复杂正则在大型抓包文件上可能扫描很慢,甚至让界面长时间无响应。遇到这种情况先加上端口或地址条件缩小范围,再叠加正则。

组合与排查

组合与排查
tcp.port == 443 && http.request.uri matches "/v[0-9]+/"    # 限定端口再匹配路径
http.request.uri matches "\\.(js|css)$" && http.response.code >= 400   # 静态资源报错
!http.host matches "^(api)\\."                             # 排除部分子域名

判读要点

  • 结果为空时先简化正则,从最简单的模式逐步加条件验证
  • 正则转义在不同环境里写法不同,命令行与图形界面可能都需要额外转义
  • 命中内容要看上下文,模式匹配成功不代表这就是问题所在
  • 性能敏感场景优先使用等号或包含判断,正则可作为最后补充

易错点

  • 在数值字段上使用正则匹配,属于无效用法,得不到结果
  • 转义层级写错导致模式匹配不到,排查空结果时容易忽略这一点
  • 在大文件上直接跑复杂正则,界面长时间无响应
  • 把正则命中的片段直接当成结论,缺少上下文核对
  • 忽略大小写需求却未加标志,导致部分客户端标识漏检

数据来源与参考

  • Wireshark User's Guide(matches)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌