Wireshark 蓝牙 HCI 日志分析常用操作速查

一、常用过滤器

使用 Wireshark 分析蓝牙 HCI 日志,主要关注:连接请求、建连结果、连接句柄、断连原因和建连耗时。本文以经典蓝牙 BR/EDR 为主。过滤表达式复制到 Wireshark 顶部的"显示过滤器"中即可使用。

分析目标 显示过滤器 说明
所有 HCI 命令和事件 `bthci_cmd
本地主动建连 bthci_cmd.opcode == 0x0405 Create Connection
收到对端连接请求 bthci_evt.code == 0x04 Connection Request
接受连接请求 bthci_cmd.opcode == 0x0409 Accept Connection Request
拒绝连接请求 bthci_cmd.opcode == 0x040a Reject Connection Request
查看建连结果 bthci_evt.code == 0x03 Connection Complete,检查 Status
查看成功建连 bthci_evt.code == 0x03 && bthci_evt.status == 0x00 还需确认 Link Type 为 ACL
取消正在进行的建连 bthci_cmd.opcode == 0x0408 Create Connection Cancel
本地主动发出断连命令 bthci_cmd.opcode == 0x0406 Disconnect
查看断连完成事件 bthci_evt.code == 0x05 Disconnection Complete
查看 L2CAP btl2cap 分析上层通道建立和断开
查看 A2DP 信令 btavdtp 分析音频流配置、打开、启动等
查看 AVRCP 相关交互 btavctp 分析音频控制交互
查看 RFCOMM btrfcomm 可用于分析 HFP 的 AT 指令交互
查看 BLE ATT 交互 btatt 分析属性读写、通知等

1. 建连、取消建连、断连综合过滤器

采用 == 和 || 写法,避免部分版本不支持集合语法的问题。

wireshark 复制代码
(bthci_cmd.opcode == 0x0405) ||
(bthci_cmd.opcode == 0x0406) ||
(bthci_cmd.opcode == 0x0408) ||
(bthci_cmd.opcode == 0x0409) ||
(bthci_cmd.opcode == 0x040a) ||
(bthci_evt.code == 0x03) ||
(bthci_evt.code == 0x04) ||
(bthci_evt.code == 0x05)

包含以下关键节点:

命令或事件 含义
Create Connection 本地主动发起建连
Connection Request 收到对端连接请求
Accept / Reject Connection Request 本地接受或拒绝请求
Connection Complete 建连过程结束,结果由 Status 判断
Create Connection Cancel 取消正在进行的建连
Disconnect 本地主机发出断连命令
Disconnection Complete 控制器上报断连结果

排查失败时,建议使用完整过滤器,补看 Command Status / Command Complete:

wireshark 复制代码
bthci_cmd || bthci_evt

2. 仅查看连接与断连关键事件

只关注"收到请求、建连完成、断连完成"三个时间点时,使用:

wireshark 复制代码
bthci_evt.code == 0x04 || bthci_evt.code == 0x03 || bthci_evt.code == 0x05

以上两个综合过滤器针对经典蓝牙。BLE 连接结果需查看 LE Meta Event,见第六节。

二、如何判断连接是否建立

阶段 关键命令或事件 判断方法
本地主动发起 Create Connection 记录 BD_ADDR 和发起时间
收到对端请求 Connection Request 只代表收到请求,不代表建连成功
本地接受或拒绝 Accept / Reject Connection Request 确认本地主机的处理结果
建连过程结束 Connection Complete Status 为 0x00 表示成功,非零表示失败
确认 ACL 成功 Connection Complete 同时确认 Link Type 为 ACL,记录 Handle 和 Time

注意:

  • 本地主动建连时,不一定出现 Connection Request。
  • 成功 Connection Complete 的时间,是 HCI 侧上报成功的时间。
  • ACL 建立成功 ≠ A2DP/HFP 连接完成 ≠ 音频开始播放。

三、按 Handle 跟踪连接

建连成功后,记录 BD_ADDR 与 Connection Handle 的对应关系 。假设 Handle 为 0x000b:

wireshark 复制代码
bthci_evt.connection_handle == 0x000b ||
bthci_cmd.connection_handle == 0x000b ||
bthci_acl.chandle == 0x000b
注意项 说明
双连分析 分别记录两个设备的 BD_ADDR 与 Handle
Handle 复用 断连后 Handle 可能复用,需要结合时间范围判断
字段兼容性 如果报错,在包详情中右键字段 → 作为过滤器应用

四、常见断连原因

在 Disconnection Complete 中查看 Connection Handle、Status、Reason。

Reason 含义
0x08 Connection Timeout:连接超时
0x13 Remote User Terminated Connection:对端用户终止连接
0x14 对端因资源不足终止连接
0x15 对端因关机终止连接
0x16 Connection Terminated by Local Host:本地主机终止连接

判断断连发起方,应结合 Disconnect 命令、完成事件及上层日志,不要只凭 Reason 推断根因。

五、Wireshark 常用操作

需求 操作
显示绝对时间 视图 → 时间显示格式 → 当天时间(Time of Day)
显示日期和时间 视图 → 时间显示格式 → 日期和当天时间
保留毫秒/微秒 时间显示精度选择毫秒或微秒,方便分析时序
搜索事件名称 Ctrl + F → 字符串 → 数据包列表
添加 Handle / Status / Reason 列 在包详情中右键字段 → 作为列应用
标记关键包 选中包后按 Ctrl + M
设置时间参考点 选中包后按 Ctrl + T
限定抓包相对时间范围 frame.time_relative >= 10 && frame.time_relative <= 20

计算建连耗时

  1. 找到对应的 Create Connection,按 Ctrl + T 设置时间参考点。
  2. 将时间格式切换为"自参考或捕获开始的秒数"。
  3. 找到同一设备成功的 Connection Complete。
  4. 读取其 Time,例如 0.326 表示约 326 ms。

说明:

  • 设置参考点时,注意其他时间参考点对显示的影响。
  • frame.time_relative 表示相对抓包起点的时间,不随 Time 列切换成绝对时间而改变。
  • 绝对时间依赖文件记录的时间戳及抓包设备时钟,单纯切换显示格式不能恢复缺失的真实时间。

六、BLE 建连过滤补充

分析目标 显示过滤器 说明
LE Create Connection bthci_cmd.opcode == 0x200d 发起 BLE 建连
LE Extended Create Connection bthci_cmd.opcode == 0x2043 扩展建连命令
LE Create Connection Cancel bthci_cmd.opcode == 0x200e 取消 BLE 建连
LE Meta Event bthci_evt.code == 0x3e 包含连接完成等多种 LE 子事件

BLE 建连成功需检查 LE Connection Complete / LE Enhanced Connection Complete:

  • 确认 Status = 0x00。
  • 记录 Handle、Peer Address、Role。
  • 查看连接间隔、外围设备延迟和监督超时等参数。

七、过滤器无法使用时的检查方法

现象 原因与处理
输入框变红 语法或字段不被识别,先单独测试 bthci_evt 和 bthci_cmd
输入框绿色,但没有数据包 语法有效,但日志没有匹配项,或未解析成对应 HCI 协议
从 Markdown 表格源码复制后报错 表格源码中的竖线可能带转义反斜杠,实际过滤器中的逻辑或必须是两个竖线,不带反斜杠
字段名称不匹配 在包详情中右键 Event Code / Opcode → 作为过滤器应用,以自动生成的字段为准

建议从正文中的代码块复制综合过滤器,避免表格转义字符影响使用。

八、推荐排查顺序

  1. 定位连接请求或本地主动发起命令。
  2. 查看命令响应及最终建连结果。
  3. 记录 BD_ADDR 与 Handle 的对应关系。
  4. 结合时间参考点计算建连耗时。
  5. 若建连失败,查看 Connection Complete 的 Status 和 Reason。
  6. 若断连,查看 Disconnection Complete 的 Reason,并结合上层日志判断发起方。
相关推荐
GlobalInfo27 分钟前
2026年全球机器人用超平执行器市场研究报告:市场规模达7.51亿美元,人形机器人商业化与轻量化运动控制需求推动行业增长
大数据·人工智能·数码相机·microsoft·机器人
共享家95272 小时前
408 操作系统第一章
服务器·数据库·windows
Sakura_j_h_4 小时前
GitHub Actions 打包 Windows exe:中文编码与产物上传
windows·ci/cd·打包发布·github·pyinstaller·github actions
xixiaoyunya7 小时前
搭一个浏览器即用的二进制文件分发点:目录规范与权限边界实践
网络·windows
麻瓜code8 小时前
Spring AI 全模块 API 字典一览(1.1.0 版)
人工智能·windows·spring
编码者卢布9 小时前
【Azure Container Apps】为什么通过 Diagnostic Settings 发送到 Log Analytics 中的日志会延迟几分钟?
microsoft·azure
zrc0070079 小时前
steam无法登录 steam错误 登录时出现错误。请稍后再试。解决办法 steam无法登录解决办法 湖南地区steam DNS问题解决办法
windows·经验分享·游戏·缓存·游戏程序·创业创新·玩游戏
BK贝壳10 小时前
布尔队列 BHA_Queue:入队出队均摊 O(1);附 BHA_Dict
windows
-星空下无敌10 小时前
Windows Docker K8s 安装部署Naocs ,SpringBoot 3.x 4.x 整合Naocs 版本兼容 配置中心、服务注册与发现
windows·docker·nacos·kubernetes·springboot·alibaba
燃烧的枫10 小时前
Windows 下 YOLO11 Pose 的 TensorRT C++ 部署
windows·yolo·tensorrt·1024程序员节·yolo11-pose