Wireshark 基础操作:捕获过滤器与显示过滤器、数据包列表与详情、着色规则与时间列
好,咱们正式开始动手。这一章我带你过一遍 Wireshark 最核心的日常操作。说白了,就是让你知道怎么抓、怎么看、怎么快速找到你要的东西。别小看这些基础,我见过不少老手,抓包一抓一大把,结果在列表里翻半天找不到关键报文——那就是基础没打牢。
捕获过滤器 vs 显示过滤器:别搞混了
这两个东西名字像,作用完全不同。我刚开始学的时候也晕过,后来用错一次就记住了。
一句话区分:捕获过滤器是「抓之前」就定好规则,只抓你想要的;显示过滤器是「抓完之后」在列表里筛选,不影响已经抓到的包。
| 对比项 | 捕获过滤器 | 显示过滤器 |
|---|---|---|
| 作用时机 | 抓包开始前 | 抓包结束后 |
| 语法风格 | 类 BPF(Berkeley Packet Filter) | Wireshark 专有语法 |
| 是否丢包 | 不符合规则的包直接丢弃 | 所有包都在,只是隐藏 |
| 典型场景 | 只抓 80 端口,减少磁盘写入 | 从全量抓包中定位某个会话 |
| 性能影响 | 高流量下能大幅降低负载 | 几乎无性能影响 |
捕获过滤器示例:
# 只抓 192.168.1.1 的流量
host 192.168.1.1
# 只抓 HTTP 或 DNS
port 80 or port 53
# 抓非本机回环的 TCP 流量
tcp and not host 127.0.0.1
显示过滤器示例:
# 只看源 IP 为 10.0.0.5 的包
ip.src == 10.0.0.5
# 只看 HTTP GET 请求
http.request.method == "GET"
# 只看 TCP 三次握手中的 SYN 包
tcp.flags.syn == 1 and tcp.flags.ack == 0
我的习惯:日常排查我几乎不用捕获过滤器。我会先全量抓个几秒,然后用显示过滤器慢慢筛。为什么?因为你永远不知道问题藏在哪里——万一你过滤掉了关键线索,那就白抓了。只有在高流量环境(比如出口带宽跑满)我才会用捕获过滤器保命。
数据包列表与详情:三层结构怎么看
打开 Wireshark,你会看到三个窗格。从上到下分别是:
- 数据包列表(Packet List)——每一行就是一个包,显示序号、时间、源目地址、协议、长度、Info 摘要。
- 数据包详情(Packet Details)——选中一个包,这里展开它的协议栈,从物理层到应用层一层层剥开。
- 数据包字节(Packet Bytes)——最底下的十六进制 + ASCII 原始数据。
我记得有一次帮同事排查一个 HTTP 请求超时的问题。他在列表里看到一堆 TCP Retransmission,但不知道是哪一层出的问题。我让他点开详情窗格,看 TCP 层的 Seq 和 Ack 号,再对比一下时间戳——立马发现是中间某个路由器丢包了。这就是三层结构的好处:宏观看列表,微观看详情。
我曾经踩过的坑:别只看 Info 列就下结论。Info 列是 Wireshark 帮你「猜」的摘要,有时候不准。比如一个包被标记为 [TCP Dup ACK],但点开详情发现其实是正常的快速重传。一定要双击进去看原始字段。
着色规则:一眼看出异常
Wireshark 默认会给不同协议和异常情况上色。比如:
- 浅紫色:HTTP 流量
- 浅蓝色:DNS 流量
- 红色背景:TCP 异常(重传、重复 ACK、零窗口等)
- 黑色背景:TCP SYN/FIN 包
你想想看,一个几百兆的抓包文件,如果没有颜色,你光靠眼睛找异常包,那得看到什么时候?颜色就是你的「视觉过滤器」。
我个人习惯会自定义几条规则:
# 把 TCP 重传改成亮红色背景 + 白色粗体
tcp.analysis.retransmission
# 把 HTTP 500 错误改成橙色背景
http.response.code >= 500
# 把 ICMP(ping)改成绿色背景
icmp
设置路径:View → Coloring Rules。你可以新增、修改、调整优先级。嗯,这里要注意:规则是从上往下匹配的,匹配到第一条就停止。所以把最紧急的异常(比如重传)放在最上面。
时间列:别被默认值骗了
Wireshark 默认的时间列显示的是「从抓包开始到现在的秒数」。这个值在大部分场景下够用,但有时候会误导你。
举个例子:你抓了两个不同网段的交互,中间有 NAT 设备。默认时间列显示的是本地时间,但 NAT 设备可能会重新封装包,导致时间戳看起来不对。这时候你需要切换到 绝对时间(UTC) 或者 相对时间(相对于第一个包)。
切换方法:View → Time Display Format。我常用的几种:
| 格式 | 适用场景 |
|---|---|
| Seconds Since Beginning | 日常分析,看包之间的间隔 |
| Absolute (UTC) | 跨设备比对日志时 |
| Seconds Since Previous | 看连续包之间的延迟抖动 |
一个小技巧:当你怀疑某个响应慢的时候,把时间列改成 Seconds Since Previous,然后看请求和响应之间的差值。如果这个差值突然变大,那大概率就是网络延迟或者服务器处理慢。我曾经用这个方法定位过一个数据库连接池耗尽的问题——客户端发了查询,服务器 5 秒后才回,中间全是空闲。
本章知识体系
下面这张图帮你把本章的核心逻辑串起来:
这张图把四个核心操作串起来了。你从上往下看:先决定要不要用捕获过滤器,抓完包后用显示过滤器缩小范围,然后在列表和详情里逐层分析,最后靠着色规则和时间列帮你快速定位异常。每一步都有它的用途,别跳着学。
本章核心要点:
- 捕获过滤器用 BPF 语法,显示过滤器用 Wireshark 语法,别混用。
- 数据包详情窗格是协议解析的主战场,别只看列表。
- 着色规则可以自定义,把最紧急的异常放在最上面。
- 时间列支持多种格式,跨设备比对时记得切到 UTC。