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%