如何获取并分析L2CAP包
本文中的分析与软件相关的内容,都是以WinCE中的 Microsoft Bluetooth Core Stack为例进行分析;与协议有关的内容,是基于Bluetooth Core 2.1 + EDR Spec进行分析。
1. 如何获取L2CAP包
- 从HCI_ReadPacket()/HCI_WritePacket()中截获
在HCI_ReadPacket()/HCI_WritePacket()中判断eType为2的即是ACL-u数据,也即L2CAP数据。
ACL-u包中包括了Connection Handle,Flag,Data Length以及Data Domain,如下图所示:

其中,Data Domain即是L2CAP包的数据。
- 从MS-Stack中获取
编译Debug版本的MS-Stack,即btd.dll,并打开Debug Zone DEBUG_L2CAP_PACKETS,即可以截取到L2CAP的数据。
|
#define DEBUG_L2CAP_PACKETS 0x00040000 |
一个MS-Stack中截获的L2CAP数据形如:

2. 如何分析L2CAP包
L2CAP是基于Packet进行数据传输的,其传输模型基于Channel。 Channel Identifier(CID)的分类如下图所示:

可以将Channel理解为USB协议中的Endpoint,不同的Channel用做不同的传输,总体上可以分为Connection-oriented channel,Connectionless data channel和Singling Channel,如下图所示:

2.1 Signaling Packet分析
- 如何判别一个包为Signaling Packet
如果L2CAP包的CID为0x0001,则该包即为Signaling Packet。
- Signaling包的结构
如下:

其中Commands域的格式如下:

上面的Code域可能的值如下:

- 各个Code的具体分析方式
可以参照BlueCore Spec中有关各个Code的详细格式来对数据进行分析,以Disconnection Request为例,分析如下:

Destination CID - DCID (2 octets)
This field specifies the endpoint of the channel to be disconnected on the
device receiving this request.
Source CID - SCID (2 octets)
This field specifies the endpoint of the channel to be disconnected on the
device sending this request.
Identifier:
该域为1字节长,Request和Response中的该值是一样的,用来在一对设备之间进行通信的时候判别使用。每一组连续的Response-Request命令都必须有一个不一样的Identifier,长度为2个字节。在其它的通信协议中也经常会存在一个类似的Identifier,显然,0~0xff用完的时候,可以回收之前用过的值。
2.2 分析Data Packet
- 如何判别一个包为Data Packet
Data Packet包括Connection-oriented和Connectionless data两种,它们的CID范围不一样,可以通过CID来进行区分。如果CID为0x2,则是Connectionless data,如果介于0x40和0xfff之间,则为Connection-oriented data Packet。
- Data Packet的结构
两者的结构分别如下图所示:
Connection-oriented结构如下图:


Connectionless结构如下图:

