蓝牙应用-两种抓日志的方式:btmon/hcidump(BlueZ)
开源工具BlueZ中,给开发者提供了两种抓取日志的方法:btmon、hcidump,主要的区别在于 btmon 提供了更高级的分析和解析功能,可以帮助理解蓝牙协议栈的交互过程,而 hcidump 则提供了更原始的数据包捕获和显示功能,适用于快速获取蓝牙数据包的内容。选择使用哪个工具取决于实际需求和使用场景,请工程师自行选择
目录
1 前言
在蓝牙开源协议栈BlueZ中,btmon 和 hcidump 都是用于监听和分析蓝牙通信过程的工具,两种工具通过监听蓝牙适配器的 HCI(Host Controller Interface)接口来捕获蓝牙数据包,并将其以可读的格式输出。它们之间的区别主要在于它们的实现和使用方式。
btmon 提供了更高级的分析功能,可以解析和显示蓝牙协议栈中的各个层级的信息,包括 HCI 层和 L2CAP 层等。btmon 的输出可以用于调试和分析蓝牙协议交互,对于开发和故障排除非常有用。
btmon抓取到数据以后搭配Ellisys Bluetooth Analyzer(一个windows端的蓝牙协议分析工具)解析数据,是笔者比较推荐的蓝牙日志分析方式。
相比较而言,hcidump 的输出更加原始,其以十六进制格式显示蓝牙数据包的内容。hcidump 不提供对数据包的解析和分析,它只是将原始的数据包内容以较低级别的形式呈现出来。hcidump 通常用于快速捕获和查看蓝牙数据包,对于简单的调试和数据获取很有用。
笔者接下来会根据实际应用场景逐一介绍在Linux两种工具日志的抓取方式和解析过程。
2 btmon实现日志获取/解析
以蓝牙协议栈bluez-5.47为例,btmon源码在bluez-5.47/monitor/,BlueZ编译成功以后,生成的btmon二进制文件在该路径下获取。
2.1 日志获取
btmon的用法如下所示:
/var/mnt/usbstate/back/bluetooth # ./btmon -h
btmon - Bluetooth monitor
Usage:
btmon [options]
options:
-r, --read <file> Read traces in btsnoop format
-w, --write <file> Save traces in btsnoop format
-a, --analyze <file> Analyze traces in btsnoop format
-s, --server <socket> Start monitor server socket
-p, --priority <level> Show only priority or lower
-i, --index <num> Show only specified controller
-d, --tty <tty> Read data from TTY
-B, --tty-speed <rate> Set TTY speed (default 115200)
-t, --time Show time instead of time offset
-T, --date Show time and date information
-S, --sco Dump SCO traffic
-A, --a2dp Dump A2DP stream traffic
-E, --ellisys [ip] Send Ellisys HCI Injection
-h, --help Show help options
常用的参数如下所示:
-w:将数据写入文件xxx.log中,该文件最好为未存在的文件,否则可能会有问题
-T:显示时间和日期
-s:开始监控的socket
-r:读取之前-w写入的文件,仅支持btmon -r xxx.log读取
-i:监控的控制设备,一般为hci0
用法示例1:日志文件保存:btmon -i hci0 -w btmon_debug.log &(&符比较重要,正常抓日志都是需要保持后台运行)
用法示例2:日志文件内容读:btmon -r btmon_debug.log
用法示例3:将读出的转为(重定向)txt文件,方便文本查看btmon -r btmon_debug.log > 1.txt
简单地,后台可以使用类似:btmon -i hci0 -w btmon_debug.log &的方式抓取linux应用的蓝牙日志。该指令在运行的时候,会直接在当前终端打印日志内容,如下图所示,在某些时候,比如单纯做一些统计的时候或者有目的地确定一些数据点,通过直接看打印,反而更直观。
2.2 日志解析
抓取的btsnoop日志*.log文件可以用wireshark、Ellisys Bluetooth Analyzer等工具打开
使用wireshark解析.log文件操作顺序如下图所示
使用Ellisys Bluetooth Analyzer解析日志文件的操作顺序为File->Import->HCI data,commands and events->BT Snoop HCI,然后加载.log文件。如下图 所示。
解析出来的数据可以在页面上操作查看,此过程和解析一些网络协议包的内容类似,大同小异。但是相比之下,Ellisys Bluetooth Analyzer的UI更友好,且专业性更好一点。如下图所示
至于对解析出的每个HCI包的内容分析,在笔者后面的文章会逐步向大家讲解。
3 hcidump实现日志获取/解析
以蓝牙协议栈bluez-5.47为例,btmon源码在bluez-5.47/tools/,BlueZ编译成功以后,生成的hcidump二进制文件在该路径下获取。
3.1 日志获取
hcidump的用法如下图所示
/var/mnt/usbstate/back/bluetooth # ./hcidump -h
Usage: hcidump [OPTION...] [filter]
-i, --device=hci_dev HCI device
-l, --snap-len=len Snap len (in bytes)
-p, --psm=psm Default PSM
-m, --manufacturer=compid Default manufacturer
-w, --save-dump=file Save dump to a file
-r, --read-dump=file Read dump from a file
-t, --ts Display time stamps
-a, --ascii Dump data in ascii
-x, --hex Dump data in hex
-X, --ext Dump data in hex and ascii
-R, --raw Dump raw data
-C, --cmtp=psm PSM for CMTP
-H, --hcrp=psm PSM for HCRP
-O, --obex=port Channel/PSM for OBEX
-P, --ppp=channel Channel for PPP
-S, --sap=channel Channel for SAP
-D, --pppdump=file Extract PPP traffic
-A, --audio=file Extract SCO audio data
-Y, --novendor No vendor commands or events
-h, --help Give this help list
-v, --version Give version information
--usage Give a short usage message
常用的参数如下所示
-i:选定设备节点,一般后接hci0
-w:保存数据包到文件,一般后接形如xxx.cfa的文件格式
-t:显示时间戳
-r:读取文件内容,后接要读取的文件名
同理简单地,后台可以使用类似:./hcidump -i hci0 -t -w bt_debug.cfa &的命令来抓取蓝牙hci日志。在Linux终端执行结果如下所示
/var/mnt/usbstate/back/bluetooth # ./hcidump -i hci0 -t -w bt_debug.cfa &
/var/mnt/usbstate/back/bluetooth # HCI sniffer - Bluetooth packet analyzer ver 5.47
btsnoop version: 1 datalink type: 1002
device: hci0 snap_len: 1500 filter: 0x0
3.2 日志解析
hcidump获取到日志文件*.cfa后,可以采用wireshark打开,如下图所示打开的是一份抓取环境中蓝牙广播数据的日志文件
对于数据的解析,wireshark也能提供比较完备的UI和操作。另一方面.cfa的蓝牙日志文件用Ellisys Bluetooth Analyzer其实也能打开。
4 总结
两种抓取蓝牙日志的方法,在通常的蓝牙应用中区别不大,笔者因为习惯用btmon来分析BlueZ运行过程中的蓝牙日志,所以更倾向于推荐该工具来抓取蓝牙数据,再者也可以搭配比较专业的蓝牙分析工具,使用起来比较顺手.
hcidump一般蓝牙芯片原厂(比如Realtek)比较推荐使用,当我们应用他们的蓝牙方案出现问题,他们会要求我们复现场景并且抓取hcidump日志提供分析问题。
后续如果有更方便的抓取蓝牙log和分析log的工具,会持续分享给大家。
更多推荐
所有评论(0)