Diy ble sniffer

Creative Commons
本作品采用知识共享署名

本文说明利用nrf52832 CoreBoard变为nrf sniffer dongle,并在ubuntu下搭建nrf sniffer环境进行BLE抓包。

起因

使用nrf52832跑zephyr做两个IPSP节点想连时,因不懂BLE,IPSP Node无法connect成功的,因此还是回到要先了解BLE。为了方便学习BLE,就手上的nrf52832板子,DIY一个BLE sniff,并附带提供一些pca10040的功能。

硬件

CoreBoard提供了nrf52832的核心板和一个usb转ttl相连,参考pca10040的原理图进行扩展,添加了4个led和4个button

连接

P0.05–CTS–不连接
P0.06–RX–引出
P0.07–RTS–GND
P0.08–TX–引出

P0.13–BUTTON1–GND
P0.14–BUTTON2–GND
P0.15–BUTTON3–GND
P0.16–BUTTON4–GND

P0.17–LED1–R-V3.3
P0.18–LED2–R-V3.3
P0.19–LED3–R-V3.3
P0.20–LED4–R-V3.3

P0.21–RST–BUTTON–GND–引出
P0.21–RST–引出
SWDIO–引出
SWCLK–引出
VDD–引出

对外的接口

一个USB,用于sniffer
一个UART
一个SWD Debug
供电

实物图

pcb1.png
pcb2.png
pcb3.png
work.png

pca10040cut

因为是参照pca10040进行了改造提供了部分功能,因此叫做pca10040cut。
pca10040包含的jlink-ob, USB供电, nfc, button,led等功能。在pca10040上面的button和led是带switch功能,可以选择直连PIO或是连接由nrf52832 I2C控制的IO扩展芯片PCAL6408A上。
pca10040cut只保留直连PIO的4个button和4个led功能,加入USB转串口,对外透露SWD接口和供电接口。连接daplink后可以被当做简单的开发板使用。开发板功能不是本文的重点,不说明如何使用。

nrf sniffer

nordic官方支援nrf sniffer的硬件是:PCA10028/PCA10031/PCA10040。nrf sniffer采用wireshark+nrf plug的方式, nrf plug从串口收集解析数据,提供给wireshark进行分析显示。PCA10040是用nrf52832,我的pca10040cut也一样,因此可以作为sniffer tool。下面说明如何将pca10040cut当做sniffer来使用。

Dongle固件烧写

官方提供的Hex文件用jlink进行烧写,我用的daplink所以需要需要先转成bin然后用pyocd烧写

获取固件

下载nRF-Sniffer-v2解压缩后在hex/内找到hex
下载hex2bin,解压缩后使用下面命令将hex转为sniffer_pca10040_51296aa.bin

1
hex2bin sniffer_pca10040_51296aa.hex

烧写固件

用daplink连接上pca10040cut,daplink插入pc usb口,使用下面命令进行烧写

1
pyocd-flashtool -t nrf52 -a 0 sniffer_pca10040_51296aa.bin

Wireshak配置

安装插件

下载nRF-Sniffer-v2解压缩后在extcap/下找到插件
启动wireshark,打开帮助 > 关于Wireshark,在文件夹选项卡下查看extcap patch插件路径为

1
/usr/lib/x86_64-linux-gnu/wireshark/extcap

修改脚本属性,添加可执行

1
chmod +x nrf_sniffer.py

如图
cfg
将解压缩的extcap内全部内容copy到该文件夹下,重启wireshark,打开视图>接口工具栏>nRF Sniffer 勾选,重启后就可以看到nrf sniffer的工具栏,如下图
sniffer

运行抓包

关闭wireshark,插入pca10040cut通过USB连到电脑,开启wireshark选择有nRF Sniffer:/dev/ttyxxx 选项开始抓包,如图
sniffer_cap
sniffer_cap1
sniffer_data

Other

wireshark启动是提示”Lua: Error during loading”,不影响使用,但强迫症犯了,修改/usr/share/wireshark/init.lua,倒数第二行为

1
--dofile(DATA_DIR..”console.lua”)

参考

https://www.nordicsemi.com/eng/Products/Bluetooth-low-energy/nRF-Sniffer