【问题标题】:Disable support for Random Address for LE Advertising in Bluez 5.31在 Bluez 5.31 中禁用对 LE 广告的随机地址的支持
【发布时间】:2015-10-17 14:38:59
【问题描述】:

我正在使用 BT/LE 双模式加密狗在仅 LE 模式下运行自定义制造数据(作为 OOB 介质)。 该功能在 ubuntu 桌面系统(KERNEL - 3.13.0-57-generic)中运行良好,但在 raspbian(KERNEL - 4.0.9+)中失败。我猜它与 hci 的内核实现有关,但我不确定。

在 Ubuntu 中,在仅 LE 模式下运行双模式加密狗,我可以使用 hcitool (lescan) 查看我的 mac 地址。但是如果我在 raspbian 中运行它,我可以看到随机地址广告而不是公共地址广告。

从 btmgmt 使用 static-addr 命令也不起作用。 (仍然得到随机地址)。

那么,如何禁用随机地址或如何使用公共地址而不是随机地址?

提前致谢。

【问题讨论】:

    标签: ubuntu bluetooth-lowenergy raspbian bluez


    【解决方案1】:

    这似乎是由激活的隐私功能触发的。

    参见Core 4.0 Specification10.7.1 Privacy Feature in a Peripheral 部分。

    外设中对隐私功能的支持取决于存在 以及两个特性的值:Peripheral Privacy Flag 第 12.3 节中定义的特征和重新连接地址 12.4 节定义的特性。当外围设备 Privacy Flag 特性设置为 1,启用隐私(也 称为启用隐私的外围设备)。

    还可以查看12.3 PERIPHERAL PRIVACY FLAG CHARACTERISTIC 以获取有关属性句柄和值的详细信息,也许您可​​以在您的设备中发现它。

    为什么Ubuntu和Raspi有区别,我只能猜测版本不完全一样。

    您也可以尝试与btmon 核对,如果您发现发送到您的蓝牙模块的广播配置的 hci 命令有任何差异。

    【讨论】:

    • 感谢您的回答。版本完全相同。事实上,它是从具有完全相同选项的相同源编译的。我的猜测是内核 HCI 驱动程序实现可能会有所不同。再次感谢您的指示,我将使用 btmgmt 禁用隐私并回复您。
    • 哦,对了,我只是看到我们可以使用btmgmt 设置/取消设置!太好了!
    【解决方案2】:

    这确实是内核蓝牙驱动的功能。新实现具有随机地址功能。但这可以通过 btmgmt 通过给出以下命令来解决。

    1. 关闭电源(需要禁用经典 BT) 关机
    2. 开启 le(你必须有一个控制器才能移除经典的 BT 控制器)

      打开

    3. 关闭 bredr

      育种者关闭

    4. 打开电源

      开机

    5. 设置可连接(这将使hci驱动使用公共地址而不是随机地址)

      可连接

    6. 设置可发现(没有这个,bluez 将丢弃设备,因此将无法通过 dbus api 使用。除非您更改 bluez 实现)

      发现

    7. 开始广告

      做广告

    希望对你有帮助

    【讨论】:

    • 必须有一种方法可以在不更改为可连接的情况下关闭地址随机化。也许这只是 btmgmt 的问题,它会自动设置很多参数。隐私开/关对该行为没有任何影响?
    • @Dominik Gebhart 将隐私设置为关闭对随机地址行为没有任何影响。 AFAIK,btmgmt 不会自动设置这些参数。事实上,它使用了 bluez 守护进程中使用的函数,例如(扫描、连接)。
    • 是的,你是对的,我刚刚浏览了代码,它使用了 doc/mgmt-api.txt 中引用的 bluez mgmt api。相当混乱这一切。我有一个应用程序使用在短时间内发送的不可连接广告,我使用公共地址在另一个应用程序中查找。直接使用hcitool 设置这些参数效果很好。我希望btmgmt 将允许对这些设置进行相同范围的访问,但看起来它没有......可惜。
    • 只是澄清一下,最初的问题一定来自于使用btmgmt 设置参数,它以这种方式更改了广告配置。如果需要对广告设置进行更细粒度的访问,则需要使用核心规范中指定的直接 HCI 命令。 Bluez hcitool 允许您直接发送这些。
    • @DominikGebhart 仅供参考,hcitool 直接使用内核驱动程序的 ioctls (libbluetooth);它不依赖于蓝牙(即 bluez)。另一方面 btmgmt 直接依赖于蓝牙。这两者是不相容的。因此,例如,如果您使用 hcitool/hciconfig 启动扫描请求;您很可能无法通过 d-bus / btmgmt 获得响应。这可能会使一些琐碎的操作变得复杂(例如 - 使用 hcidump 获取制造数据,而它们可通过 dbus 获得)。但是目前dbus api非常不稳定,很多功能都缺乏。
    猜你喜欢
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多