BTSnoop 文件格式

1. 概述

BTSnoop 文件格式适用于存储蓝牙 HCI 数据流。 它与 RFC 1761 中记录的 snoop 格式非常相似。

2. 文件格式

snoop 数据包捕获文件是一个八位字节数组,结构如下:

文件头(File Header)是一个固定长度的字段,包含有关数据包文件的一般信息及其包含的数据包记录(Packet Record)的格式。 文件头之后是一个或多个可变长度的数据包记录(Packet Record)字段。 每个数据包记录(Packet Record)字段保存一个捕获数据包的数据。

2.1 文件头

文件头结构如下:

Identification Pattern:

64位模式,用于将文件标识为snoop数据包捕获文件。 固定值为 62 74 73 6E 6F 6F 70 00, 即 ASCII 字符串“btsnoop”后跟一个NULL。

Version Number:

32位无符号整数值,表示正在使用的数据包捕获文件的版本。 固定值 1。

Datalink Type:

32位字段,用于标识随后的数据包记录中使用的数据链路报头类型。 下表列出了数据链路类型代码。 保留值 0 - 1000,以最大限度地与 RFC1761 snoop version 2 格式兼容。

2.2 数据包记录格式

每个数据包记录保存一个数据包的部分或完整副本以及有关该数据包的一些描述信息。 可以截断数据包以限制要存储在数据包文件中的数据量。

每个数据包记录包含24字节的数据包描述信息,后面是可变长度的数据包数据和一个可选的填充字段。 数据包描述信息由6个32位整数值构成。

数据包记录的结构如下:

Original Length

一个 32 位无符号整数,表示通过网络接收到的捕获数据包的八位字节长度。

Included Length

一个 32 位无符号整数,表示数据包数据字段的长度。 这是包含在此数据包记录中的捕获数据包的字节数。 如果接收到的数据包被截断,则Included Length字段小于Original Length字段。

Packet Flags

特定于此数据包的标志。 目前定义了以下标志:

 bit 0 是 32 位字的最低有效位。

方向是相对于主机而言。 即对于蓝牙控制器,发送是主机->控制器,接收是控制器->主机。

注意:一些数据链路类型(Datalink Type)已经在数据包数(Packet Data)据中编码了部分或全部的此信息。 对于这些数据链路类型(Datalink Type),应将这些标志视为仅提供信息,并且应优先考虑数据包(Packet Data)中的值。

Cumulative Drops

一个 32 位无符号整数,表示在文件中的第一个数据包记录和这个数据包记录之间创建数据包文件的系统丢失的数据包数。数据包丢失可能是因为抓包系统资源不足,或者其他原因。

注意:一些实现缺乏对丢弃的数据包进行计数的能力。这些实现可以将累积丢包值设置为0。

Timestamp Microseconds

一个 64 位有符号整数,表示数据包到达时间,自公元 1 月 1 日午夜起的微秒数。

为了避免计算中的闰日歧义,请注意可以使用公元 2000 年 1 月 1 日午夜的等效纪元,在此字段中表示为 0x00E03AB44A676000。

注意:unix元年是1970年所以unix系统需要加上1970年,在此字段中表示为 0x00DCDDB30F2F8000。

Packet Data

保存捕获的数据包的可变长度字段,从其数据链路标头开始。文件头的数据链路类型(Datalink Type)字段可用于确定如何解码数据链路头。 Packet Data 字段的长度在 Included Length 字段中给出。

3. 数据格式

所有整数值都以“大端”顺序存储,高位在前。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值