Wireshark 中蓝牙协议分析简介
蓝牙是一种短距离无线通信协议,采用分层架构。Wireshark 支持从 HCI(Host Controller Interface)层以上的蓝牙数据分析。
蓝牙协议栈核心层级如下(自下而上):
层级 | 协议名 | 功能说明 |
---|---|---|
HCI | HCI | 控制器与主机之间的通信 |
L2CAP | L2CAP | 多路复用、数据分段重组等 |
ATT/GATT | ATT/GATT | BLE 属性通信层/服务发现层 |
RFCOMM | RFCOMM | 串口仿真,常用于数据通信 |
OBEX | OBEX | 文件传输协议,如 ZIP/图像等传输 |
SDP | SDP | 服务发现协议,标识远端支持服务 |
蓝牙协议格式与字段含义
HCI(Host Controller Interface)
用于主机(如 PC)与蓝牙芯片之间通信。
- 字段举例:
Event Code
:标识是哪种类型的事件(如连接、断开等)Parameter Total Length
:后续数据长度Subevent Code
:用于 BLE 中的特定事件类型Bluetooth Device Address
:蓝牙 MAC 地址
Wireshark 过滤器示例:bthci_evt
L2CAP(Logical Link Control and Adaptation Protocol)
处理数据分段、重组,提供上层协议的传输通道。
- 字段举例:
Length
:有效负载长度Channel ID (CID)
:标识所承载协议类型(如 ATT、RFCOMM)- 0x0004:ATT
- 0x0003:RFCOMM
Payload
:实际数据内容
过滤器:btl2cap
RFCOMM(Radio Frequency Communication)
串口仿真协议,类似于串口数据传输,常用于简单数据通信或 OBEX 文件传输。
- 字段举例:
Address
:信道标识(DLCI)Control
:帧类型(如 UIH,数据帧)Length
:负载长度Information
:用户数据内容(例如 OBEX、ZIP)
过滤器:rfcomm
OBEX(Object Exchange)
在蓝牙中用于文件发送(如 ZIP、图像、联系人等),使用在 RFCOMM 之上。
- 字段举例:
Opcode
:操作类型(如 Connect、Put、Get)Headers
:文件信息(如名称、长度、类型)Body
/End-of-Body
:包含实际文件二进制数据
过滤器:btobex
蓝牙协议的常见差异

如上图所示,使用蓝牙协议的数据包在数据链路层上可能使用的是蓝牙协议封装,也可能使用的是USB协议封装。
核心差异原因
物理接口类型不同:
- USB传输:前一个案例(EnergyBluetooth.pcapng)使用的是USB蓝牙适配器,蓝牙控制器通过USB接口与主机通信
- H4(UART)传输:当前案例(YWBbluetooth.pcapng)使用的是UART(串口)连接的蓝牙模块,通过H4协议传输
HCI传输协议不同:
- HCI over USB:需要USB协议封装
- HCI over UART(H4):直接在串口上传输,不需要USB封装

详细技术对比
特性 | USB传输(前例) | H4/UART传输(本例) |
---|---|---|
物理接口 | USB接口 | UART串口 |
数据链路层协议 | USB协议 | 蓝牙HCI H4协议 |
典型应用场景 | PC蓝牙适配器 | 嵌入式系统、开发板 |
协议栈层级 | Frame → USB → Bluetooth | Frame → Bluetooth HCI H4 |
传输效率 | 较高(USB带宽大) | 较低(受串口波特率限制) |
常见硬件 | USB蓝牙dongle | 树莓派、手机基带芯片等 |
当前案例特点
H4协议主导:
- 所有流量都通过”Bluetooth HCI H4″传输(100%)
- H4是专为UART设计的简单传输协议,比USB更轻量级
流量分布:
- 主要流量是ACL数据包(96.2%),携带L2CAP和RFCOMM数据
- RFCOMM协议占比很高(32.6%-33.7%),可能用于串口仿真通信
- 包含少量蓝牙Mesh流量(0.0%),可能是设备发现或配置
性能特征:
- 总吞吐量较高(1161kbps)
- 大部分带宽用于数据传输(非控制命令)
为什么会出现这种差异?
硬件设计选择:
- 嵌入式设备通常选择UART接口节省成本
- PC外设通常选择USB接口便于热插拔
协议栈实现:
- Linux系统常见H4/UART实现
- Windows/Mac更常见USB实现
使用场景:
- 本例可能是嵌入式蓝牙网关或工业设备
- 前例更可能是普通PC外设
这种差异展示了蓝牙协议栈在不同硬件平台上的灵活适配能力,核心协议(L2CAP/RFCOMM等)保持一致,仅底层传输层根据硬件接口变化。
例题
第八届御网杯信息安全大赛–bluetooth

发现全都是蓝牙流量
此协议分级字段含义如下:
协议层级结构
Frame
- 捕获的最底层,以太网或USB帧。
- 总体数据传输的统计基础。
Bluetooth
- 蓝牙协议的总览层。
Bluetooth HCI H4
- 主机控制器接口(HCI)的H4传输层,用于主机和蓝牙控制器之间的通信。
Bluetooth HCI Event / Command / ACL Packet
- Event:控制器到主机的事件通知(如设备连接成功)。
- Command:主机到控制器的命令。
- ACL Packet:异步连接导向逻辑链路,用于传输数据(如L2CAP协议数据)。
Bluetooth L2CAP Protocol
- 逻辑链路控制与适配协议,是ACL数据的载体,负责多路复用和分段重组。
Bluetooth SDP Protocol
- 服务发现协议,用于发现设备上提供的服务。
Bluetooth RFCOMM Protocol
- 蓝牙串口仿真协议,仿真串口通信,常用于数据交换。
Data
- 应用层的最终数据部分。
首先分析数据部分

直接搜索字符串发现存在一个flag.txt在压缩包内
尝试将该zip提取出来
使用foremost工具将其提取出来是一个encode.exe来混淆压缩包
使用010Editor将PK上方的数据全部删除

最后得到flag压缩包

flag.txt内容
10004583275926070044326083910251708233320797779355779208703097816305188140191914132269450797
key无法正常读取,尝试对压缩包进行修复
得到key
5216294695211820293806247029887026154798297270637676463374801674229881314620340407569315152
2025年能源网络安全大赛–Bluetooth
大致看一下流量包整体协议层级

由图可知
截取的数据包全是蓝牙协议
其中L2CAP是协议中传输的数据部分
提取出L2CAP的Payload

tshark -r Bluetooth.pcapng -T fields -e btl2cap.payload -Y btl2cap.payload > output.txt
将其重定向到output.txt
观察导出的数据

发现只有倒数第三位有变化,且只出现五个数据01248
使用四进制解密
Exp
# 打开 output.txt 文件并处理
with open("output.txt") as file:
CHAR_TRANSLATION = {
'0': ' ',
'1': '0',
'2': '1',
'4': '2',
'8': '3'
}
# 读取每一行,取倒数第3个字符,翻译后拼接成字符串
encoded = ''.join(
CHAR_TRANSLATION.get(line.strip()[-3], '')
for line in file
)
# 以空格分割,取每段的第一个字符,拼接成 flag_code
flag_code = ''.join(
segment[0]
for segment in encoded.split(' ')
if segment
)
# 每4个字符作为一个 base-4 数字,转成 ASCII 字符
result = ''.join(
chr(int(flag_code[i:i+4], 4))
for i in range(0, len(flag_code), 4)
)
# 输出最终结果
print(result)

得到flag