2. Wireshark 入门:从安装到抓包实战

Wireshark 这工具,做无线通信的没人不知道。说白了它就是网络世界的「示波器」—— 能把你看不见的电波信号,变成一行行可读的数据包。我入行那会儿还在用 Ethereal(Wireshark 的前身),那时候界面还没这么友好,但核心逻辑一直没变。

这一章我们不讲虚的,直接上手。安装、界面、过滤器、抓本地和远程流量,一条龙走完。

2.1 安装与第一印象

安装其实没什么难度,但有几个坑我得提前说。

Windows 下安装

  1. 去官网下载最新版(别去第三方站点,你懂的)
  2. 安装时记得勾选 Npcap —— 这是抓包的核心驱动
  3. Npcap 选项里,建议勾上「WinPcap API‑Compatible Mode」
我曾经遇到过一哥们,装完 Wireshark 发现抓不到包,折腾半天才发现 Npcap 没装。嗯,这步别省。

macOS / Linux 下安装

  • macOS:brew install wireshark,然后装 ChmodBPF 授权
  • Ubuntu:sudo apt install wireshark,安装时选「允许非 root 用户抓包」

装完打开,你会看到这个界面 ——

主界面核心区域(从左到右):

  • 接口列表:显示所有网卡,Wi-Fi、以太网、蓝牙、虚拟接口都在
  • 捕获过滤器:抓包前就过滤,减少无用流量
  • 显示过滤器:抓完包再过滤,不影响原始数据
  • 数据包列表:每一行就是一个包,编号、时间、源/目的地址、协议、长度
  • 包详情:选中一个包,这里展开各层协议头
  • 原始字节:十六进制 + ASCII,最底层的裸数据

我个人习惯先把「接口列表」那栏拉宽一点,因为无线环境里接口多,名字长,窄了看不清。

2.2 抓包过滤器(Capture Filter)—— 抓之前就筛掉

抓包过滤器用的是 BPF(Berkeley Packet Filter) 语法。你想想看,在嘈杂的 2.4GHz 频段里,如果不加过滤,一秒能抓到几千个包,全是邻居家的 Wi-Fi 广播,你根本找不到自己的设备。

所以我的习惯是:先设过滤,再点开始。

常用 BPF 表达式

需求BPF 表达式说明
只抓某个 IPhost 192.168.1.100源或目的 IP 匹配
只抓某个端口port 443HTTPS 流量
只抓 UDPudp排除 TCP
只抓广播/多播broadcast or multicast排查 ARP、DHCP 时常用
排除某个 MACnot ether host aa:bb:cc:dd:ee:ff过滤掉自己的设备
组合条件host 192.168.1.100 and port 80与逻辑
小技巧:BPF 不支持「或」用 or,但注意优先级 —— 用括号分组,比如 (host A or host B) and port 53。

我在项目中遇到过一个问题:抓 Zigbee 和 BLE 共存环境时,如果不加 not broadcast,抓包文件能到几百 MB,分析时电脑直接卡死。从那以后,我每次抓无线包都先加一层广播过滤。

2.3 显示过滤器(Display Filter)—— 抓完再精筛

显示过滤器是 Wireshark 的杀手锏。它不丢包,只是隐藏你不关心的。语法比 BPF 丰富得多,能深入到协议字段。

常用显示过滤器

需求显示过滤器说明
只看 HTTP 请求http.request过滤出 GET/POST
只看某个 TCP 流tcp.stream eq 0数字 0 是流的编号
只看 DNS 查询dns.flags.response == 00 表示查询,1 表示响应
只看 Wi-Fi 管理帧wlan.fc.type_subtype == 0x08Beacon 帧
只看重传包tcp.analysis.retransmission排查丢包时必用
只看特定长度frame.len > 1000过滤大包

我的习惯:显示过滤器支持自动补全。你输入 wlan. 后按 Tab,所有字段都会列出来。别硬背,用多了自然记住。

BPF vs 显示过滤器 —— 什么时候用哪个?

对比项抓包过滤器(BPF)显示过滤器
时机抓包开始前抓包结束后
性能内核级过滤,极快用户级过滤,慢一些
灵活性只能基于 L2-L4 字段可深入协议字段
丢包风险过滤掉的包永远丢失包还在,只是隐藏
典型场景高流量环境,只保留目标流量调试时反复切换视角

你想想看,如果现场抓包时流量特别大,用 BPF 先筛掉 90% 的垃圾包,剩下的再用显示过滤器慢慢分析,这是最舒服的节奏。

2.4 抓取本机与远程流量

抓本机流量

直接选接口,点开始就行。但有个坑:本机回环流量(127.0.0.1)在 Windows 上默认抓不到。为什么?因为 Npcap 默认不监听回环接口。

解决办法:

  • Windows:安装 Npcap 时勾选「Support Loopback Traffic」
  • macOS/Linux:直接选 lo0 或 lo 接口即可
我曾经调试一个本地 HTTP 服务,抓了半天没看到请求,最后发现是回环没开。嗯,这坑我替你们踩过了。

抓远程流量

远程抓包有两种主流方式:

  1. SSH 远程抓包 + 本地 Wireshark 显示
    ssh user@remote "tcpdump -i eth0 -w -" | wireshark -k -i -
    这条命令的意思是:SSH 到远程机器,用 tcpdump 抓包并输出到 stdout,然后通过管道传给本地 Wireshark 实时显示。
  2. Wireshark 自带的远程接口功能
    • 远程机器上安装 rpcapd 服务(Windows 下 Wireshark 安装包自带)
    • 本地 Wireshark 选择「远程接口」,输入 IP 和端口
    • 注意:这种方式默认不加密,建议配合 SSH 隧道使用
个人推荐:用 SSH 管道方式。因为 tcpdump 本身支持 BPF 过滤,你可以在远程端先过滤,减少网络传输量。比如只抓端口 443:
ssh user@remote "tcpdump -i eth0 port 443 -w -" | wireshark -k -i -

2.5 本章知识体系

下面这张图把本章的核心逻辑串起来了 —— 从安装到抓包,再到过滤和分析,每一步都有对应的工具和技巧。

Wireshark 入门知识体系 Wireshark 入门知识体系 安装与驱动 抓包过滤器 (BPF) 显示过滤器 本机 / 远程抓包 host / port / udp / broadcast 组合条件:and / or / not http.request / tcp.stream wlan.fc.type_subtype / frame.len SSH + tcpdump 管道 rpcapd 远程接口 实战要点:先 BPF 粗筛 → 再显示过滤器精筛

2.6 避坑总结

  • 装完抓不到包? 先检查 Npcap 是否安装,再确认接口是否选中
  • 本地 127.0.0.1 抓不到? Windows 需要开启回环支持
  • 抓包文件太大? 用 BPF 先过滤,或者设置 Wireshark 的自动停止条件(比如抓 10000 个包自动停)
  • 远程抓包卡顿? 在远程端用 tcpdump 加过滤,减少传输量

好了,这一章的内容就到这里。工具装好了,过滤器会用了,本地远程都能抓了 —— 接下来你就可以拿着 Wireshark 去实战中「抓鬼」了。