【问题标题】:Bluetooth HCI snoop log not generated未生成蓝牙 HCI 监听日志
【发布时间】:2015-04-11 07:18:43
【问题描述】:

我运行的是 Android 4.4.2,并启用了此处所述的“蓝牙 HCI 监听日志”Sniffing/logging your own Android Bluetooth traffic

打开和关闭蓝牙后,我重新启动了手机。我在预期的位置找不到日志文件:

$ adb pull /sdcard/btsnoop_hci.log
remote object '/sdcard/btsnoop_hci.log' does not exist

如何访问 btsnoop_hci.log?

【问题讨论】:

  • 标记为正确的答案实际上并不是正确的答案。请滚动到实际正确答案的最高投票答案。
  • 在 android O, samsung 上试试这个:adb pull /data/log/bt/btsnoop_hci.log

标签: android bluetooth android-4.4-kitkat android-bluetooth s5


【解决方案1】:

更新:btsnoop hci 日志似乎正在逐步退出许多手机上的用户可访问区域。假设您启用了 hci 日志记录,您可以获得错误报告

adb bugreport anewbugreportfolder

然后解压文件夹。如果幸运的话,有一个“FS”文件夹,其中包含 btsnoop_hci.log 日志记录了几层(不知道为什么有些手机有这个,有些没有。)如果你没有它,抓住错误报告文本看起来像这样的文件

bugreport-2018-08-01-15-08-01.txt

