3. Wireshark 基础操作:捕获过滤器与显示过滤器、着色规则、追踪流功能

好,咱们进入实操环节。这一章我带你搞定 Wireshark 最核心的四个基础操作:捕获过滤器、显示过滤器、着色规则和追踪流。这四个东西你玩熟了,后面解密 HTTPS 才能看得清、抓得准。

说实话,我见过太多新手一上来就点「开始捕获」,结果抓了一堆乱七八糟的广播包,自己都看晕了。嗯,咱们别走弯路,一个一个来。

3.1 捕获过滤器:在数据进门之前就筛掉垃圾

捕获过滤器是在 Wireshark 开始抓包之前就设置好的。它的好处是——不想要的包压根不进内存。这对大流量环境特别重要。

我个人习惯在抓生产环境流量时,一定先用捕获过滤器把范围锁死。否则你抓 5 分钟,内存就爆了。

3.1.1 语法规则

捕获过滤器用的是 BPF(Berkeley Packet Filter) 语法,核心套路是:

协议 方向 类型 值

举个例子:

需求 捕获过滤器表达式
只抓 192.168.1.1 的流量 host 192.168.1.1
只抓 80 端口(HTTP) port 80
只抓 443 端口(HTTPS) port 443
抓某个网段的流量 net 10.0.0.0/8
排除某个 IP not host 192.168.1.100
组合条件(且) host 192.168.1.1 and port 443
我的小技巧: 在 Wireshark 主界面点击「捕获」→「捕获过滤器」,可以保存常用的过滤器模板。我一般存几个:https_only、dns_only、my_server,下次直接选,不用重新敲。

3.1.2 实战场景

假设你要分析某台 Web 服务器的 HTTPS 流量。你只想抓 443 端口,而且只关心一个客户端 IP。我会这么写:

host 10.0.0.5 and port 443

这样 Wireshark 从网卡驱动层就开始过滤,性能开销极小。我曾经在千兆链路上这么干过,CPU 占用率不到 10%。

注意: 捕获过滤器一旦设置,没被匹配的包就彻底丢了。你事后想找回来?没门。所以不确定的时候,宁可放宽条件,用显示过滤器来二次筛选。

3.2 显示过滤器:在数据进门之后精准定位

显示过滤器是 Wireshark 的灵魂。它不影响已经抓到的包,只是帮你从一堆数据里挑出你想要的。

说白了,捕获过滤器是「保安」,显示过滤器是「检索员」。保安在门口拦人,检索员在档案室里翻资料。

3.2.1 常用表达式

显示过滤器的语法比捕获过滤器丰富得多,因为它能深入到协议字段级别。下面是我日常最常用的一些:

需求 显示过滤器表达式
只看 HTTP 流量 http
只看 HTTPS(TLS) tls 或 ssl
只看某个 IP 的流量 ip.addr == 192.168.1.1
只看某个 TCP 端口 tcp.port == 443
只看某个 HTTP 请求方法 http.request.method == "GET"
只看 TLS 握手包 tls.handshake.type == 1
组合条件(且) ip.addr == 10.0.0.5 and tcp.port == 443
组合条件(或) http or dns
核心区别:
  • 捕获过滤器:host 10.0.0.1(BPF 语法,无等号)
  • 显示过滤器:ip.addr == 10.0.0.1(Wireshark 语法,有等号)
千万别搞混了,否则你写半天没效果。

3.2.2 我的排错经验

有一次线上 HTTPS 连接超时,我抓了包,用 tls.handshake.type == 1 只看 Client Hello,发现客户端发出去的 SNI 字段是空的。嗯,问题找到了——是应用层代码忘了配 SNI。你看,一个过滤器就省了半小时排查时间。

3.3 着色规则:一眼看出异常

Wireshark 默认会给不同协议涂上颜色。比如 HTTP 是绿色,TCP 是紫色,DNS 是蓝色。但你也可以自定义。

我个人习惯把错误包、重传包、TLS 握手包单独着色。这样在包列表里扫一眼,就能发现异常。

3.3.1 默认着色规则速查

颜色 含义
浅紫色 TCP 流量
浅蓝色 UDP 流量
绿色 HTTP 流量
黄色 DNS 流量
红色 TCP 重传或错误
黑色 TCP 乱序或丢包

3.3.2 自定义着色规则

我建议你加一条:把 TLS 握手包标成亮橙色。操作路径:

  1. 点击「视图」→「着色规则」
  2. 点击「新建」
  3. 名称填:TLS Handshake
  4. 过滤器填:tls.handshake.type
  5. 选一个亮橙色背景

这样一来,HTTPS 握手的几个包在列表里一目了然。我在讲课时经常用这个功能,学生一眼就能看出「哦,原来 TLS 握手就这几个包」。

3.4 追踪流功能:还原完整对话

这个功能我太喜欢了。它能把你抓到的零散包拼成一次完整的对话。比如 HTTP 请求和响应,原本分散在几十个包里,点一下「追踪流」,就能看到完整的请求头和响应体。

3.4.1 怎么用

  1. 在包列表里选中任意一个 HTTP 或 TCP 包
  2. 右键 → 「追踪流」 → 「TCP 流」或「HTTP 流」
  3. 弹出一个新窗口,显示完整的对话内容

对于 HTTPS,因为内容是加密的,追踪流只能看到乱码。但别急——等我们后面章节导入了密钥,就能看到明文了。

3.4.2 实际案例

我曾经帮一个同事排查 API 调用失败的问题。他用 Wireshark 抓了包,但看不懂。我过去点了一下「追踪流」→「HTTP 流」,直接看到了服务器返回的 500 错误和错误堆栈。前后不到 10 秒。

小提示: 追踪流窗口里可以切换「显示数据为」的格式。我一般用「ASCII」看 HTTP 头部,用「Hex Dump」看二进制协议。你根据场景选就行。

3.5 本章知识体系总览

下面这张图帮你理清这四个功能的关系和适用场景:

Wireshark 基础操作知识体系 Wireshark 基础操作 捕获过滤器 显示过滤器 着色规则 追踪流 BPF 语法 抓包前过滤 节省内存和CPU 不可恢复 Wireshark 语法 抓包后过滤 支持协议字段 可随时修改 视觉辅助 默认+自定义 快速识别异常 支持过滤表达式 对话还原 TCP/UDP/HTTP流 查看完整请求响应 HTTPS需密钥

3.6 避坑指南

最后分享几个我踩过的坑:

  • 捕获过滤器写错了不会报错——Wireshark 只是默默不抓包。你盯着空列表发呆半天,不如检查一下过滤器语法。
  • 显示过滤器区分大小写——HTTP 和 http 不一样。我建议全用小写。
  • 着色规则优先级——多条规则匹配同一个包时,排在上面的生效。所以把重要的规则放前面。
  • 追踪流别乱点——如果你抓了 10 万包,点「追踪流」可能会卡几秒。先加个显示过滤器缩小范围再点。

好了,这四个基础操作你掌握了吗?后面章节我们会频繁用到它们。尤其是显示过滤器和追踪流,在解密 HTTPS 时几乎是每步必用。