问题标签 [l2cap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
919 浏览

c - 通过 HCI 建立 L2CAP 连接

我一直在尝试通过套接字在两个 NRF52-52840 USB 加密狗之间建立 BLE 连接并发送数据。此外,我对通过 HCI 层发送 L2CAP 数据感兴趣。

我能够从客户端在两个设备之间建立 LE 连接,为此我还获得了hci_handle来传输数据,但我不确定如何在服务器端获取句柄。

我尝试在服务器上同时打开 HCI 和 L2CAP 套接字。使用前一种方法时,listen()accept()函数会出错,因为 HCI 套接字不支持这些操作。对于后一种方法,执行在accept()处停止。

我是在做一些概念上的错误还是由于错误的 PSM/CID 值(我在 BT 规范的帮助下尝试了一堆)?我希望你能指出一个明显的错误。

带有 HCI 套接字的客户端:

带有 L2CAP 套接字的服务器:

连接已正确建立,因为我可以通过bluetoothctl读取远程设备的服务和特征,但未返回句柄。

编辑#1

事实证明,您不能像这样直接写入套接字,这就是为什么btmon也没有捕获任何输出的原因。我已经实现了使用 L2CAP 标头封装数据并通过 HCI 套接字发送数据的功能。以下示例实现了“ATT:交换 MTU 请求”。

这现在被btmon这样捕获:

并被hcidump --raw这样捕获:

这也被目标系统上的btmonhcidump捕获。

我正在继续对如何在服务器端打开句柄进行故障排除。欢迎任何想法。

编辑#2

所以我也设法在服务器端接收消息。事实证明,在尝试读取服务器端的任何信息之前,您必须首先为 HCI 套接字通道设置正确的过滤器。在这里,我为任何感兴趣的人创建了一个演示功能。客户端正在运行与编辑#1 中演示的代码类似的代码。

这个话题现在可以关闭了,因为我已经设法解决了这个问题。

0 投票
1 回答
225 浏览

android - 是否可以通过 L2CAP 连接 iOS (11.4) 和 Android (10+)

是否可以通过 L2CAP 连接 iOS (11.4) 和 Android (10+) ?

我知道通过 BLE 它可以工作,问题是针对 L2cap 交叉功能 ios/android - 有人吗?

0 投票
2 回答
258 浏览

ios - 是否可以使用 CBPeripheral 通过蓝牙从 iOS 连接到 macOS

我正在尝试使用蓝牙连接 iOS 和 macOS。它们已经通过蓝牙连接但是当我尝试使用 CBCentralManager 以编程方式快速检索它们时,didDiscover 外围设备它没有列出它。我正在尝试打开一个外围设备.openL2CAPChannel(0x1001 ) 使用 macOS 但我无法将外围设备识别为 macOS

0 投票
0 回答
129 浏览

ios - MacOS中IOBluetooth框架中的L2CapChannel能否用iOS中Core蓝牙框架中的L2capChannel进行评论

我正在尝试在 Mac OS 和 iOS 之间进行通信以来回发送数据。在 Mac OS IOBluetooth 框架中提供 L2cap 通道,但是当我打开它并使用 iOS Core Bluetooth L2CAP 时它不会连接到通道。我如何让它们像无论框架如何,l2capchannel 都应该相同。任何想法或建议

0 投票
0 回答
1388 浏览

bluetooth - 如何在两个设备之间创建蓝牙 L2CAP 连接?

Android 10发布了对BLE CoC 连接的支持,所以我想通过制作两个简单的应用程序来尝试这个android 10,它们可以相互连接l2Cap并交换“Hello World”。

我写了两个应用程序,服务器应用程序和客户端应用程序,它们在清单文件中都具有他们需要的所有权限,我在两部Android 10手机上运行这些应用程序,但连接没有建立。

这是我的服务器应用程序代码的相关部分:

变量 int psm 是我在客户端应用程序中使用的 PSM 值。

这是我的客户端应用程序代码的相关部分:

其中字符串PAIRED_DEVICE_NAME是预期设备的名称,由于设备已蓝牙配对,因此已成功找到。Int psm_value 是来自服务器应用程序的 PSM 值。我怀疑这可能是一个问题,因为我每次尝试测试时都从服务器硬编码了这个值(每次都是不同的值,因为这个值是动态分配的,它会持续到你关闭服务器套接字)。

所以我的问题是如何获得远程 PSM 值?以及如何连接这些设备,因为如果我使用 RFCOMM 连接,这段代码可以完美运行。使用此代码,我bluetoothSocket.connect()从客户端应用程序中收到错误消息:

java.io.IOException:读取失败,套接字可能关闭或超时,读取 ret:-1

谢谢!

0 投票
1 回答
1200 浏览

android - Android 10 L2CAP 连接 IOException 超时 Wii 平衡板

背景

很久以前,我的任务是为 Wii 平衡板制作一个 android 应用程序,经过一番折腾后,我发现 android 不再支持 L2CAP。更多的研究导致它被重新添加到 Android 10 中。随着 Android 10 的推出,我现在一直在尝试破解它。

问题

所以我现在的简单目标是与 Wii 平衡板建立连接。

我的连接方法是:

  • 开始发现

  • 将发现的蓝牙设备添加到列表

  • 当您单击设备时,它会尝试打开一个套接字,如下所示:

    bluetoothSocket = btDevice.createInsecureL2capChannel(port);

  • 正如WiiBrew网站上提到的,我使用 psm 值 0x13 作为输入,使用 0x11 作为输出。

  • 然后我使用bluetoothSocket.connect并继续接收 IOException(超时错误)

  • 我也尝试过使用两者createL2capChannelcreateInsecureL2capChannel获得相同的结果

  • 我能够成功地使用手机 BT 地址与设备配对btDevice.createBond(),然后向后使用手机 BT 地址.setpin(),Wii 平衡板只是充当“哑”输入设备。(不确定是否需要配对/好主意)

以上是我尝试连接的简化流程。我还尝试使用BalanceBoard.javaPaul Burton 的fitscales repo 更新所有旧蓝牙代码,但我仍然会超时。

0 投票
0 回答
1383 浏览

bluetooth - 发送 GAP ACL L2CAP 数据包

要提供有关此问题的一些背景知识,请尝试测试 CVE-2020-0022。

不知道最后怎么触发。

编写了发送分段 ACL L2CAP 数据包的代码,所以也许有人觉得它有用。

在您将 ACL MTU 更改为所需的之前,即

下面还尝试更改连接 MTU,但我不确定它是否有效以及是否需要这样做。来自的响应不是零散的,正在考虑前面提到的将实现这一点。

您可以在屏幕截图中看到它:

在此处输入图像描述

但是,无法触发该错误。

来自移动蓝牙的日志:

以某种方式触发它

如您所见,上面不是。

以为,一些棘手的碎片会导致它....

我将结束这个问题。

更新1:

重新开放...

好的,我想我明白了

以下是移动(Android)蓝牙子系统日志:

仍在努力使进程崩溃

仍在等待作者的官方 Writeup 和 PoC ......同时,如果我在这里进一步弄清楚,将会发布:

https://github.com/marcinguy/CVE-2020-0022/blob/master/README.md

0 投票
1 回答
194 浏览

android - 为什么 android.bluetooth.BluetoothAdapter#listenUsingL2capOn(int) 无法访问?

这可能是一个新手问题,因为我对 Android 的经验有限,但由于某种原因我无法访问该方法android.bluetooth.BluetoothAdapter#listenUsingL2capOn(int)。它似乎是公开的,因此不确定为什么该符号未被识别。顺便说一句,如何在 android 上打开 L2CAP 蓝牙套接字服务器?我发现只有一个问题与此有关 -如何在 Android 中实例化 L2Cap 套接字?. 任何帮助,将不胜感激。

0 投票
0 回答
143 浏览

bluetooth - 关于蓝牙spp重传

我正在使用蓝牙 SPP 将数据从我的开发板传输到 Android 手机,我对 SPP 数据重传感到困惑。

根据蓝牙规范,如果发送方接收到 ARQN = 0 的响应数据包,则会重新传输数据包。但是,在我的空中数据包日志中,我看到很多 spp 重新传输而没有收到任何响应,我对此感到好奇。

我担心重传会降低我的吞吐量。

有谁知道为什么存在重传?谢谢。

在此处输入图像描述

在此处输入图像描述

0 投票
0 回答
183 浏览

bluetooth-lowenergy - 为蓝牙低功耗设备实施 DTLS 握手

我正在尝试在两个 BLE 设备之间实现 DTLS 握手。为此,我想使用 BLE 的 L2CAP 通道与来自 DTLS 的消息进行通信。基本上,我想在 BLE 堆栈中的 L2CAP 的帮助下打开一个 DTLS 隧道。我为此使用了 mbedTLS 库。来自 MbedTLS 的文档(https://tls.mbed.org/kb/how-to/how-do-i-port-mbed-tls-to-a-new-environment-OS),我知道我需要设置 mbed_tls_ssl_set_bio() 函数,该函数具有与 BLE 顶层 (L2CAP) 通信的读写回调函数。我正在使用对话框的 DA14695 加密狗来实现。我不太确定需要编写以与 BLE 的 L2CAP 通道通信的读写回调函数。有使用 BLE 顶层打开 TLS/DTLS 隧道经验的人可以提供帮助。

提前致谢