从抓包中的Handle获取蓝牙ATT特征UUID

问题描述 投票:0回答:1

我正在反转跑步机使用的协议,尝试制作一个不那么糟糕的应用程序。

我想我已经从一些数据包捕获中得出了协议的要点:

发送命令

UUID:

2AD9
(健身机控制点)

ATT 操作码:

0x012
(写请求)

操作 价值
开始
00
停止
08 01
设定速度
02 XX XX

XX XX
是速度,单位为 100 x kmh

接收数据

UUID:

2ACD
(跑步机数据)

ATT 操作码:

0x1b
(收到句柄值通知)

84 24
XX XX
XX XX
XX XX
00 ff
ff ff
XX XX
XX XX
00
开始 速度 卡路里 步骤 结束

当我那天晚上通过 nRF Connect 向它发送请求时,这个 正在工作。这实际上就是我获取 UUID 的方式,我只是向每个端点发送 0 字节垃圾邮件,直到跑步机启动。然而,现在情况并非如此,我也不完全确定为什么。

因此,回顾一下数据包捕获,我会在应用程序连接后立即看到此写入序列,然后再执行任何操作:

所以,我认为这是我所缺少的某种设置/握手,并且当我那天晚上弄乱它时,它一定仍然存在于跑步机上。

现在,我正在使用 这个 MAUI lib 连接到跑步机并读取其特性。

不幸的是,它只是为我提供了每个特征的 UUID,我无法弄清楚如何将其绑定到数据包捕获中的句柄,以便我可以尝试重播握手并看看这是否是我的问题。

有没有办法做到这一点,或者我是否必须逐步检查每个特征,发送请求,然后捕获它并尝试手动将两者映射在一起?

FWIW,这些句柄在捕获之间似乎是一致的。

bluetooth-lowenergy
1个回答
0
投票

我的理解是,这在用户空间中根本不可能,并且需要在较低级别与蓝牙控制器进行交互。

为了解决这个问题,我最终在笔记本电脑上执行了以下操作:

  1. 开始抓包
  2. 使用nRF connect,连接跑步机
  3. 在按 UUID 列出的 nRF connect 中找到我想要的特性
  4. 向该 UUID 发送单个数据包
  5. 观察抓包中的句柄
  6. 重复,直到找到所有我想要的

这可能比我最初的想法更容易,即以编程方式将它们全部击中,然后尝试从完整的日志中将它们配对,但它仍然不理想。

© www.soinside.com 2019 - 2024. All rights reserved.