【BLE】蓝牙设备地址

本文详细介绍了蓝牙设备的四种地址类型:Public Device Address、Static Device Address、Non-Resolvable Private Address和Resolvable Private Address。Public Address是唯一的,Static Address在初始化后保持不变,而Private Addresses提供额外的安全性,通过随机生成和周期性更新增强隐私保护。Resolvable Private Address允许通过IRK解密,增加了连接的安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 前言

为什么有些蓝牙设备的地址是固定的,但是有些每次开机起来是不一样的,又有些设备地址在正常运行过程中会变化呢。

蓝牙设备通过地址和地址类型来标识自己,地址类型指示是public device address(公共地址)或者random device address(随机地址),两种设备地址都是48bit的。

一个设备至少包含一种地址类型,可以同时包含两种。

当两个设备地址进行比较时,该比较应包括设备地址类型(如果两个地址类型不同,即使两个48bit未地址相同也不同)。

2. Public device address

设备唯一地址,不会变化。正常情况下,该地址是需要向IEEE申请的。企业交钱,IEEE保证地址的唯一性。

3. Random device address

在BLE时代,只有Public Device Address还不够,因为:

  1. 需要购买
  2. 安全因素。BLE很大一部分的应用是广播通信,这意味着主要知道了设备的地址,就可以获取所以的信息,这是不安全的。

随机地址可以细分为三种地址类型,通过48bit地址的最高2位决定。

Address[47:46]Sub-Type
0b00Non-resolvable private address
0b01Resolvable private address
0b10Reserved for future use
0b11Static device address

3.1 Static device address

Static device address 是随机生成的,需满足以下两个条件:

  1. 最高两位为1
  2. 不能全为0或1
    在这里插入图片描述
    如果使用的是静态随机地址,则每次开机的时候地址随机生成后不会再改变。下一次上电的时候可以改变,但不是强制的,因此可以保持变。

如果设备的静态地址发生变化,则存储在对端设备的配对信息将无效,并且使用旧地址重连会失败。

3.2 Non-resolvable private address

Non-resolvable private address 是随机生成的,需满足以下三个条件:

  1. 最高两位为0
  2. 不能全为0或1
  3. 不能和 Public device address 相同
    在这里插入图片描述

3.3 Resolvable private address

不可解析私密地址需满足以下条件:

  1. 高24bit为随机数,且最高 2bits 为 “10”
  2. 低 24bits 是随机数和 IRK 通过 hash 运算得到 hash 值,hash=ah(IRK,prand)
    在这里插入图片描述
    对端BLE设备扫描到该类型地址后,用本地 IRK 和该地址的 prand 进行 ah 运算,如果得到值和该类型地址低 24bits 一致才进行后续操作。

4. 总结

蓝牙设备地址可分为4种:

  1. Public device address
  2. Static device address
  3. Non-resolvable private address
  4. Resolvable private address

Public device address 是唯一不变的,相当于是设备的MAC地址。

Static device address在初始化后不会改变。

Static Device Address通过地址随机生成的方式,解决了部分问题,Private Device Address则更进一步,通过定时更新和地址加密两种方法,提高蓝牙地址的可靠性和安全性。

Non-resolvable private address 和 Resolvable private address在系统运行中可以指定周期更新(广播、扫描、已连接等过程中都有可能更新),更新的周期由GAP规定,称作T_GAP(private_addr_int),建议值是15分钟,不能大于1小时。

