3. Wireshark基础操作:捕获过滤器与显示过滤器、着色规则、追踪TCP流、统计工具使用

好,咱们进入第三讲。这一讲全是实打实的操作基本功。你想想看,抓包工具拿到手,第一件事是什么?不是直接点开始,而是先想清楚:我要抓什么,不要抓什么。Wireshark 给了我们两把筛子——捕获过滤器和显示过滤器。很多人混着用,其实它们分工完全不同。

3.1 捕获过滤器 vs 显示过滤器

捕获过滤器,是在数据包进内存之前就把它扔掉。说白了,它是个看门大爷,只放行符合规则的车进小区。显示过滤器呢,是数据已经全进来了,你再从里面挑出你关心的。一个是事前筛选,一个是事后检索。

核心区别一句话:捕获过滤器用 BPF 语法,丢掉的包再也找不回来;显示过滤器用 Wireshark 自己的表达式语言,只是隐藏,数据还在。

我个人习惯是:在抓包前用捕获过滤器把明显不相关的流量过滤掉,比如我只想看 HTTPS,那就只抓 443 端口。这样文件小,性能也好。我曾经在客户现场抓一个千兆链路的故障,没加捕获过滤器,结果文件 5 分钟就飙到 2GB,Wireshark 直接卡死。嗯,从那以后我养成了习惯——先过滤,再抓包。

3.1.1 捕获过滤器常用写法

捕获过滤器用的是 BPF(Berkeley Packet Filter)语法。你可以在 Wireshark 的 Capture Options 里写,也可以在命令行用 tcpdump 写,语法完全一样。

场景 BPF 表达式 说明
只抓 TCP 流量 tcp 排除 UDP、ICMP 等
抓特定端口 tcp port 443 只抓 HTTPS
抓主机通信 host 192.168.1.1 双向流量
抓子网 net 192.168.1.0/24 整个网段
组合条件 tcp and host 10.0.0.1 and port 80 逻辑与

小技巧:捕获过滤器不支持按应用层协议过滤,比如你不能写 http 或 tls。因为 BPF 工作在链路层和网络层,看不到上层。想过滤 HTTP?用显示过滤器。

3.1.2 显示过滤器常用写法

显示过滤器才是 Wireshark 真正的杀手锏。它的表达能力比 BPF 强太多了。你可以按协议字段、值、甚至字符串匹配来过滤。

# 只显示 TLS 流量
tls

# 显示 TLS 1.2 或 1.3 的握手包
tls.handshake.type == 1

# 显示特定 IP 的 HTTP 请求
http and ip.addr == 192.168.1.100

# 显示包含 "password" 的 HTTP POST 数据
http.request.method == "POST" and http contains "password"

# 显示 TCP 重传包
tcp.analysis.retransmission

我建议你记住几个最常用的:tls、http、dns、ip.addr、tcp.port。剩下的可以边用边查,Wireshark 的自动补全和帮助窗口做得很好。

注意:显示过滤器里用 == 表示等于,用 contains 表示包含子串,用 matches 表示正则匹配。别把 BPF 的语法混进来,比如写 host 1.1.1.1 在显示过滤器里是无效的。

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

Wireshark 默认会给不同协议涂上颜色。比如 TCP 是浅蓝,UDP 是浅绿,HTTP 是深蓝。但真正有用的是你自己定义的着色规则。

我个人习惯把以下几类包标出来:

  • TCP 重传:标成红色,一眼就能看到网络抖动
  • TCP 零窗口:标成橙色,说明接收端处理不过来
  • TLS 握手:标成紫色,方便定位加密协商过程
  • HTTP 错误码:标成黄色,快速发现服务端异常

设置路径:View → Coloring Rules。你可以新建规则,写显示过滤器表达式,然后选颜色。我建议你把着色规则导出保存,换电脑时直接导入,省得重新配。

我的经验:在分析 TLS 问题时,我会专门建一条规则:tls.handshake.type == 1 标成紫色背景。这样在茫茫包海里,Client Hello 一眼就能跳出来。

3.3 追踪 TCP 流:还原对话

这个功能太实用了。你抓了一堆包,想看某个 TCP 连接里到底传了什么内容。不用一个个包去翻,Wireshark 可以帮你把整个流的内容拼起来。

操作很简单:右键点击任意一个 TCP 包 → Follow → TCP Stream。然后会弹出一个窗口,里面就是完整的双向数据,客户端发的用红色标,服务端回的用蓝色标。

对于 HTTP 来说,这基本等于还原了整个请求和响应。对于 TLS 来说,你看到的会是加密后的乱码——除非你有私钥可以解密。

实用场景:我曾经帮一个同事排查 API 调用问题。他用 Postman 调接口正常,但代码调就报错。我抓包后用 Follow TCP Stream 一看,发现代码里多传了一个换行符,服务端解析失败。这种问题看日志根本看不出来,但看原始流一目了然。

3.4 统计工具:从数据中找规律

Wireshark 的统计功能经常被忽略,但它是做性能分析和故障排查的利器。我常用的几个:

3.4.1 Protocol Hierarchy

路径:Statistics → Protocol Hierarchy。它会列出一个树状图,显示每种协议占了多少流量。比如你发现 ARP 占了 30%,那八成是网络里有广播风暴。

3.4.2 Conversations

路径:Statistics → Conversations。它会列出所有通信对(IP 对、TCP 对、UDP 对),并显示每个对话的包数、字节数、持续时间。我常用它来找「谁在跟谁说话,说了多少话」。

3.4.3 IO Graph

路径:Statistics → IO Graph。这是我最喜欢的工具。它可以画出一条时间-流量曲线。你可以在上面叠加过滤条件,比如同时显示总流量和重传流量。如果重传曲线突然飙升,那基本可以断定网络有问题。

实战用法:有一次客户说「下午 3 点网络就卡」。我抓了一整天的包,然后用 IO Graph 看流量趋势,发现每天 14:55 开始有一个大流量尖峰,持续 10 分钟。后来查出来是备份任务定时启动,把带宽打满了。没有 IO Graph,这种周期性问题是很难靠肉眼发现的。

3.5 本章知识体系

下面这张图把本章的核心操作串起来了。你可以看到,捕获过滤器和显示过滤器分别工作在数据入口和展示层,着色规则帮我们快速定位,TCP 流还原对话,统计工具做宏观分析。五者配合,才能高效分析网络问题。

Wireshark 基础操作知识体系 Wireshark 核心操作 捕获过滤器 BPF 语法 事前过滤,丢包不可恢复 显示过滤器 Wireshark 表达式 事后检索,数据仍在 着色规则 自定义颜色标记 快速定位异常包 追踪 TCP 流 还原完整对话内容 统计工具 Protocol Hierarchy Conversations / IO Graph

好了,这一章的内容就这些。你先把这几个操作练熟,后面分析 TLS 握手时,我们会频繁用到它们。尤其是显示过滤器和着色规则,到时候你就知道有多省事了。