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 流还原对话,统计工具做宏观分析。五者配合,才能高效分析网络问题。
好了,这一章的内容就这些。你先把这几个操作练熟,后面分析 TLS 握手时,我们会频繁用到它们。尤其是显示过滤器和着色规则,到时候你就知道有多省事了。