本文中的分析与软件相关的内容,都是以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包的更多相关文章

  1. 使用wireshark抓包分析-抓包实用技巧

    目录 使用wireshark抓包分析-抓包实用技巧 前言 自定义捕获条件 输入配置 输出配置 命令行抓包 抓取多个接口 抓包分析 批量分析 合并包 结论 参考文献 使用wireshark抓包分析-抓包 ...

  2. 使用winpcap多线程抓包,以及简单的分析数据包

    刚开始使用winpcap数据包的时候,我在抓包的时候使用了 pcap_loop(adhandle, 0, packet_handler, NULL); 这个回调函数进行抓包.同时在回调函数中分析IP地 ...

  3. 在Android手机上获取其它应用的包名及版本

    转载请注明出处:http://blog.csdn.net/jason_src/article/details/37757661 获取Android手机上其它应用的包名及版本方法有非常多,能够通过AAP ...

  4. 微信小程序编译包的获取与解压——在手机中获取小程序编译包wxapkg

    准备工作: 微信关注需要下载编译包的小程序,然后点进去看一下,微信就会自动下载相应的编译包到手机上了. 获取小程序编译包: 据说root手机可以直接在手机的文件管理中查找wxapkg文件,自己尝试了下 ...

  5. 情感分析snownlp包部分核心代码理解

    snownlps是用Python写的个中文情感分析的包,自带了中文正负情感的训练集,主要是评论的语料库.使用的是朴素贝叶斯原理来训练和预测数据.主要看了一下这个包的几个主要的核心代码,看的过程作了一些 ...

  6. Wireshark数据抓包教程之认识捕获分析数据包

    Wireshark数据抓包教程之认识捕获分析数据包 认识Wireshark捕获数据包 当我们对Wireshark主窗口各部分作用了解了,学会捕获数据了,接下来就该去认识这些捕获的数据包了.Wiresh ...

  7. 获取软件的apk包名、查看手机设备名称等

    获取软件的apk包名 1.下载aapt,这里使用的是SDK自带的aapt,找到SDK路径下面的aapt.exe,本机路径:E:\downloads\android-sdk_r23.0.2-window ...

  8. 不同节点 IP 时间同步 分布式时间同步系统的参考时间获取技术分析

    linux linux下时间同步的两种方法分享_LINUX_操作系统_脚本之家 http://www.jb51.net/LINUXjishu/73979.html 分布式时间同步系统的参考时间获取技术 ...

  9. JAVAEE 是什么,如何获取各种规范jar包及各种规范的jar包源码

    1.什么是JAVA EE JAVA EE是由一系列规范组成的,规范是由JCP制定的,并且提供了参考实现.规范(Specification)是一系列接口,不包含具体实现 有以下常见的JAVA EE实现, ...

随机推荐

  1. 17111 Football team

    时间限制:1000MS  内存限制:65535K 提交次数:0 通过次数:0 题型: 编程题   语言: C++;C Description As every one known, a footbal ...

  2. 01背包 URAL 1073 Square Country

    题目传送门 /* 题意:问n最少能是几个数的平方和 01背包:j*j的土地买不买的问题 详细解释:http://www.cnblogs.com/vongang/archive/2011/10/07/2 ...

  3. Web 设计新趋势: 使用 SVG 代替 Web Icon Font

    如果你还在使用 Icon Font 作为网页中显示图标的实现方案,那么你可能有点 Out 了. 由于使用 Icon Font 显示图标存在一些缺陷,开发者们一直在致力于探索使用 SVG 作为替代的方法 ...

  4. 【BZOJ】1862: [Zjoi2006]GameZ游戏排名系统 & 1056: [HAOI2008]排名系统(treap+非常小心)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1862 http://www.lydsy.com/JudgeOnline/problem.php?id ...

  5. "504 Gateway Time-out"

    "504 Gateway Time-out”是什么意思? 意思为:网关超时!

  6. QTabWiget Change Color 改变颜色

    Qt中的QTabWiget 类提供了一个标签控件,但是这个控件默认初始化的颜色是白色,和原窗口的颜色不同,看起来非常的违和,所以我们希望将其的背景颜色设为当前窗口的背景颜色.我们所要做的就是先将应用程 ...

  7. 微博开发平台java SDK demo学习之friendships

    本文解释了在java SDK的demo中与feiendships有关的功能 截图如下: 关注一个用户(需要知道该用户uid) 取消关注一个用户(用户uid) 获取用户粉丝列表(授权用户的screen_ ...

  8. 2. MySQL

    安装: apt-get install mysql-server   配置: mysql_install_db mysql_secure_installation   另有两处需要修改 [mysqld ...

  9. 《GK101任意波发生器》升级固件发布(版本:1.0.2build539)

    一.固件说明: 硬件版本:0,logic.3 固件版本:1.0.2.build539 编译日期:2014-10-08 ====================================== 二. ...

  10. Scrum会议4

    组名称:天天向上 项目名称:连连看 参会成员:王森(Master)张金生 张政 栾骄阳 时间:2016.10.19 已完成内容: 1.连连看生成一关功能. 2.目前测试发现没有问题. 计划完成: 1. ...