结论先说:
D2:6F:A6:57:89:7B 不能用来确定厂商。
下面严谨解释原因。
一、蓝牙 MAC 是否可以确定厂商?
传统上:
-
MAC 前 3 字节 = OUI(Organizationally Unique Identifier)
-
由 IEEE 分配
-
可以查到厂商
例如:
00:1A:7D → Apple
3C:5A:B4 → Samsung
二、但你这个地址有问题
MAC:
D2:6F:A6:57:89:7B
看第一个字节:
D2
转换为二进制:
1101 0010
重点看最低两位:
bit0 = 0
bit1 = 1
位含义:
| 位 | 含义 |
|---|---|
| bit0 | 单播(0) / 组播(1) |
| bit1 | 全球唯一(0) / 本地管理(1) |
你的地址:
bit1 = 1
意味着:
这是 Locally Administered Address(本地管理地址)
三、什么是本地管理地址?
这种地址:
-
不是 IEEE 分配
-
不属于固定厂商 OUI
-
通常是:
-
随机生成
-
BLE 隐私地址
-
手机随机地址
-
Windows 随机地址
-
iOS 隐私地址
-
Android 随机地址
-
四、BLE 常见随机地址类型
BLE 有三种随机地址:
-
Static Random Address
-
Resolvable Private Address(RPA)
-
Non-Resolvable Private Address
现在几乎所有:
-
iPhone
-
Android
-
Windows
-
蓝牙耳机
-
BLE 标签
都会使用随机地址防止跟踪。
五、如何判断是不是随机地址?
看第一字节前两位:
xx:xx:xx:xx:xx:xx
↑
第一个字节
规则:
| 前两位 | 类型 |
|---|---|
| 00 | Public |
| 01 | Random Static |
| 10 | Random Private Resolvable |
| 11 | Random Private Non-Resolvable |
你的:
D2 = 1101 0010
前两位:
11
属于:
Random Private Non-Resolvable Address
六、意味着什么?
✔ 每次广播可能变
✔ 无法反查厂商
✔ 无法固定识别设备
✔ 设计目的就是防追踪
七、那什么时候可以查厂商?
只有当:
-
地址是 Public Address
-
且 bit1 = 0
-
且前三字节属于 IEEE OUI
才能查厂商。
八、结合你前面的数据
你之前发的:
Company ID = 0x0006
那是 Manufacturer Data 里的 Company ID。
⚠️ 那个可以确定厂商
但 MAC 地址不行。
九、如何识别厂商更可靠?
优先顺序:
-
Manufacturer Data(Company ID)
-
Service UUID
-
设备名称模式
-
特征广播结构
-
GATT 服务
不要依赖 MAC。
十、如果你在做 BLE 设备识别系统
(结合你之前的扫描项目)
建议:
if manufacturer_id == 0x004C:
vendor = "Apple"
elif manufacturer_id == 0x0006:
vendor = "Microsoft"
不要用 MAC 前缀。
最终结论
D2:6F:A6:57:89:7B
是:
随机 BLE 私有地址
无法确定厂商
设计上就是防止识别