Wireshark 核心操作:捕获过滤器、显示过滤器、着色规则与统计工具
说实话,很多刚入行的兄弟拿到 Wireshark 第一反应就是——直接点开始抓包。结果呢?抓了五分钟,几万条数据包,直接看懵了。我当年也干过这事儿,抓了一堆没用的广播包,真正的问题反而被淹没了。
所以这一章,咱们把 Wireshark 最核心的四个操作讲透。你把这四个东西玩熟了,效率至少翻一倍。
捕获过滤器:抓之前就筛掉垃圾
捕获过滤器是在数据包进入 Wireshark 内存之前就把它扔掉。说白了,它帮你省内存、省时间。我建议你养成习惯:抓包之前,先想清楚你要看什么。
核心原则:捕获过滤器用 BPF(Berkeley Packet Filter)语法,写在 Capture Options 里。它只支持简单的条件,不支持逻辑组合太复杂的东西。
常用的几个,我列出来给你:
| 场景 | 过滤器表达式 | 说明 |
|---|---|---|
| 只看某台主机 | host 192.168.1.100 |
双向流量都抓 |
| 只看某个端口 | port 443 |
HTTPS 流量 |
| 只看某网段 | net 10.0.0.0/8 |
内网段 |
| 排除广播包 | not broadcast and not multicast |
减少噪音 |
| 组合条件 | host 192.168.1.1 and port 80 |
与关系 |
小技巧:捕获过滤器不支持「或」关系里的括号嵌套太深。我曾经在排查一个 DNS 故障时,想同时抓 UDP 53 和 TCP 53,直接写 port 53 就行了,别画蛇添足。
显示过滤器:抓完之后再精细筛选
显示过滤器就不一样了。它是在数据包已经抓进内存之后,你用它来「隐藏」不关心的包。注意,是隐藏,不是删除。你随时可以清掉过滤器,所有包又回来了。
显示过滤器的语法比捕获过滤器强大得多。它能深入到协议字段里。举个例子:
http.request.method == "GET"
tcp.analysis.flags
dns.qry.name contains "baidu"
ip.src == 192.168.1.1 and tcp.dstport == 443
我个人习惯把常用的显示过滤器存成按钮。怎么存?在过滤器栏输入表达式,点右边的「+」号,起个名字。下次直接点按钮,一秒切换。
注意:显示过滤器区分大小写。比如 http 是小写,HTTP 就不认。我见过有人排查了半天,结果是大小写写错了。
这里有个对比表,帮你搞清楚两者的区别:
| 对比项 | 捕获过滤器 | 显示过滤器 |
|---|---|---|
| 作用时机 | 抓包之前 | 抓包之后 |
| 语法基础 | BPF | Wireshark 专有语法 |
| 性能影响 | 减少抓包量,省内存 | 只影响显示,不省内存 |
| 表达能力 | 简单 | 强大,可深入协议字段 |
| 典型场景 | 高流量环境、嵌入式设备 | 日常分析、问题定位 |
着色规则:一眼看出异常
Wireshark 默认会给不同协议上色。比如 HTTP 是绿色,TCP 是浅蓝。但默认规则不够用。我建议你自定义一套着色规则,专门标记异常。
怎么配?进 View → Coloring Rules。你可以新建规则,比如:
- TCP 重传: 背景红色,文字白色。看到红色就知道有丢包。
- TCP 窗口满: 背景橙色。说明接收端处理不过来。
- HTTP 5xx: 背景深红。服务端报错。
- DNS 响应超时: 背景黄色。域名解析有问题。
我的经验:着色规则一定要用「高对比」配色。别用浅红配浅灰,你盯着屏幕看十分钟眼睛就花了。我一般用深色背景 + 白色文字,或者亮色背景 + 黑色文字,确保一目了然。
着色规则的优先级很重要。规则是从上往下匹配的,匹配到第一条就停。所以把最严重的异常(比如 TCP 重传)放在最上面。
统计工具:从数据里挖出真相
Wireshark 的统计功能,很多人忽略了。其实它比一条条翻包高效得多。我常用的几个:
1. 协议层次统计
进 Statistics → Protocol Hierarchy。它能告诉你整个抓包文件里,每种协议占了多少带宽、多少包数。有一次我排查一个「网速慢」的问题,一看协议层次,发现 ARP 广播占了 30% 的流量。原来是有人接了环路,交换机在疯狂泛洪。
2. 会话统计
进 Statistics → Conversations。它会列出所有 TCP/UDP 会话,按流量大小排序。你一眼就能看出哪个 IP 在「吃带宽」。我习惯先看「Bytes A→B」那一列,谁最大谁就是嫌疑犯。
3. 端点统计
进 Statistics → Endpoints。它显示每个 IP 或 MAC 地址的总流量。适合快速定位「哪个设备在狂发包」。
4. IO 图表
进 Statistics → IO Graph。这是我最喜欢的工具。你可以画出一条时间线,看流量波动。比如你怀疑某个时间段有攻击,直接拉出那个时间段的图,流量尖峰一目了然。
进阶用法:在 IO 图表里可以叠加多个过滤器。比如同时画 TCP 重传和正常流量的曲线,对比着看。重传曲线和正常流量曲线同步飙升,那基本就是网络拥塞了。
知识体系总览
下面这张图,把本章的核心逻辑串起来了。你一看就明白这四个工具各自在什么阶段用:
实战组合拳:一个案例串起来
光讲理论没意思。我给你说个真实案例。
有一次,用户反馈「访问公司官网特别慢,有时候打不开」。我上去排查:
- 先设捕获过滤器:
host 官网IP and port 443。只抓官网的 HTTPS 流量,其他全扔掉。 - 开始抓包: 让用户再访问一次,抓了大概 30 秒。
- 用显示过滤器: 输入
tcp.analysis.retransmission,只看重传包。好家伙,一屏红色。 - 着色规则自动标记: 因为我已经配好了重传红色,一眼就看到重传集中在某个时间段。
- 用统计工具验证: 打开 IO 图表,叠加两条曲线——正常流量和重传流量。发现重传曲线在用户访问时飙升,正常流量曲线却平缓。说明不是带宽不够,而是中间链路有丢包。
最后定位到是运营商某台交换机端口协商成了半双工。你想想看,如果没有这套组合拳,我可能还在一条条翻包,翻到下班都找不到原因。
避坑指南:我曾经在抓大文件传输时,忘了设捕获过滤器,结果抓了 2GB 的 pcapng 文件。Wireshark 直接卡死,等了十分钟才打开。从那以后,我抓包前必问自己一句:「我真的需要看所有包吗?」