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,你会看到三个窗格。从上到下分别是:

  1. 数据包列表(Packet List)——每一行就是一个包,显示序号、时间、源目地址、协议、长度、Info 摘要。
  2. 数据包详情(Packet Details)——选中一个包,这里展开它的协议栈,从物理层到应用层一层层剥开。
  3. 数据包字节(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 秒后才回,中间全是空闲。

本章知识体系

下面这张图帮你把本章的核心逻辑串起来:

Wireshark 基础操作知识体系 Wireshark 基础操作 捕获过滤器 显示过滤器 列表与详情 着色规则 & 时间列 抓包前过滤 BPF 语法 减少磁盘写入 抓包后筛选 Wireshark 语法 不丢包 三层窗格结构 列表 → 详情 → 字节 逐层协议解析 视觉过滤 + 时间分析 自定义着色规则 多种时间格式切换

这张图把四个核心操作串起来了。你从上往下看:先决定要不要用捕获过滤器,抓完包后用显示过滤器缩小范围,然后在列表和详情里逐层分析,最后靠着色规则和时间列帮你快速定位异常。每一步都有它的用途,别跳着学。

本章核心要点:

  • 捕获过滤器用 BPF 语法,显示过滤器用 Wireshark 语法,别混用。
  • 数据包详情窗格是协议解析的主战场,别只看列表。
  • 着色规则可以自定义,把最紧急的异常放在最上面。
  • 时间列支持多种格式,跨设备比对时记得切到 UTC。