第1章 Wireshark基础:抓包原理、界面布局与过滤器

说实话,很多刚入行的朋友一打开Wireshark就懵了——满屏的协议、花花绿绿的包、一堆看不懂的选项。我当年也是这样。但别急,这一章咱们先把地基打牢。

Wireshark说白了就是一个网络嗅探器。它把网卡上流过的数据包原封不动地复制一份,然后拆开给你看。嗯,这里要注意:它只是“看”,不会修改任何数据包。这一点和某些攻击工具完全不同。

1.1 抓包原理:数据包是怎么被“截获”的?

Wireshark依赖底层库(Windows上是Npcap/WinPcap,Linux/macOS上是libpcap)来捕获原始数据包。这些库直接和网卡驱动打交道,把网卡设置为“混杂模式”。

什么是混杂模式?普通模式下,网卡只接收发给自己的包。混杂模式就不一样了——经过网卡的所有包,不管是不是发给你的,统统收进来。我在一次数据中心排障时,就是靠这个模式抓到了隔壁交换机误转发的广播风暴。

抓包流程大致如下:

  1. 网卡接收物理信号,还原成以太网帧
  2. Npcap/libpcap从驱动层复制帧数据
  3. Wireshark接收原始帧,按协议栈逐层解析
  4. 解析结果展示在用户界面,同时可保存为pcapng文件

核心要点:Wireshark只做“复制+解析”,不发送任何数据。所以用它排查网络问题,不会对现网造成任何影响。

下面这张图能帮你快速理解抓包的完整链路:

Wireshark 抓包原理流程 物理网络 网卡(混杂模式) Npcap / libpcap Wireshark 核心 协议解析器 用户界面 数据包从物理网络 → 网卡(混杂模式) → 底层库 → Wireshark核心 → 解析 → 展示

1.2 界面布局:别被满屏信息吓到

Wireshark的界面其实就五大块。我习惯把它们叫做“五区一线”。你花5分钟熟悉一下,后面操作就顺手了。

区域名称 位置 作用
菜单栏/工具栏 最顶部 文件操作、捕获控制、统计工具、帮助等
显示过滤器栏 工具栏下方 输入过滤表达式,只显示你关心的包
数据包列表 中间上半部分 显示所有捕获到的包,每行一个
数据包详情 中间下半部分 选中某个包后,按协议层级展开显示
数据包字节 最底部 原始十六进制+ASCII码显示

我的小技巧:双击“数据包详情”区域的分隔线,可以快速展开或收起详情区。排查重传时,我经常把详情区拉大,方便看TCP序列号。

1.3 首选项配置:用之前先调好这几个地方

Wireshark默认配置能用,但有些设置不改会踩坑。我曾经在客户现场抓了半小时,回去发现包没保存——就是因为没配自动保存。下面这几个配置,我建议你上手就改。

  • 自动保存捕获文件:Edit → Preferences → Capture → 勾选“Use multiple files”,设置文件大小(比如20MB)和文件数量。防止抓大流量时内存爆掉。
  • 时间显示格式:View → Time Display Format → 选“Seconds Since Beginning of Capture”。排查延迟时,这个格式最直观。
  • 禁用名称解析:Capture → Options → 取消勾选“Enable MAC name resolution”、“Enable network name resolution”、“Enable transport name resolution”。解析会拖慢速度,还容易暴露内部域名。
  • 调整列显示:右键点击列表列头 → Column Preferences → 添加“Delta time”(前后包时间差)和“TCP Stream index”。这两个列对定位重传非常有用。

注意:生产环境抓包时,务必先禁用名称解析。否则Wireshark会发DNS查询,万一DNS服务器挂了,抓包界面会卡死。别问我怎么知道的……

1.4 捕获过滤器 vs 显示过滤器:到底该用哪个?

这个问题我几乎每次培训都会被问到。说白了,两者最大的区别就是“时机”。

捕获过滤器在抓包时就生效——符合条件的包才抓进来,不符合的直接丢掉。它用的是BPF(Berkeley Packet Filter)语法,效率极高,但表达能力有限。

显示过滤器在抓完包之后生效——所有包都已经在内存里了,你通过表达式筛选出想看的。它用的是Wireshark自己的语法,功能强大,但处理的是已经抓到的数据。

我举个例子你就明白了:

对比项 捕获过滤器 显示过滤器
生效时机 抓包过程中 抓包完成后
语法 BPF(简洁但有限) Wireshark专用(丰富灵活)
性能 高(内核层过滤) 中等(用户层过滤)
典型场景 只抓某台主机的流量 从全量数据中分析特定协议
示例 host 192.168.1.1 ip.addr == 192.168.1.1

实际工作中,我通常这样搭配:

  • 用捕获过滤器缩小范围——比如只抓某个IP或某个端口,减少无用数据量
  • 用显示过滤器深入分析——比如从抓到的数据里找出所有TCP重传包

实战建议:如果你不确定要抓什么,就别用捕获过滤器。全量抓下来,再用显示过滤器慢慢筛。硬盘便宜,但漏掉的包找不回来。

1.5 过滤器语法速查:常用的几个表达式

这里我整理了一份常用过滤器对照表。你把它存下来,后面几章会反复用到。

需求 捕获过滤器(BPF) 显示过滤器
抓特定IP host 10.0.0.5 ip.addr == 10.0.0.5
抓特定端口 port 443 tcp.port == 443
抓HTTP流量 tcp port 80 http
抓DNS查询 udp port 53 dns
只看重传包 不支持 tcp.analysis.retransmission
只看TCP握手 不支持 tcp.flags.syn == 1

快速输入技巧:在显示过滤器栏输入时,Wireshark会自动弹出提示。按Tab键补全,按Enter应用。我基本不手打完整表达式,都是靠自动补全。