Wireshark 基础:安装、配置与过滤器实战
做物联网抓包,Wireshark 是绕不开的工具。我见过不少新手,装完软件就急着点开始抓包,结果被满屏的数据包淹没了。嗯,今天我们就从最基础的东西说起——怎么装、怎么看、怎么过滤。
1. 安装与配置:别让环境坑了你
Wireshark 的安装其实很简单,但有几个细节我建议你注意一下。
Windows 平台
去官网下载安装包,一路 Next 就行。但有个关键步骤——安装过程中会提示安装 Npcap,一定要勾选。Npcap 是 Windows 下的抓包驱动,没有它 Wireshark 就是个摆设。
Linux / macOS 平台
Linux 下直接用包管理器安装:
sudo apt-get install wireshark # Debian/Ubuntu
sudo yum install wireshark # CentOS/RHEL
安装后记得把当前用户加入 wireshark 组,否则普通用户没权限抓包:
sudo usermod -a -G wireshark $USER
macOS 用户推荐用 Homebrew:brew install wireshark。不过 macOS 的权限管理比较严,第一次启动时系统会弹窗询问是否允许网络权限,记得点“允许”。
基础配置
装好后,打开 Wireshark,先做两件事:
- 选择正确的网卡——抓 Zigbee 选抓包器对应的虚拟接口,抓 Wi-Fi 选无线网卡。别选错了,我见过有人对着 Loopback 接口抓了半天。
- 关闭不必要的协议解析——在 Preferences → Protocols 里,把不相关的协议(比如 HTTP、DNS)的解析关掉,能省不少 CPU。
2. 界面布局:别被密密麻麻的窗口吓到
Wireshark 的界面乍一看挺复杂,其实就三大块。你想想看,就像看监控视频——上面是列表,中间是详情,下面是原始数据。
| 区域 | 名称 | 作用 |
|---|---|---|
| 顶部 | 数据包列表区 | 显示所有抓到的包,按时间排序。每一行就是一个包。 |
| 中间 | 协议树展开区 | 选中某个包后,这里会分层展示协议字段。比如 802.15.4 的帧头、MAC 地址、Payload。 |
| 底部 | 十六进制原始数据区 | 显示包的原始字节流,左边是偏移量,中间是十六进制,右边是 ASCII。 |
我个人习惯把中间区域拉大一点,因为看协议树最频繁。底部区域一般只在对齐字节流时才用。
3. 抓包过滤器:只抓你想要的
抓包过滤器是在抓包之前设置的。它的作用是让 Wireshark 只捕获符合条件的数据包,不符合的直接丢弃。说白了,就是给网卡装个“门禁”。
语法规则
抓包过滤器用的是 BPF(Berkeley Packet Filter)语法,核心是:协议 方向 类型 值。
- 协议:ether、ip、tcp、udp、wlan 等
- 方向:src、dst、host
- 类型:net、port、host
举个例子:
# 只抓来自 192.168.1.100 的包
src host 192.168.1.100
# 只抓端口 1883(MQTT)的包
tcp port 1883
# 只抓 Zigbee 信道 11 上的包(需要抓包器支持)
wlan channel 11
host 192.168.1.50 and tcp port 1883,能省下 90% 的磁盘空间。
常见物联网场景过滤器
| 场景 | 过滤器表达式 | 说明 |
|---|---|---|
| 抓 Zigbee 数据 | wpan |
只捕获 802.15.4 帧 |
| 抓 BLE 广播 | btle |
只捕获 BLE 链路层包 |
| 抓特定 IP 的 CoAP | host 10.0.0.2 and udp port 5683 |
CoAP 默认用 UDP 5683 |
| 抓 LoRaWAN 上行 | udp port 1700 |
LoRaWAN 通常用 UDP 1700 |
4. 显示过滤器:从抓到的包里快速定位
显示过滤器是抓包之后用的。它不会删除任何包,只是把不符合条件的包隐藏起来。你可以随时修改显示过滤器,看到不同的数据子集。
语法规则
显示过滤器的语法更丰富,支持字段级过滤。格式是:协议.字段 操作符 值。
- 协议.字段:比如
ip.src、wpan.dst_pan、btle.advertising_address - 操作符:
==、!=、>、<、contains、matches - 值:IP 地址、数字、字符串、十六进制
常用例子:
# 只看源 IP 为 192.168.1.1 的包
ip.src == 192.168.1.1
# 只看 Zigbee 广播帧(目的 PAN 为 0xFFFF)
wpan.dst_pan == 0xffff
# 只看 BLE 连接请求包
btle.advertising_header.pdu_type == 5
# 只看包含特定十六进制数据的包(比如查找某个设备指纹)
frame contains 00:1a:7d:da:71:13
wpan.dst_pan == 0xffff。因为很多 Zigbee 设备入网时会发广播,通过这个过滤器能快速定位入网流程。有一次客户说设备连不上网关,我一看广播帧里 PAN ID 不对,原来是网关配置错了。
显示过滤器 vs 抓包过滤器
| 对比项 | 抓包过滤器 | 显示过滤器 |
|---|---|---|
| 生效时机 | 抓包前 | 抓包后 |
| 是否影响捕获 | 是,不符合的包不抓 | 否,只是隐藏 |
| 语法复杂度 | 简单(BPF) | 丰富(字段级) |
| 典型用途 | 减少抓包量,节省磁盘 | 分析时快速定位问题 |
我的习惯是:抓包时用抓包过滤器缩小范围,分析时用显示过滤器深入挖掘。两者配合,效率最高。
5. 知识体系图
下面这张图总结了本章的核心逻辑,你可以把它当作一个快速参考。
6. 实战小贴士
最后分享几个我踩过的坑:
- 抓包过滤器写错了怎么办?——Wireshark 会提示语法错误,但不会告诉你哪里错了。我的办法是:先写一个简单的
host 192.168.1.1测试,确认能抓到包,再逐步加条件。 - 显示过滤器不生效?——检查字段名是否写对了。比如 Zigbee 的 PAN ID 字段是
wpan.dst_pan,不是wpan.pan_id。可以在协议树里右键某个字段,选择“作为过滤器应用”。 - 抓包文件太大?——用抓包过滤器限制范围,或者设置“捕获文件自动分割”,比如每 100MB 自动保存一个新文件。