Go 程序错误(Bettercap 2)取决于我在运行 ble 扫描时在 Ubuntu/Raspberry Pi OS 上使用的蓝牙加密狗
Posted
技术标签:
【中文标题】Go 程序错误(Bettercap 2)取决于我在运行 ble 扫描时在 Ubuntu/Raspberry Pi OS 上使用的蓝牙加密狗【英文标题】:Error with Go program ( Bettercap 2 ) depending on which bluetooth dongle I use on Ubuntu/Raspberry Pi OS when running ble scan 【发布时间】:2021-11-02 16:25:57 【问题描述】:我在 Ubuntu 20.04 和 Raspberry Pi OS 5.10 上使用它,但这不是 Linux 相关问题。
当我使用名为 Bettercap 2 的 Go 程序(https://www.bettercap.org/ 和存储库:https://github.com/bettercap/bettercap)时,我遇到了一个问题,当我使用它的功能通过不同的蓝牙加密狗扫描蓝牙设备“ble.recon on”时。
当我将它与使用 Realtek RTL8761b 驱动程序 (MPOW MPBH456AB) 的加密狗一起使用时,您可以在亚马逊上找到它运行良好,但是当我使用 NordicSemi nrf52840 加密狗 (https://www.nordicsemi.com/Products/Development-hardware/nrf52840-dongle) 这是我的目标,使用 Zephyr RTOS 的 hci_usb 示例 (https://github.com/zephyrproject-rtos/zephyr/tree/main/samples/bluetooth/hci_usb) 闪烁,该示例应该将任何使用蓝牙的微控制器变成任何计算机都应该识别的常规蓝牙加密狗,它会引发此错误:
>> ble.recon on
panic: runtime error: slice bounds out of range [:1] with capacity 0
goroutine 1 [running]:
github.com/bettercap/gatt/linux/cmd.(*Cmd).SendAndCheckResp(0x1c637c0, 0xa0c760, 0x1c64fe8, 0x1c6501c, 0x1, 0x1, 0x0, 0x0)
/home/pi/go/pkg/mod/github.com/bettercap/gatt@v0.0.0-20210514133428-df6e615f2f67/linux/cmd/cmd.go:98 +0x1b4
github.com/bettercap/gatt/linux.(*HCI).resetDevice(0x18ac0a0, 0x93dc10, 0x18ac0a0)
/home/pi/go/pkg/mod/github.com/bettercap/gatt@v0.0.0-20210514133428-df6e615f2f67/linux/hci.go:273 +0x2f0
github.com/bettercap/gatt/linux.NewHCI(0xffffffff, 0x184fd01, 0xff, 0x2, 0x0, 0x0)
/home/pi/go/pkg/mod/github.com/bettercap/gatt@v0.0.0-20210514133428-df6e615f2f67/linux/hci.go:90 +0x4c0
github.com/bettercap/gatt.NewDevice(0x184fd1c, 0x2, 0x2, 0x3c, 0x184fd24, 0x1, 0x1)
/home/pi/go/pkg/mod/github.com/bettercap/gatt@v0.0.0-20210514133428-df6e615f2f67/device_linux.go:57 +0x114
github.com/bettercap/bettercap/modules/ble.(*BLERecon).Configure(0x18a2780, 0x0, 0x4)
/home/pi/go/pkg/mod/github.com/bettercap/bettercap@v2.24.1+incompatible/modules/ble/ble_recon.go:165 +0x1cc
github.com/bettercap/bettercap/modules/ble.(*BLERecon).Start(0x18a2780, 0x1, 0x1b2c001)
/home/pi/go/pkg/mod/github.com/bettercap/bettercap@v2.24.1+incompatible/modules/ble/ble_recon.go:183 +0x1c
github.com/bettercap/bettercap/modules/ble.NewBLERecon.func1(0x0, 0x0, 0x0, 0x84f358, 0xc)
/home/pi/go/pkg/mod/github.com/bettercap/bettercap@v2.24.1+incompatible/modules/ble/ble_recon.go:56 +0x1c
github.com/bettercap/bettercap/session.(*ModuleHandler).Exec(0x1b2c0c0, 0x0, 0x0, 0x0, 0x0, 0x0)
/home/pi/go/pkg/mod/github.com/bettercap/bettercap@v2.24.1+incompatible/session/module_handler.go:74 +0x80
github.com/bettercap/bettercap/session.(*Session).Run(0x18fb2c0, 0x1c64e30, 0xc, 0x1, 0x1)
/home/pi/go/pkg/mod/github.com/bettercap/bettercap@v2.24.1+incompatible/session/session.go:416 +0x284
main.main()
/home/pi/go/pkg/mod/github.com/bettercap/bettercap@v2.24.1+incompatible/main.go:94 +0x8c8
我不知道这意味着什么,因为我不是 Go 开发人员,也从未使用过这种语言,我查看了错误,它似乎在代码中但不了解 Go,我更愿意先问我修改任何东西。
只有当我使用 nrf 加密狗时才会出现问题,否则它可以与主机的蓝牙和其他 realtek 加密狗一起使用。
nrf dongle 与 BlueZ 堆栈一起使用,结果如下:
bluetoothctl(有BD地址) 扫描确实有效
$ sudo bluetoothctl
Agent registered
[bluetooth]# list
Controller EB:XX:XX:XX:XX:XX BlueZ 5.50 [default]
btmgmt(找到控制器) 扫描确实有效
$ sudo btmgmt --index 0
[hci0]# auto-power
Found controller with index 0
[hci0]# find -l
但是,虽然 hciconfig 和 hcitool 已被弃用,但它可以识别 realtek 加密狗,但对于这个,结果如下:
hciconfig(无BD地址)
$ hciconfig
hci0: Type: Primary Bus: USB
BD Address: 00:00:00:00:00:00 ACL MTU: 27:7 SCO MTU: 0:0
UP RUNNING
RX bytes:1593 acl:0 sco:0 events:88 errors:0
TX bytes:285 acl:0 sco:0 commands:51 errors:0
hcitool(找不到控制器)
$ hcitool scan
Scanning ...
Inquiry failed: Operation not supported
所以,我认为加密狗与 BlueZ 配合得很好,作为 Linux 官方蓝牙堆栈,这是一个好兆头,但我认为 Bettercap 也在使用 BlueZ,从这个意义上说,加密狗应该可以工作。
我认为不需要为加密狗安装任何驱动程序,因为当它被刷入 (J-Link) 时,它会变成一个通用的蓝牙加密狗。
你知道问题可能是什么吗?
【问题讨论】:
您是否尝试过在他们自己的存储库上联系开发人员?报告了一个问题,并实施了修复github.com/bettercap/bettercap/issues/612 @Braiam 显然这个问题是关于他们的 net_sniff 模块而不是 ble.recon,我认为它不适用于同样的问题并且开发人员没有回答,我们在过去 2 中打开了两个问题几个月,但没有人回答,如果您知道问题是什么以及如何解决它,这几乎可以启动我们的公司 【参考方案1】:我相信错误来自https://github.com/bettercap/gatt/blob/master/linux/cmd/cmd.go#L98
程序正在尝试向设备写入内容,并期望只要没有发送错误,它就会收到响应。但显然 Send 调用成功但收到一个空响应。
我建议打开一个问题over there 并提出您的问题。
【讨论】:
首先,感谢您花时间查看问题并查看代码。您能解释一下为什么这可能是 Bettercap/gatt 问题而不是 Bettercap/bettercap 问题吗?另外,如果你能解决这个人,我可以给你金钱补偿,这对我解决这个问题很重要,很紧迫 我在库的 GitHub 存储库上提交了与此问题相关的 issue。希望在某种程度上有所帮助 非常感谢@Gealber,你太棒了。你知道我是否可以修改 nrf52840 加密狗上的 rsp 东西或将样本闪入其中吗?还是硬件问题?我想既然它与一个便宜的蓝牙加密狗一起工作,它一定可以“添加”到 nrf52840 加密狗,对吧? 不幸的是,我昨天才第一次阅读该代码,所以不知道它的真正作用。我知道这个问题是任何编程语言都面临的典型问题,即在尝试访问数组元素时检查数组的边界。但我对图书馆的了解并不能为您提供更多帮助。 还没有。我实际上订购了一个 NordicSemi nrf52840 加密狗,所以会看看发生了什么以上是关于Go 程序错误(Bettercap 2)取决于我在运行 ble 扫描时在 Ubuntu/Raspberry Pi OS 上使用的蓝牙加密狗的主要内容,如果未能解决你的问题,请参考以下文章
在闪亮的应用程序中选择多个输入时,为啥错误取决于选择输入的顺序?