cap文件格式解析

摘要:
以上述方式解析数据头和数据内容后,数据头和内容将根据cap文件的格式显示在下面,直到解析完所有cap文件。总之,本文简要介绍了cap文件的格式和协议的基本解析。因为将涉及许多协议,所以这里不会解析数据包的具体内容。
简介

  cap包为通过抓包软件保存下来的数据包文件,不同的抓包软件保存下来的cap包格式也有很大差异,从最开始的4个字节便可以看出,如下列出不同抓包软件的cap包文件前4字节的差异

#define CAP_SNIFFER_WINDOWS_200X        "x58x43x50x00"  //sniffer抓包的cap文件
#define PCAP_WIRESHARK_TCPDUMP          "xd4xc3xb2xa1   //wireshark抓包的pcap文件

   以下以sniffer抓包的cap文件为示例,但也会介绍下其他cap文件的基本格式。

  如下是sniffer cap文件头4个字节:

cap文件格式解析第1张

  如下为其他cap文件头4个字节:

cap文件格式解析第2张

cap文件格式

  cap文件开始有128字节的文件头部分,接下来是抓获到的数据包部分,包括40字节的数据头和数据内容部分,具体的数据内容的长度需要根据数据头部分确定。cap文件大概结构如下:

cap文件格式解析第3张

  在此说明下,除了sniffer抓的文件,其他cap文件的格式区别如下,cap文件开始是24字节的文件头部分,接下来同样是数据包部分,包括16字节的数据头和数据内容部分,具体的数据内容的长度同样需要数据头部分确定。

  以上结构中数据内容部分包括从数据链路控制层头开始,然后IP报头,传输层报头,最后到传输层以及后续的应用层数据。

数据头格式

  sniffer的128字节或其他类型cap文件的前16字节的文件头部分在此只是取出前4个字节作为区分cap文件类型,其他数据没有用到。所以现在直接开始介绍数据头部分。sniffer的数据头部分为40字节,具体的结构类型如下:

  其他类型cap文件的数据头部分格式如下,长度为16字节:

struct tcpdump_record_head {
	unsigned int time_seconds;  //精确到秒的时间戳
	unsigned int time_microsecondes; //精确到毫秒的时间戳
	unsigned int len;   //数包长度:标识所抓获的数据包保存在cap文件中的实际长度,以字节为单位。
	unsigned int len_copy; //数据包实际长度:所抓获的数据包真实的长度,如果文件中保存不是完整的数据包,那么这个值可能要比前面的数据包长度的值大
};

数据内容解析

  根据以上读取出头部信息中的数据长度,截取相应长度的数据内容进行解析,以下根据协议层数只解析每层协议头部的个别字段,通过此方式对数据内容进行逐层解析。

1、首先解析数据链路层协议

  对数据内容跳转12个字节,过滤MAC信息,获取2字节的协议类型字段,此字段标志着数据链路层的下一层是什么协议,对获取出的2字节数据需要进行网络字节序到主机字节序的转换,然后与如下数据进行比较确定下层协议类型:

0x86DD /*ipv6*/ 
0x0800 /* ipv4 */
0x8847 /* MPLS unicast */
0x8848 /* MPLS multicast */
0x0806 /* arp */
0x8035 /* rarp */
0x8863 /* PPPoE protocol */

 2、网络层

  通过以上方式获取下层协议的类型后,下边我们以ipv4作为示例,假设数据内容的网络层是IPV4,ipv4网络层的数据内容第1个字节就包含了ip协议的版本号和ip层的头长度,具体内容如下:

cap文件格式解析第4张

  上图中的45,4表示为IPV4,5*4(ip头部长度计算方式需要乘以4)表示ip头部长度,因为这次只获取出1字节内容,所以没必要对数据进行字节序转换。

  下边是IP的数据包格式:

  cap文件格式解析第5张

  各字段的含义如下:

cap文件格式解析第6张

