Axiu Blog
主机控制器(Host Controller)之间会存在若干传输层,这些传输层是透明的,只需完成传输数据的任务,不必清楚数据的具体格式。 ### 关于HCI 关于HCI的通信方式,需要知道HCI是通过包的方式来传送数据、命令和事件的,所有在主机和主机控制器之间的通信都以包的形式进行。包括每个命令的返回参数都通过特定的事件包来传输。HCI有数据、命令和事件三
蓝牙是Android手机中的一个关键部件,HCI是位于蓝牙系统的L2CAP(逻辑链路控制与适配协议)层和LMP(链路管理协议)层之间的一层协议。HCI为上层协议提供了进入LM的统一接口和进入基带的统一方式。在HCI的主机(Host)和HCI主机控制器(Host Controller)之间会存在若干传输层,这些传输层是透明的,只需完成传输数据的任务,不必清楚数据的具体格式。 ### 关于HCI
蓝牙是Android手机中的一个关键部件,HCI是位于蓝牙系统的L2CAP(逻辑链路控制与适配协议)层和LMP(链路管理协议)层之间的一层协议。HCI为上层协议提供了进入LM的统一接口和进入基带的统一方式。在HCI的主机(Host)和HCI主机控制器(Host Controller)之间会存在若干传输层,这些传输层是透明的,只需完成传输数据的任务,不必清楚数据的具体格式。 ### 关于HCI
解析Android蓝牙数据包
Max

蓝牙是Android手机中的一个关键部件,HCI是位于蓝牙系统的L2CAP(逻辑链路控制与适配协议)层和LMP(链路管理协议)层之间的一层协议。HCI为上层协议提供了进入LM的统一接口和进入基带的统一方式。在HCI的主机(Host)和HCI主机控制器(Host Controller)之间会存在若干传输层,这些传输层是透明的,只需完成传输数据的任务,不必清楚数据的具体格式。

关于HCI

关于HCI的通信方式,需要知道HCI是通过包的方式来传送数据、命令和事件的,所有在主机和主机控制器之间的通信都以包的形式进行。包括每个命令的返回参数都通过特定的事件包来传输。HCI有数据、命令和事件三种包,其中数据包是双向的,命令包只能从主机发往主机控制器,而事件包始终是主机控制器发向主机的。

要分析数据包,一般有两种方式:通过android的log打印来解析,或者直接解析HCI的log,该log由原始编码直接记录,因此要分析它,必须先要解包,转换成可读格式。

本篇的主要内容就是怎么解析蓝牙数据包。

关于Wireshark

解蓝牙数据包的程序不多,这里主要用到Wireshark。

Wireshark是一个网络封包分析软件,功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。

除了网络抓包以外,通常看到的一些红外、蓝牙、I2C、MIME等格式的数据包。详细内容点下面链接:

Wireshark支持的数据包格式

GUI界面操作比较简单,只需要点击打开,之后导入目标包即可查看。通过顶部的filter栏,可以方便地获取到需要的信息(比如局域网某IP的网络流量什么的……),这里就不再赘述。下面介绍一下字符界面—Tshark。

使用TShark

TShark是一个网络协议分析工具,他可以实时抓取活动网络的数据包,或者读取已保存的数据包,通过它,你可以打印解析后的信息,或者写入到某个文件。

关于TShark的使用说明在 这里

在Windows环境下,CD到WireShark的根目录,找到app->Wireshark,在目标目录下可以看到editcap、TShark等exe文件,直接双击就是闪退,说明是要带参数运行的(至少我是这么理解的)。

以获取的HCI log文件保存在D盘为例。

命令行输入tshark –r D:\target.cfa > D:\result.txt,这样即可在result.txt里查看到格式化好的详细内容了。

进一步的,可以通过一些参数来规格化输出,比如 –t可以设定输出时间戳的格式,如绝对日期(ad)、秒(e)、抓取第一个包到当前包的相对时间(r)等等;通过-T来设定目标文件格式,如pdml、ps(postScript)、text、csv(逗号分隔值);打印额外信息等等。

Comments