三星A51安卓10设备使用Wireshark的androiddump抓蓝牙流量无接口显示
核心触发原因
- 权限拦截是接口缺失的核心因素:androiddump生成蓝牙抓包接口的强制前置条件,是能够通过普通adb shell权限直接读取、实时跟踪设备端的
/data/misc/bluetooth/logs/btsnoop_hci.log文件。Android 10版本起谷歌全面收紧了内部私有存储路径的访问权限,叠加三星OneUI的定制安全策略,普通adb shell(对应uid 2000)对该蓝牙日志路径无任何读取权限,androiddump检测不到可访问的实时蓝牙日志流时,会直接跳过蓝牙接口的生成逻辑,仅输出可正常访问的Logcat类接口。 - 当前androiddump版本存在适配局限:你当前使用的1.1.0版本androiddump,仅能在Android 9及更早的原生系统、或已获取root权限的设备上正常识别蓝牙日志路径,对Android 10以上定制ROM的路径改动、权限差异未做兼容处理,即使手动开启了HCI snoop日志功能,也无法被工具正常检测到。
- 无需配置蓝牙服务端口:androiddump的蓝牙抓包能力是基于本地HCI日志文件的实时流跟踪实现,和蓝牙通信端口、ADB端口映射规则无任何关联,不存在需要额外配置端口的必要。
排查与解决操作步骤
- 第一步验证权限拦截问题,执行命令:
adb shell ls -l /data/misc/bluetooth/logs/
如果返回Permission denied,即可确认是权限拦截导致的接口缺失。 - 非root设备操作方案:
- 先在开发者选项中确认已开启启用蓝牙HCI信息收集日志,关闭后重新打开蓝牙开关,等待30秒让日志正常写入。
- 部分三星机型因定制安全策略,即使开启HCI snoop也不会将日志输出到公共存储路径,这种情况下可通过定时拉取最新bugreport包的方式获取最新蓝牙日志:每间隔10-15秒执行一次
adb bugreport命令,从压缩包中提取最新的btsnoop_hci文件导入Wireshark分析,虽非完全实时,但可获取完整的蓝牙流量记录。 - 部分机型开启HCI snoop后会将日志同步写入公共存储路径
/sdcard/Download/目录,可通过adb pull /sdcard/Download/btsnoop_hci.log ./将文件拉取到本地,Wireshark支持自动追踪本地btsnoop文件的实时写入变化,可实现类实时抓包效果。
- 已root设备操作方案:
- 给普通adb shell用户开放btsnoop日志的读取权限,执行命令:
adb shell su -c "chmod 666 /data/misc/bluetooth/logs/btsnoop_hci.log" - 重新执行
androiddump --extcap-interfaces,即可看到对应的蓝牙HCI snoop接口,直接在Wireshark中选择该接口即可启动实时蓝牙抓包。
- 给普通adb shell用户开放btsnoop日志的读取权限,执行命令:
内容的提问来源于stack exchange,提问作者Nicolas
相关产品推荐
相关产品推荐

