安卓手机btsnoop文件

调试Android上的BLE应用,有时需要用到btsnoop文件以检查手机端的蓝牙行为。

理想情况下,手机端在开发者选项中打开蓝牙日志选项,即可生成btsnoop文件,但是不同的手机生成btsnoop文件的位置不同,难以查找,更甚者,许多手机完全关闭了这一功能。

本文介绍如何获知手机是否支持生成btsnoop文件,以及它的获取方式。

btsnoop配置信息

从网上下载Android调试命令行工具adb。

用USB连接Android手机,开启USB调试功能,然后在cmd窗口中执行:

adb shell cat system/etc/bluetooth/bt_stack.conf

将打印出btsnoop的使能即保存地址信息:

如果BtSnoopLogOutput无论如何都为false,那么这台手机无法输出btsnoop文件。如果能输出的话,BtSnoopFileName指示了保存位置。

btsnoop内容

如果手机不支持输出btsnoop,还有一个抢救方法。

在cmd窗口中执行:

adb shell dumpsys bluetooth_manager > dump.txt

该命令将蓝牙相关的信息保存在dump.txt文件中,打开dump.txt,在底部会看到以下形式的内容:

--- BEGIN:BTSNOOP_LOG_SUMMARY (18294 bytes in) ---
AovprobqogUAeJzlWwl4FdUVvndm3pqXvI2ErC+DwUDIBgnBEEAS
...
...
--- END:BTSNOOP_LOG_SUMMARY ---

这部分内容其实就是btsnoop文件压缩(deflate)再base64后的信息,我们将其解析出来,就能获得btsnoop文件。

Google已经提供了一个解析脚本:btsnooz.py

在cmd窗口中执行:

python2 btsnooz.py dump.txt > btsnoop.log
# 注意,这个脚本只支持Python2

就能获得我们期望的btsnoop文件。

btsnoop解析

把btsnoop.log拖到wireshark软件中,就能够解析出蓝牙的帧序列。

很不幸,当你这样操作时,wireshark会报错。

btsnoop有两种协议格式,version 1version 2Wireshark解析方法基于version 1,Google提供的这个脚本也是基于version 1。

然而version 1是淘汰的版本,我们手机产生的数据是基于version 2,版本不一致导致出错。

网络上诸多相关的帖子都在误导人。

TODO

现在我没有动力去研究btsnoop version 2,期待有大神能够挺身而出搞定它。

dump.txt文件的形成逻辑,实现脚本需要参考:link 1, link 2

(完)

1 thought on “安卓手机btsnoop文件”

  1. 对不起,对于我的Google翻译,问题是您需要在macos或linux上运行,Windows上的文件格式设置了错误的字符集,wireshark无法识别。

    Reply

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.