说明:此文档参考nordic官方文档《nRF_Sniffer_UG_v2.2.pdf》制作,针对里面描述不是特别详细的地方做了补充。Sniffer是嗅探器的意思,也就是监听的意思,可以通过sniffer来抓取我们的手机和我们开发的蓝牙从端设备的空中数据来协助分析问题,从而加快开发进度。
此文只介绍环境的搭建,具体怎么使用wireshark和sniffer抓取数据,请参阅《Wireshark配合nRF Sniffer使用技巧.docx》一文。
监听架构:
1. 需要硬件
要想实现抓包,至少要有一个nordic的开发板,将它刷入特定的sniffer固件,制作成一个sniffer才行,我们可以使用如下的板子:
• nRF51 Development Kit (PCA10028) v1.0 or later and a micro USB cable(nrf51422)
• nRF51 Dongle (PCA10031)(nrf51422)
• nRF51822 Evaluation Kit (PCA10001) and a mini USB cable
• nRF51422 Evaluation Kit (PCA10003) v3.0.0 or later and a mini USB cable
• nRF51822 Development Kit dongle (PCA10000)
• nRF52 Development Kit (PCA10040) and a micro USB cable(nrf52832)
• nRF52840 Development Kit (PCA10056) and a micro USB cable
你会发现nrf51822、nrf51422、nrf52832和nrf52840等蓝牙芯片均可以制作成sniffer,但是他们均需要刷入不同的固件程序,并且nrf51822和nrf51422硬件最多支持到蓝牙4.2的版本,而nrf52832和nrf52840可以支持到蓝牙5.0版本。
2. Windows版本需要软件
(1) nRF Sniffer software v2.x or later ,包含了jlink驱动等,下载网址:https://www.nordicsemi.com/Software-and-Tools/Development-Tools/nRF-Sniffer/Download#infotabs
下载图示:
(2)Wireshark v2.4.6 or later.下载: https://www.wireshark.org/#download
下载图示:
(3)python v2.7.x https://www.python.org/downloads/release/python-2716/
注意:这个不能用最新的python版本,否则可能无法使用。
下载图示:
• pyserial v3.4 or later
pyserial一般不用下载,安装python后用命令即可安装此插件,后续会介绍。
按照以上网址和图片所示的位置下载以上三个软件即可,准备后续使用。下图是我下载的:
文件介绍:
nrfsniffer200beta312oct20181c2a221.zip解压后如下图所示:
3. 软件安装与配置
注意:安装步骤不要变,否则可能安装失败。
(1) 安装wireshark:
双击Wireshark-win64-3.0.1.exe进行安装,一路next,选中下图桌面创建快捷方式:
如下图,选中USBPcap并进行安装:
剩下就是一路允许和接受,直到安装完毕,然后重启计算机。
(2) 配置wireshark环境:
打开wireshark->帮助->关于wireshark->文件夹->双击打开Extcap路径,如下所示:
解压nrfsniffer200beta312oct20181c2a221.zip文件,将里面的extcap文件夹里的四个文件复制到刚刚打开的这个wireshark的extcap路径下,如图所示为复制完毕的效果图:
然后双击wireshark里的个人配置的网址,如下图所示:
在弹出的文件夹下打开profiles文件夹,然后将解压的nrfsniffer200beta312oct20181c2a221.zip文件中的Profile_nRF_Sniffer_v2_001文件夹拷贝到profiles文件夹中,如下图为拷贝完毕的效果图:
(3) 安装python:
双击python-2.7.16.amd64.msi进行安装,一路next,直到如下界面:
此处需要选择该项,即添加环境变量,然后一路next即可,直到安装完毕。
(4) 安装pyserial v3.4:
按下键盘的Windows键和R键调出运行,然后输入cmd后回车,则进入命令行界面(注意以管理员身份运行cmd,我的默认就是管理员身份,如果不是,请百度“如何以管理员运行cmd”),cmd窗口输入“pip --version”命令,查询python的pip版本,如下所示,则代表已经正常启动pip且版本号为18.1:
输入”python –m pip install –upgrade pip”命令,更新一下pip,如下所示则更新成功:
输入“cd C:\Program Files\Wireshark\extcap”命令,将cmd操作界面定位到“C:\Program Files\Wireshark\extcap”目录下,注意,这时wireshark安装目录的extcap目录,也就是刚刚我们往这里拷贝四个文件的地方,wireshark安装目录不同,此路径可能不同,请自行调整,切换后如下:
(如果切换不顺利,也可直接通过在C:\Program Files\Wireshark\extcap文件夹下按住shift按键的同时,鼠标右单机空白处,在弹出的菜单中选择“在此处打开命令窗口”来进行切换。)
切换目录后,输入“pip install -r requirements.txt”命令,则会自动启动pyserial v3.4的安装,成功后如下图所示:
(5) 安装jlink.exe
在nrfsniffer200beta312oct20181c2a221.zip解压缩后的文件夹内有个
segger_jlink文件,打开里面的segger_jlink_v6_34b,双击JLink_Windows_V634b.exe进行安装,一路next即可安装完毕。
如果上述步骤都正确完成,电脑端的开发环境基本就搭建完毕了。
4. 开发板的设置:
不同的开发板需要烧录不同的hex文件才能成为sniffer,hex文件放在nrfsniffer200beta312oct20181c2a221.zip解压缩后的hex文件夹中,如下图所示:
我们以图中pca10056为例进行说明,即52840的板子,该板子可支持蓝牙5.0的抓包。
我们要将sniffer_pca10056_1c2a221.hex下载到pca10056的板子上。这里可以采用多种方式,例如使用jlink命令下载,也可以用nordic的nrfjprog动态库命令下载,也可以通过nrfgo studio界面化工具下载,但无论采用哪种方式,都要先擦除芯片,再烧录程序。
首先,我们以jlink.exe为例进行说明:
a. 用USB数据线将PCA10056开发板和电脑连接;
b. 打开J-Link Commander V6.43b;
c. 输入connect;
d. 输入问号:‘?’
e. 在弹出的对话框选择nrf52840(因为pca10056是这个芯片,其它板子选对应的即可。)然后点击ok即可。
f. 输入s选择SWD接口:
g. 速率默认即可,直接回车;
h. 然后擦除芯片,输入erase,然后回车即可,此过程稍长,耐心等待;
i. 然后下载文件,输入: loadfile “d:\ sniffer_pca10056_1c2a221.hex”,回车,这里我为了少输入数据,将hex文件直接放到了d盘的根目录了,可自行调整。
j. 输入r重启52840;
k. 输入g使52840运行程序。
完整图如下:
然后,我们以nrfgo studio为例进行说明:
如图所示,识别的开发板后,先erase all, 然后选择program application选项卡,然后选择对应的hex文件,然后点击program进行下载即可,比较简单。
5. 验证sniffer是否安装成功:
上述准备完毕,再打开wireshark,则会出现nRF Sniffer字样的东西,如下图所示,则说明安装成功了,后面就可以使用此环境进行抓包了。如果未能安装成功,请仔细核对以上所有步骤是否有未操作正确的。