3、传输层

  通过以上方式知道了网络层头部长度,可以直接跳过网络层头部部分,下边开始解析传输层。传输层分为TCP和UDP,下边以TCP作为示例,如下是TCP报文格式:

cap文件格式解析第7张

  根据以上TCP报文格式可知如果想获取TCP头部长度,需要跳过12个字节,获取4位首部长度,为了方便获取,我们会直接获取两个字节(16位)数据,并对获取的数据进行字节序转换,然后获取4位首部长度。如下为实现的代码示例:

short tcpHeaderLenAndFlag = 0;
int tcpHeaderLen = ((ntohs(tcpHeaderLenAndFlag)&0xF000)>>12) * 4; //TCP头部的长度同样需要乘以4

 4、应用层

  通过上诉方式可以获取TCP的首部长度,直接跳过TCP层来到应用层,因为没有对TCP层进行详细解析,目前无法获取应用层协议的具体协议信息。

通过以上方式解析完数据头和数据内容后,按照cap文件的格式,下边又会是数据头和数据内容,直到把cap文件全部解析完。

总结

  本次简单介绍了cap文件的格式,以及协议的基本解析,因为会涉及到非常多的协议,在此不对数据包的具体内容进行解析。

免责声明:文章转载自《cap文件格式解析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vue+canvas实现简易画板Eclipse解决运行、启动缓慢问题思路下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Vim 自动文件头注释与模板定义

Vim 自动文件头注释与模板定义 在vim的配置文件.vimrc添加一些配置可以实现创建新文件时自动添加文件头注释,输入特定命令可以生成模板。 使用方法 插入模式输入模式输入seqlogic[Enter]创建时序逻辑框架 新创建一个文件 gvim test.c 自动添加头部注释 F2映射文件头注释,命令行模式文件内按F2自动添加 F11映射注释,命令...

tcpdump抓包及tshark解包方法介绍

tshark是wireshark的命令行工具,通过shell命令抓取、解析报文。tcpdump是Linux系统下的抓包工具。wireshark和tcpdump都共同使用 libpcap作为其底层抓包的库,tshark也可以抓取报文。 有时候需要在linux系统或者ARM开发板中进行抓包,使用tcpdump抓包更加方便,在这种场景下,一般使用tcpdump进...

BMP图像数据格式详解

一.简介 BMP(Bitmap-File)图形文件是Windows采用的图形文件格式,在Windows环境下运行的所有图象处理软件都支持BMP图象文件格式。Windows系统内部各图像绘制操作都是以BMP为基础的。Windows 3.0以前的BMP图文件格式与显示设备有关,因此把这种BMP图象文件格式称为设备相关位图DDB(device-dependent...

使用Fiddler远程抓包

Fiddler简介以及web抓包 一.Fiddler简介          简单来说,Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯。网上简介很多,我们不多说。 二.Fiddler版本          Fiddler有Fiddler2和Fiddler4,两者区别在于,基于的framework不同,也就...

oracle之检查点(Checkpoint)

检查点是一个数据库事件,它把修改数据从高速缓存写入磁盘,并更新控制文件和数据文件。检查点分为三类:1)局部检查点:单个实例执行数据库所有数据文件的一个检查点操作,属于此实例的全部脏缓存区写入数据文件。触发命令:svmrgrl>alter system checkpoint local;这条命令显示的触发一个局部检查点。2)全局检查点:所有实例(对应并...

对几款网络抓包工具的评测

对几款网络抓包工具的评测 by 拉登哥哥最近在写个CMD远控 写着写着 想在服务端上做点手脚都知道杀软误报 特别是黑软大部分都报毒 但实际上是正常的对此可能部分人并不装杀软 基本上靠自己分析软件是否安全1 低级点的 用相关工具 检测不能真的完全保证程序无毒 也没啥技术含量原因是 可能你正在检测时 后门没激活(比如 我设置晚上12点才向外连接等)你在白天或其...