<think>嗯,用户现在问的是如何查看蓝牙设备地址。之前他们的问题是关于Qt5.9中使用经典蓝牙指定设备通信的步骤,现在这个问题可能是在之前的实现过程中遇到了需要获取设备地址的情况。比如,他们在开发应用时需要根据MAC地址筛选设备,但不知道如何获取目标设备的地址。 首先,我需要考虑用户的使用场景。可能用户是开发人员,正在开发一个需要连接特定蓝牙设备的应用程序,或者是普通用户,想要在手机上或电脑上找到某个设备的MAC地址用于配置或其他用途。因此,回答需要覆盖不同平台的操作方法,比如Android、iOS、Windows、Linux和macOS,因为这些是主要的操作系统。 接下来,用户可能的需求是了解在不同设备上如何查找蓝牙地址,而不仅仅是技术层面的获取方法。比如,他们可能需要步骤指导,或者解释为什么需要MAC地址。此外,用户可能还关心蓝牙地址的格式,比如MAC地址的结构,以及如何区分公共地址随机地址。 在之前的对话中,用户已经了解了如何在代码中筛选设备,所以现在需要的是实际操作中如何获得这些信息。需要确保回答清晰,分步骤说明每个平台的具体操作,并且给出示例,比如在Android的设置中如何找到设备的地址,或者在Windows的设备管理器中查看属性。 另外,需要注意蓝牙地址的隐私问题,比如iOS和某些Android版本可能出于隐私考虑隐藏公共地址,这时候需要提示用户可能的替代方法,比如配对后查看或使用第三方工具。同时,要提到蓝牙地址的格式,确保用户能正确识别。 可能还需要补充一些常见问题,比如MAC地址蓝牙名称的区别,为什么有时候地址不可见,以及如何处理这种情况。这有助于用户全面理解问题,避免后续的困惑。 最后,确保回答结构清晰,分点列出各个平台的操作步骤,并给出注意事项,帮助用户顺利找到所需信息。同时,保持语言简洁明了,避免技术术语过多,适合不同层次的用户理解。</think>查看蓝牙设备地址的方法会根据设备类型和操作系统有所不同,以下是主流平台的详细操作指南: --- ### **一、查看其他蓝牙设备地址** #### 1. **Windows 系统** - **方法1**:通过设备管理器 1. 右键点击`开始菜单` ➔ 选择`设备管理器` 2. 展开`蓝牙`分类 3. 右键目标设备 ➔ `属性` ➔ `详细信息` 4. 选择`蓝牙设备地址`属性 - **方法2**:通过命令行 ```powershell # 使用 PowerShell 命令 Get-PnpDevice -Class Bluetooth | Select-Object Name, InstanceId ``` 输出结果中`InstanceId`的后12位字符即为MAC地址(例如:`BTHENUM\DEV_123456ABCDEF`中的`123456ABCDEF`) #### 2. **Android 系统** - **步骤**: 1. 进入`设置` ➔ `关于手机` ➔ `状态信息` 2. 查看`蓝牙地址`(部分机型可能隐藏) - **开发者模式**: 通过`adb`命令获取已配对设备的地址: ```bash adb shell dumpsys bluetooth_manager | grep 'Bonded devices' ``` #### 3. **iOS/macOS 系统** - **限制**:出于隐私保护,苹果设备**不直接显示**其他设备的真实MAC地址 - **替代方案**: - 查看设备本身的物理标签(如蓝牙耳机充电盒内部) - 通过设备厂商的专用APP查询 --- ### **二、查看本机蓝牙地址** #### 1. **Windows 10/11** ```powershell # 管理员权限运行 PowerShell Get-NetAdapter -Name "蓝牙*" | Select-Object Name, MacAddress ``` #### 2. **Android** ```bash # 工程模式查看(不同品牌路径可能不同) 拨号盘输入 *#*#8255#*#* ➔ 进入`GTalk服务监控` ➔ 查看`local_bluetooth_mac_address` ``` #### 3. **Linux** ```bash hcitool dev # 输出示例: # Devices: # hci0 00:11:22:33:44:55 ``` --- ### **三、蓝牙地址格式说明** 蓝牙设备地址采用**6字节十六进制格式**,分为两种类型: 1. **公共地址 (Public Address)** 格式:`XX:XX:XX:XX:XX:XX`(例如`00:1A:7D:DA:71:13`) 由IEEE统一分配,具有全球唯一性 2. **随机地址 (Random Address)** 格式:`XX:XX:XX:XX:XX:XX`(无法区分厂商) 常见于低功耗蓝牙设备BLE) --- ### **注意事项** 1. **隐私保护**:Android 10+ 和 iOS 13+ 会默认使用随机MAC地址扫描设备 2. **配对后可见**:部分设备需先完成配对才能在系统设置中查看真实地址 3. **硬件标签**:多数蓝牙设备(如耳机、键盘)会在机身或说明书标注地址 4. **开发工具**: 可通过`Wireshark`(蓝牙嗅探模式)或`nRF Connect`等专业工具获取深层信息 如果需要通过代码获取地址(以Qt为例): ```cpp // 发现设备时获取地址 void YourClass::addDevice(const QBluetoothDeviceInfo &info) { qDebug() << "设备地址:" << info.address().toString(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

强人电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值