CAP文件是一种常见的文件格式,用于存储捕获的网络数据包。大多数抓包软件都支持使用CAP格式保存数据包。需要注意的是,CAP文件存储的是网络数据帧,不同网络传输协议的帧格式有所差异。在这里,我们以以太网帧为例进行讨论。我所分析的CAP包是由ethereal抓取的,而tcpdump和windump抓取的包格式基本相同。
CAP文件是一个全十六进制的数据文件,而不是文本文件,因此需要进行结构分析。由于我不打算开发专门的分析软件,所以我只对我认为有意义的一些数据进行分析。
CAP文件中的数据有些地方与常规数据的顺序相同,而有些位置是标准的高位取反,根据该位置表示的数据类型进行确定。
CAP文件的前24个十六进制位是头文件相关的信息,我们不需要关心。紧随其后的八个位(后面的所有位都由两个十六进制数构成,例如AC,B8就是两个十六进制位),是抓包的时间戳标记。其中应该包括了年月日和精确到毫秒级的时间。前4位进行高低位互换后再乘以1000,可以得到当前时间精确到秒,后4位是微秒,计算方法与前面相同。
接下来的8个位非常重要,其中前4个位表示我们抓取到的数据帧长度,同时也关系到我们如何在CAP文件中获取下一组数据帧的位置。这四个位的每个位的前两位进行高位取反后表示数据帧的长度,第一组是软件抓取到的数据帧长度,后面一组是网络中实际数据帧的长度。一般来说,第一组长度小于等于第二组数据。这8个位结束后,就是帧的具体内容,长度为前面的第一组数。在这个长度之后,就是CAP文件中存储的下一组帧数据。换句话说,CAP文件中并没有规定捕获的帧数据之间的间隔字符串,我们需要依靠第一组数来确定下一组数据在文件中的起始位置。
下面的内容实际上应该属于TCP/IP书籍中的标准内容,但我还是继续写下去。