android 蓝牙连接硬件的密码校验过程

2018-07-03 10:26:15 +08:00
 gaowenhao
你好各位过路大神。

我现在手头有个安卓手机,有个硬件,这个硬件有一个配套的 app 也安装在了这个安卓机上。

现在公司有需求,想要看这个安卓机和硬件通讯(双方通过蓝牙通讯)发送的包啥样的,我冥想起了 3 年前 android 开发经验,和找了一些资料连接自己写个 app 连接他这个硬件,成功了!

但是硬件不发送包过来,想要让硬件往我开发的这个 app 里发送包过来,必须开启一下这个硬件配套的 app,不过问题终于算是解决了,我获取到了那个包长啥样。

然而现在公司又有需求了,想要不开那个配套 app 去连接这个硬件,于是我又找了一大堆资料,得知(自己猜测)是因为手机和硬件连接之间有一个密码校验的过程,而这个过程是硬件和配套 app 之间约定好的“协议”,搜了很多相关的资料,提这个密码验证的很少,不确定猜想的对不对。

我想请问各路大神,我这个猜错对不对?如果对,那么有没有可能不使用那个配套 app 去连接这个硬件?
8705 次点击
所在节点    Android
4 条回复
gaowenhao
2018-07-03 10:34:27 +08:00
我连接的方法大体如下:
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
BluetoothDevice device = adapter.getRemoteDevice("硬件的 mac 地址");
device.connectGatt(MainActivity.this, false, bluetoothGattCallbackOne); //这里传入 callback 函数,


在 callback 中获取所有的 Service 中的 Characteristic,然后对这些 characteristic 进行 setCharacteristicNotification
这样 硬件那边有消息后,就会回掉这个回掉方法中的 onCharacteristicChanged。

但是必须开启一下配套的 app 才能在收到硬件打过来的数据,希望有此方面经验的大神能指点一二。
gaowenhao
2018-07-04 19:13:11 +08:00
希望有经验的大佬看到后能给点指点。
chunchun1028
2018-07-05 09:31:22 +08:00
看过蓝牙协议,但做没有做过安卓蓝牙开发。

感觉应该先要确定配套 app 打开后干了什么,你既然已经能拿到双方交互的报文,分析这个应该没问题。
如果确定了是加密流程,再去分析协议也不迟。具体加密流程可以去找蓝牙官方协议的 Host 卷的安全管理协议那章
gaowenhao
2018-07-09 11:15:03 +08:00
诸位,这个问题我理清了。
这个密码校验确实存在,硬件貌似管他叫始能,说白了就是 android 这边写一个密码给硬件硬件通过这个密码鉴别是不是自己人,确实过是自己人后才给发送数据,就是这样希望能帮到后来的人。

另外,感谢 chunchun1028 的回复。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/467695

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX