You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

蓝牙GATT Server如何仅允许指定应用连接并拦截未知设备?

蓝牙GATT Server 设备连接权限控制方案

一、直接拒绝未知设备连接的实现方式

  • 配对绑定拦截:开启蓝牙配对要求,仅允许已配对设备建立连接。在连接状态变更回调中,检测设备配对状态,未配对则直接断开:
    @Override
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
        super.onConnectionStateChange(gatt, status, newState);
        if (newState == BluetoothProfile.STATE_CONNECTED) {
            BluetoothDevice device = gatt.getDevice();
            if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
                gatt.close();
            }
        }
    }
    
  • MAC地址白名单:预先收集自家客户端的蓝牙MAC地址存入白名单,连接时校验设备MAC,不在名单内则断开。注意部分设备会随机化MAC,需搭配其他验证方式。

二、识别自家应用连接的方法

  • 自定义验证特征:在GATT Server中添加专属验证特征,客户端连接后必须写入约定密钥,验证通过才开放服务:
    1. 创建唯一UUID的可写特征;
    2. 客户端连接后立即写入专属密钥;
    3. Server在onCharacteristicWriteRequest中校验密钥,失败则断开连接。
  • 广播包标识:自家客户端发起连接前,发送含专属标识的蓝牙广播,Server扫描到该标识后才允许连接(需Server同时做扫描端)。

三、连接前的安全验证机制

  • LE加密防护:将GATT服务/特征的安全级别设为ENCRYPTED_MITM,仅加密配对后的连接能访问敏感功能,未知设备即使连上也无法操作核心特征:
    BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(
        UUID.fromString("YOUR_CHAR_UUID"),
        BluetoothGattCharacteristic.PROPERTY_READ | BluetoothGattCharacteristic.PROPERTY_WRITE,
        BluetoothGattCharacteristic.PERMISSION_READ_ENCRYPTED_MITM | BluetoothGattCharacteristic.PERMISSION_WRITE_ENCRYPTED_MITM
    );
    
  • 令牌验证:如果有后端服务,让客户端先从后端获取临时令牌,连接后将令牌发送给Server,Server调用后端接口验证有效性,通过后才提供服务。

内容的提问来源于stack exchange,提问作者Ashvin solanki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 02:24:30