3、软件环境搭建(下):Python 环境与 Scapy 库安装。Sniffer 固件烧录(以 nRF52840 和 TI CC2531 为例)。虚拟化环境(Docker)下的抓包准备。
上一节我们把系统环境和硬件驱动搞定了。这一节,咱们来搭软件栈。
说白了,就是让电脑能听懂无线芯片在说什么,并且能控制它干活。
我个人习惯把这一步分成三层:Python 基础层 → Scapy 协议层 → 固件烧录层。最后再聊聊 Docker 这种“偷懒”玩法。
核心逻辑:抓包工具链 = 解释器(Python) + 协议工厂(Scapy) + 硬件驱动(固件)。缺一个,数据就出不来。
3.1 Python 环境:别用系统自带的
我知道很多人图省事,直接用 python3 就开始装包。嗯,这里要注意——系统自带的 Python 通常被 macOS 或 Linux 的包管理器锁着,你乱装依赖,搞不好会把系统搞崩。
我建议用 pyenv 或者 conda 来管理版本。我自己在项目里踩过坑:有一次用系统 Python 装了 Scapy,结果升级 macOS 后整个环境炸了,重装了两天。
我的推荐方案:
- Windows:直接装 Anaconda,省心。
- macOS/Linux:用 pyenv + virtualenv,干净。
装好 Python 3.8+ 之后,记得验证一下:
python3 --version
pip3 --version
输出里看到版本号,就说明基础层通了。
3.2 Scapy 库安装:抓包的核心引擎
Scapy 是什么?说白了,它是一个能让你用 Python 直接构造、发送、解析网络数据包的库。对于无线抓包来说,它支持 BLE、Zigbee、802.15.4 这些协议。
安装很简单:
pip3 install scapy
但要注意——别只装 scapy 本体。如果你要抓 BLE,还需要装 scapy-radio 或者 bleak 这类扩展。我记得有一次帮客户调试,发现 Scapy 装好了但抓不到包,折腾半天才发现是缺了 pyserial 驱动。
常见依赖清单:
| 用途 | 包名 | 安装命令 |
|---|---|---|
| 基础抓包 | scapy | pip3 install scapy |
| 串口通信 | pyserial | pip3 install pyserial |
| BLE 支持 | bleak | pip3 install bleak |
| Zigbee 支持 | zigpy | pip3 install zigpy |
装完后,跑个简单测试:
from scapy.all import *
print("Scapy 安装成功!")
没报错,就说明协议层就绪了。
3.3 Sniffer 固件烧录:让硬件听懂你的话
固件烧录,说白了就是把一段“翻译程序”写进无线芯片里,让它能把空中的无线电波转成电脑能读的数据包。
我以两个最常见的硬件为例:nRF52840(主打 BLE)和 TI CC2531(主打 Zigbee)。
3.3.1 nRF52840 烧录 Sniffer 固件
nRF52840 是 Nordic 的明星芯片。烧录前,你需要先下载官方的 nRF Sniffer for BLE 固件包。
- 下载固件:从 Nordic 官网获取
nrf_sniffer_for_ble包。 - 连接硬件:用 USB 线连上 nRF52840 Dongle 或开发板。
- 使用烧录工具:我推荐 nRF Connect for Desktop 里的 Programmer 工具。
- 选择固件:加载
sniffer_nrf52840_xx.hex文件。 - 点击烧录:等进度条走完,拔掉重插。
避坑指南:我曾经烧录时忘记按住板子上的复位键,结果固件写一半卡死了。后来养成习惯——烧录前先按一下复位,再点烧录。
验证方法:插上电脑后,在设备管理器里看到 J-Link 或 COM 端口,就说明固件活了。
3.3.2 TI CC2531 烧录 Sniffer 固件
CC2531 是 TI 的老将,主要抓 Zigbee 和 802.15.4。烧录稍微麻烦点,因为它需要 CC Debugger 或者 SmartRF Flash Programmer。
- 下载固件:从 TI 官网获取
ZBOSS Sniffer或TI Packet Sniffer固件。 - 连接调试器:CC Debugger 连 CC2531 的调试接口(注意引脚顺序)。
- 打开 SmartRF Flash Programmer:选择设备,加载
.hex文件。 - 烧录:点击 Erase & Program。
- 断开调试器:拔掉 CC Debugger,用 USB 直连电脑。
注意:CC2531 默认固件是 Zigbee 协调器,烧录 Sniffer 固件会覆盖原功能。建议备份原固件。
验证方法:插上后,系统会识别为一个 USB 复合设备,用 lsusb 或设备管理器能看到 Texas Instruments 字样。
3.4 虚拟化环境(Docker)下的抓包准备
你可能会问:为什么要在 Docker 里抓包?
原因很简单——隔离依赖。我在不同项目里用过 Python 2.7、3.6、3.9,每次切换环境都头疼。Docker 可以把整个抓包环境打包成一个镜像,换台机器直接跑。
我的 Dockerfile 长这样:
FROM python:3.9-slim
RUN pip3 install scapy pyserial bleak
# 暴露 USB 设备
VOLUME /dev/bus/usb
CMD ["python3"]
构建和运行:
docker build -t sniffer-env .
docker run -it --privileged -v /dev/bus/usb:/dev/bus/usb sniffer-env
关键点:--privileged 参数让容器能访问宿主机的 USB 设备。不加这个,你插了硬件也认不出来。
进入容器后,验证一下:
python3 -c "from scapy.all import *; print('Docker 环境就绪')"
没报错,就说明虚拟化环境搭好了。
嗯,到这里,软件环境搭建就全部完成了。你的电脑现在应该能识别硬件、运行 Scapy、并且准备好抓包了。