# #go #bluetooth #bluez #nrf52 #segger-jlink
Вопрос:
Я использую это в Ubuntu 20.04 и Raspberry Pi OS 5.10, но это не проблема, связанная с Linux.
У меня проблема с программой Go под названием Bettercap 2 ( https://www.bettercap.org/ и хранилище: https://github.com/bettercap/bettercap ) когда я использую его функцию для сканирования устройств Bluetooth «ble.recon on» с помощью другого ключа Bluetooth.
Когда я использую его с ключа, используя для Realtek RTL8761b водителей ( MPOW MPBH456AB ) вы можете найти на Amazon, он работает хорошо, но когда я использую NordicSemi nrf52840 донгл ( https://www.nordicsemi.com/Products/Development-hardware/nrf52840-dongle ) , который является моей целью, мелькнуло с Zephyr МРК hci_usb образца ( https://github.com/zephyrproject-rtos/zephyr/tree/main/samples/bluetooth/hci_usb ), который должен превратить любую микро контроллер с помощью Bluetooth в обычную Bluetooth-адаптер, что любой компьютер должен признать, он бросает эту ошибку:
>> 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, в противном случае он работает с Bluetooth хоста и другим ключом realtek.
Ключ nrf работает со стеком 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 ( без IP-адреса )
$ 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, будучи официальным стеком Bluetooth Linux, это хороший знак, но я подумал, что Bettercap также использует BlueZ, и в этом смысле ключ должен работать.
Я не думаю, что для этого ключа нужно устанавливать какие-либо драйверы, поскольку при его прошивке ( J-Link ) он превращается в универсальный ключ Bluetooth.
У вас есть какие-нибудь идеи, в чем может быть проблема ?
Комментарии:
1. Вы пробовали связаться с разработчиком в их собственном репозитории? Было сообщено о проблеме, и было реализовано исправление github.com/bettercap/bettercap/issues/612
2. @Braiam, по-видимому, эта проблема связана с их модулем net_sniff, а не с ble.recon, я не думаю, что это относится к одному и тому же, и разработчик не отвечает, мы открыли два вопроса за последние 2 месяца, но никто не ответил, если вы знаете, в чем проблема и как ее решить, это в значительной степени положит начало нашей компании
Ответ №1:
Я считаю, что ошибка исходит от https://github.com/bettercap/gatt/blob/master/linux/cmd/cmd.go#L98
Программа пытается что-то записать на устройство и ожидает, что оно получит ответ до тех пор, пока не было отправлено сообщение об ошибке. Но, по-видимому, вызов отправки прошел успешно, но получил пустой ответ.
Я бы предложил открыть там выпуск и задать ваш вопрос.
Комментарии:
1. Во-первых, спасибо вам за то, что нашли время взглянуть на проблему и просмотрели код. Можете ли вы объяснить, почему это может быть проблемой Bettercap/gatt, а не проблемой Bettercap/bettercap ? Также, если вы сможете решить эту проблему, я могу предложить вам денежную компенсацию, это очень важно для меня, чтобы решить эту проблему, и это срочно
2. Я отправил вопрос , связанный с этой проблемой, в репозиторий библиотеки на GitHub. Надеюсь, это каким-то образом поможет
3. Большое вам спасибо @Gealber , вы потрясающий. Не знаете ли вы, могу ли я изменить rsp на ключ nrf52840 или образец, вставленный в него ? или это проблема с оборудованием ? Я подумал, что, поскольку он работал с дешевым ключом Bluetooth, должна быть возможность «добавить» его в ключ nrf52840, верно ?
4. К сожалению, я только вчера впервые прочитал этот код, так что понятия не имею, что он на самом деле делает. Я знаю, что эта проблема является типичной проблемой, с которой сталкивается любой язык программирования, который проверяет границы массива при попытке доступа к его элементам. Но я не знаю библиотеку так, чтобы мог помочь вам больше.
5. Ещё нет. Я на самом деле заказал ключ NordicSemi nrf52840, так что посмотрим, что происходит