可以看到,Connection-oriented Frame包括三种,Basic Frame(B-FRAME),Supervisory Frame(S-FRAME)和Information Frame(I-FRAME)。通过Control域中的Bit0来区分S-FRAME和I-FRAME,即Bit0=0为I-FRAME,为1是S-FRAME。
那么,如何来区分B-FRAME呢?这些就留到以后进行深究吧!
如何获取并分析L2CAP包的更多相关文章
- 使用wireshark抓包分析-抓包实用技巧
目录 使用wireshark抓包分析-抓包实用技巧 前言 自定义捕获条件 输入配置 输出配置 命令行抓包 抓取多个接口 抓包分析 批量分析 合并包 结论 参考文献 使用wireshark抓包分析-抓包 ...
- 使用winpcap多线程抓包,以及简单的分析数据包
刚开始使用winpcap数据包的时候,我在抓包的时候使用了 pcap_loop(adhandle, 0, packet_handler, NULL); 这个回调函数进行抓包.同时在回调函数中分析IP地 ...
- 在Android手机上获取其它应用的包名及版本
转载请注明出处:http://blog.csdn.net/jason_src/article/details/37757661 获取Android手机上其它应用的包名及版本方法有非常多,能够通过AAP ...
- 微信小程序编译包的获取与解压——在手机中获取小程序编译包wxapkg
准备工作: 微信关注需要下载编译包的小程序,然后点进去看一下,微信就会自动下载相应的编译包到手机上了. 获取小程序编译包: 据说root手机可以直接在手机的文件管理中查找wxapkg文件,自己尝试了下 ...
- 情感分析snownlp包部分核心代码理解
snownlps是用Python写的个中文情感分析的包,自带了中文正负情感的训练集,主要是评论的语料库.使用的是朴素贝叶斯原理来训练和预测数据.主要看了一下这个包的几个主要的核心代码,看的过程作了一些 ...
- Wireshark数据抓包教程之认识捕获分析数据包
Wireshark数据抓包教程之认识捕获分析数据包 认识Wireshark捕获数据包 当我们对Wireshark主窗口各部分作用了解了,学会捕获数据了,接下来就该去认识这些捕获的数据包了.Wiresh ...
- 获取软件的apk包名、查看手机设备名称等
获取软件的apk包名 1.下载aapt,这里使用的是SDK自带的aapt,找到SDK路径下面的aapt.exe,本机路径:E:\downloads\android-sdk_r23.0.2-window ...
- 不同节点 IP 时间同步 分布式时间同步系统的参考时间获取技术分析
linux linux下时间同步的两种方法分享_LINUX_操作系统_脚本之家 http://www.jb51.net/LINUXjishu/73979.html 分布式时间同步系统的参考时间获取技术 ...
- JAVAEE 是什么,如何获取各种规范jar包及各种规范的jar包源码
1.什么是JAVA EE JAVA EE是由一系列规范组成的,规范是由JCP制定的,并且提供了参考实现.规范(Specification)是一系列接口,不包含具体实现 有以下常见的JAVA EE实现, ...
随机推荐
- Hark的数据结构与算法练习之简单选择排序
/* * 简单选择排序 */ public class SimpleSort { public static void main(String[] args) { int[] arrayData = ...
- The Suspects 简单的并查集
Description 严重急性呼吸系统综合症( SARS), 一种原因不明的非典型性肺炎,从2003年3月中旬开始被认为是全球威胁.为了减少传播给别人的机会, 最好的策略是隔离可能的患者. 在Not ...
- 源码安装Memcached服务器及其2种PHP客户端
本文所用源码包皆为当时最新stable稳定版. 安装memcached服务器 先安装libevent, 最新版为2.0.21 tar -zxvf libevent-2.0.21-stable.tar. ...
- XML的验证模式
XML文件的验证模式保证了XML文件的正确性,而比较常用的验证模式有两种:DTD和XSD. DTD与XSD区别 DTD(Document Type Definition)即文档类型定义,是一种XML约 ...
- Python实践:提取文章摘要
一.概述 二.纯文本摘要 三.HTML摘要 一.概述 在博客系统的文章列表中,为了更有效地呈现文章内容,从而让读者更有针对性地选择阅读,通常会同时提供文章的标题和摘要. 一篇文章的内容可以是纯文本格式 ...
- LCS(滚动数组) POJ 1159 Palindrome
题目传送门 题意:一个字符串要变成回文串至少要插入多少个字符 分析:LCS,长度 - 原串和反串的最大相同长度就是要插入的个数.解释一下,当和反串相同时,在原串中已经是回文的部分了,那么减去LCS长度 ...
- asp.net中导出Excel的方法
一.asp.net中导出Excel的方法: 本文转载 在asp.net中导出Excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出 ...
- 移动APP 中文输入法下的搜索优化
最近做了一个移动端的搜索功能,带有suggest.实现上并没有什么可说的,但是在后续优化上,特别是在中文输入法的情况下的优化使我学到一些新东西,所以决定写一篇文章. 下面是我简化后的基本功能实现,监听 ...
- HTML5中的Blob对象的使用
HTML5中的Blob对象和MYSQL中的BLOB类型在概念上是有点区别的.MYSQL中的BLOB类型就只是个二进制数据容器.而HTML5中的Blob对象除了存放二进制数据外还可以设置这个数据的MIN ...
- winform学习1-----理解小概念-20160506
panel属性,dock:获取或设置控件停靠到父容器的哪一个边缘. none,right,left,fill(完全填充),top C#默认窗体大小设置:maximumsize 窗体最大值 minimu ...