logo
0
0
WeChat Login

HCI Snoop - 蓝牙抓包模块

用于监控手机APP与蓝牙设备之间的双向数据传输,支持实时抓取和解析HCI层数据包。

功能特性

  • ✅ 实时抓取蓝牙HCI层数据包
  • ✅ 区分上行(APP→设备)和下行(设备→APP)数据
  • ✅ 解析命令包(Command)、事件包(Event)、ACL数据包
  • ✅ 记录时间戳和包类型
  • ✅ 支持kernelISU环境
  • ✅ 输出格式:可读文本日志
  • ✅ 轻量级,低开销

环境要求

  • Linux系统(支持BlueZ蓝牙协议栈)
  • Python 3.6+
  • 蓝牙适配器

安装

# 克隆仓库 git clone https://github.com/dgz2026/bt-hci-snoop.git cd bt-hci-snoop # 安装依赖 sudo apt-get install bluetooth bluez python3-bluepy pip3 install -r requirements.txt

使用方法

基本使用

# 启动抓包监控 ./scripts/start_snoop.sh # 停止抓包监控 ./scripts/stop_snoop.sh

Python脚本方式

# 使用Python脚本直接运行 python3 src/bt_snoop.py

配置选项

编辑 config/snoop.conf 文件:

[general] # 日志输出文件路径 log_file = ./logs/bt_snoop.log # 是否输出十六进制数据 dump_hex = true # 是否启用时间戳 enable_timestamp = true # 蓝牙设备索引(默认为hci0) hci_device = hci0 # 日志级别 (DEBUG, INFO, WARNING, ERROR) log_level = INFO

输出格式

日志文件包含以下信息:

[2025-03-21 14:30:15] [TX] ACL Data | Length: 20 | Handle: 0x0011 Data: 02 01 06 03 03 18 00 19 00 00 00 00 00 00 00 00 00 00 00 00 [2025-03-21 14:30:16] [RX] Event | Type: LE Meta Event (0x3E) | SubEvent: 0x02 Data: 02 01 00 00 19 00 00 00 00 00 00 00 00 00 00 00

模块说明

核心模块

  1. bt_snoop.py - 主程序,蓝牙抓包核心逻辑
  2. packet_parser.py - 数据包解析器
  3. logger.py - 日志记录模块

辅助模块

  1. start_snoop.sh - 启动脚本
  2. stop_snoop.sh - 停止脚本

数据包类型

  • Command Packets - 主机发送给控制器的命令
  • Event Packets - 控制器发送给主机的事件
  • ACL Data Packets - 异步无连接数据
  • SCO Data Packets - 同步面向连接数据

技术原理

本模块通过以下方式实现蓝牙抓包:

  1. 使用BlueZ提供的HCI Socket接口
  2. 监听HCI层的原始数据包
  3. 根据包类型(Command/Event/ACL/SCO)进行分类
  4. 解析数据包内容并记录日志
  5. 区分TX(发送)和RX(接收)方向

kernelISU 支持

本模块专为kernelISU环境优化:

  • 适配kernelISU的蓝牙子系统
  • 支持kernelISU的日志格式
  • 低资源占用,适合嵌入式环境

故障排除

无法访问蓝牙设备

# 检查蓝牙服务状态 sudo systemctl status bluetooth # 检查蓝牙设备列表 hciconfig -a # 重启蓝牙服务 sudo systemctl restart bluetooth

权限问题

确保当前用户有蓝牙设备访问权限:

sudo usermod -a -G bluetooth $USER # 注销后重新登录

开发

运行测试:

python3 -m pytest tests/

许可证

MIT License

作者

dgz2026

贡献

欢迎提交Issue和Pull Request!

About

No description, topics, or website provided.
76.00 KiB
0 forks0 stars1 branches0 TagREADMEMIT license
Language
Python90.9%
Shell9.1%