对它运行 btsnooz.py。 Per Google`s instructions,

To extract snoop logs from the bug report, use the btsnooz script.

Get btsnooz.py.
Extract the text version of the bug report.
Run btsnooz.py on the text version of the bug report:

btsnooz.py BUG_REPORT.txt > BTSNOOP.log

截至 21 年 1 月 12 日,btsnooz 的链接在这里:https://android.googlesource.com/platform/packages/modules/Bluetooth/+/refs/heads/master/system/tools/scripts/btsnooz.py

传统答案:

您可以通过阅读 bt_stack.conf 文件来查看手机存储 hci 日志的位置。试试

adb shell cat /etc/bluetooth/bt_stack.conf

你会看到一条看起来像这样的线

# BtSnoop log output file
BtSnoopFileName =/sdcard/btsnoop_hci.log <--your file location

通常但不总是(取决于手机)在 sdcard 的根目录上。此配置文件中还有一行可以反映 hci 日志记录是否实际开启

# EnableBtSnoop logging function
# valid value : true , false
BtSnoopLogOutput=false

在开发人员选项中切换“启用蓝牙 HCI 监听日志”选项应将其更改为

# EnableBtSnoop logging function
# valid value : true , false
BtSnoopLogOutput=true

我说“应该”,因为对于某些手机,这不会更新此文件。你应该:

  1. 读取 bt_stack.conf 文件。查看 HCI 日志的位置以及是否实际启用了 bt snoop 日志记录
  2. 如果开发人员选项显示 btsnoop_hci 日志记录已打开,但 bt_stack.conf 文件显示已关闭,请尝试重启蓝牙和/或您的手机。
  3. 如果您的手机已root,请手动设置BtSnoopLogOutput=true

如果这 3 个选项都不起作用,那么您就不走运了。 BT Snoop hci 日志记录在不​​同手机之间有点不一致。我见过一些手机,无论如何我都无法让它工作,但在大多数情况下,你应该能够让它工作。不需要root手机。

【讨论】:

  • 如何在有根手机上设置 set BtSnoopLogOutput=true?
  • 最简单的方法是拉取 bt_stack.conf 文件,然后在文本编辑器中将“False”更改为“True”,然后将其推回正确的目录。请注意,您可能需要更改手机文件系统上的目录权限才能将其重新推送,如果您是 root 用户,这应该不是问题。
  • Google Pixel 似乎卡在BtSnoopLogOutput=false
  • 您可能会在其他一些地方找到bt_stack.conf 文件是/system/etc//vendor/etc/
  • 我在错误报告 zip 中找到了我的:FS\data\misc\bluetooth\logs
【解决方案2】:

在 Nexus 5X 和 Pixel C Android O 上,您必须启用蓝牙,在开发者设置中启用 HCI 监听,禁用并重新启用蓝牙并重新启动。

之后,您可以通过转到开发人员设置并“获取错误报告”来获取日志并获取完整日志。

文件 bt_stack.conf 没有改变,在 /sdcard 上没有新文件,就像在其他设备上一样

【讨论】:

  • 我可以确认这是唯一适合我的方法。我在 Android 8.1 Oreo 上使用 Pixel 2 XL。 “获取错误报告”功能会生成一个存档,日志文件将在该存档中的 FS/data/misc/bluetooth/logs/btsnoop_hci.log
  • 这确实是在大多数手机上无需任何生根、USB 连接等即可工作的最一致的方法。
  • 这适用于我的三星 Galaxy S7。错误报告包含一个文件 FS/data/log/bt/btsnoop_hci.log,可以使用 WireShark 打开。
  • 您确定需要重新启动吗?如果不这样做,它对我有用。
【解决方案3】:

对于用户版本的 Pixel/Nexus,您可能无权拉出 /data/misc/bluetooth/logs/btsnoop_hci.log。 您可以像这样获取 hci 日志:

adb shell dumpsys bluetooth_manager
adb bugreport > BUG_REPORT.txt

您将获得一个 BUG_REPORT.txt 和 zip 文件。 HCI 日志将在 zip 文件的 FS\data\misc\bluetooth\logs 下找到。

【讨论】:

  • adb shell dumpsys bluetooth_manager ; adb bugreport > BUG_REPORT.txt
  • 这只是让btsnoop_hci.log出现在我的小米9上。
【解决方案4】:

在 OnePlus 6(A6003,Android 9)手机(我相信其他 OnePlus 手机)上,位置是:

/sdcard/oem_log/btsnoop

这个位置不需要root也不需要通过adb访问。该日志将具有.cfa 扩展名,并采用二进制pcap 格式,适用于分析,例如Wireshark.

【讨论】:

  • 是的,但仍然不可读。你对这些日志做了什么吗?它不是 utf-8,我无法用任何编码格式对其进行解码。我只有IQOS 2.4 ?????[][]???? 等。如何阅读?!一加 7 专业版
  • @Kamil 这是一种二进制格式 (pcap),您可以使用例如Wireshark (wireshark.org) 只需打开文件即可。我将此添加到我的答案中。
  • 好的,我知道了。我只是确定它的明文日志。非常感谢。
  • 天啊老兄,非常感谢!我正好有一个 OP6,文件就在那里,就像你说的那样。为什么位置不标准?
【解决方案5】:

这就是为我解决的问题:

1)adb shell cat /etc/bluetooth/bt_stack.conf

查看日志文件名是什么,对我来说是:

/data/log/bt/btsnoop_hci.log

棘手的部分是生成的文件在其名称中带有时间戳,因此您将无法仅通过使用来获取它们(它)

adb pull /data/log/bt/btsnoop_hci.log

2) 改用adb pull /data/log/bt/,您将获得整个文件夹以及所有日志

【讨论】:

    【解决方案6】:

    我的 bt_stack.conf 显示 /sdcard/Android/data/btsnoop_hci.log

    【讨论】:

    • 每个设备都可能不同。此日志文件的位置在 /etc/bluetooth/bt_stack.conf 中指定
    【解决方案7】:

    对于三星 s8,神奇的位置是 /data/log/bt/
    你需要root权限才能获得它

    【讨论】:

    • 感谢您的支持,但另请参阅 PaulFreund 对非生根解决方案的回答。
    【解决方案8】:

    @TwinPrimesAreEz 非常好,但还有第四个选项;至少在您的设备植根时。调用:

    /system/bin/btsnoop
    

    Somewhere此工具已被删除,但它仍然存在于我的设备上。更重要的是,它似乎是在启用蓝牙时调用的。在logcat 我看到:“btsnoop_dump: : snoop_log_open: 无法打开目录条目”。不知道为什么它无法打开该目录(顺便说一句,它是/data/media/0)但我怀疑这个工具会以某种方式干扰集成到 Android 中的新 HCI 侦听选项。但是,如果您直接调用该工具(例如通过adb shellTerminal emulator),它就可以工作。对我来说,它创建了文件/data/media/0/hci_snoop20180203164422.cfa

    【讨论】:

    • @Mans:是的,您可以使用 Wireshark 打开它。
    【解决方案9】:

    以上所有内容都很有帮助——在 S8 和 Windows 10 上,Fukai/Rene 关于使用错误报告的选项对我来说是最好的。 (文件路径略有不同,但 zip 文件中确实有日志。)

    但是,我后来注意到我在 Android 中收到了“分享您的错误报告”的通知,当我选择通知时,我可以选择通过电子邮件发送/保存到 G Drive/等。通过电子邮件将 txt 和 zip 发送给我自己,就是这样,跳过了 adb 和其他的繁琐。

    【讨论】:

      【解决方案10】:

      注意:此答案不是正确答案。 请滚动到投票最高的答案以获取正确答案。

      根据我的经验,蓝牙 HCI 侦听功能需要您的设备植根。在我有根的三星 Galaxy S GT-I9000 上它工作正常,而在我的非根的 Galaxy S3 Neo 上这个功能不起作用。

      此外,您应该确保您没有意外删除该文件。每当我删除文件时,我都必须重新启用蓝牙监听功能,以使系统重新创建日志文件。

      【讨论】:

      • 这绝对不是真的。手机当然不需要 root 来收集 HCI 日志
      • 好的,谢谢指正。我通常只使用有根设备和无谷歌设备。我只在非root手机上尝试过一次。因此,我在回答中写了“根据我的经验”。我要删除我的答案。
      • 是否有说明 HCI 侦听需要 root 的文档?
      • 我同意卢卡斯的观点。我只在有根手机上看到过这个。有人试过用无根手机吗?
      • 我有两部无根手机,它们创建了这个文件,但在不同的位置。查看下一个答案以找到正确的路径。
      猜你喜欢
      • 2016-07-19
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 2015-04-27
      • 2014-10-07
      • 1970-01-01
      相关资源
      最近更新 更多