(2009-09-01 20:36:49)

标签:

杂谈

分类: 专业

首先是tcpdump文件格式

当你在Windows或者Linux环境下用tcpdump命令抓取数据包时,你将得到如下格式的tcpdump文件:

文件头| 数据包头 | 链路层数据 | 数据包头 | 链路层数据 | 数据包头 | 链路层数据 |......

1. 文件头:每一个文件都以一个24字节的文件头开头。前四个字节是tcpdump文件标志“A1 B2 C3 D4”或为“D4 C3 B2 A1”。

2. 数据包头 | 链路层数据:文件头之后,就是“数据包头 | 链路层数据”为一组的这样一组组数据。

3. 数据包头长度16个字节,它不是网路上真正传输的数据,它包含的信息主要是截获这个包的时间等信息。数据包头的第8-11和12-15字节(按编程习惯,第一个字节为0字节)表示后面链路层数据包的长度。8-11字节是其理论长度,12-15字节为其实际长度,如果存在截断情况,两者可能不同。如果在tcpdump命令中使用了 -s 0 参数,则8-11字节和12-15字节应该相等。

从数据包头结束,到长度指明的字节数为止,是实际在网络中传输的链路层数据包。然后,就是下一个数据包头。

4. 链路层数据

链路层数据包格式和传输的方式有关:局域网共享上网,则是RFC894以太网协议,少数情况下是RFC 1042和802.3协议;如果是Modem拨号上网,则是RFC 1055的SLIP协议;如果是ADSL,则是RFC 1548的PPP协议。RFC894/RFC 1042/RFC 1548这三种协议的格式都是:

包头 | IP数据包 |(包尾)

对于RFC894,包头长度为14字节; ------>局域网方式上网;

对于RFC1042,包头长度为22字节;

对于RFC1548,包头长度为5字节;------>ADSL方式上网;

跨过这些包头字节,就是IP数据包了。

5.IP数据包: IP数据包格式为: IP包头 | IP包数据

1)IP包头的长度:IP包头的长度由IP包的第0个字节决定,如果应用的是IPv4协议,则IP包头的第0个字节总是“45”(高四位‘4’表示IPv4协议;低四位为‘5’,则IP包头的长度为 5×4=20字节,头的长度是以四字节为单位的)。

2)IP包数据:跨过IP包头的20个字节,就是IP包数据部分了。

IP包数据部分的长度,由IP包头的第2-3个字节表示(第一个字节为第0字节)。

IP包数据部分,也就是UDP部分;

6.UDP包格式: UDP包头| UDP包数据

1)UDP包头:固定的8个字节。第4-5字节是UDP包的长度(含8字节包头);

2)UDP包数据: 此部分为网络传送的具体信息,加密、解密等都是处理该部分数据。在处理该部分数据之前,需要先层层剥离出UDP包原始数据。处理过之后,写入新的文件中时,注意新数据的长度,根据需要重写 数据包头表示长度的字节、IP包头中表示长度的字节以及UDP包头中表示长度的字节,同时要注意写入时的字节序(大端or小端);

pcap_dump()所保存.cap文件格式,应该也是按照tcpdump格式存储的:

一上来是4字节的文件标示:D4 C3 B2 A1,或者说是一个整数0xA1B2C3D4按照主机序(高位在后低位在前)保存起来了。

接下来的4字节看起来像是版本号,但完全搞不清楚这个版本号是怎么排的,我的电脑商安装的是4.1Beta4版,这4个字节是:02 00 04 00。另外,Wireshark识别这一字段时认为前两字节是主版本号,我尝试将这4字节改为01 00 04 00,再打开文件时报错说main version 1 unsupported……。

接下来是8字节的00,没什么好说的。

再下去是4字节记录Winpcap抓包时所抓取的数据长度,也就是pcap_open()函数的第二个参数snaplen的值。例如snaplen=65535时,这4字节成为FF FF 00 00.

然后4字节记录网络类型,如十进制1表示以太网,6表示令牌环网,15表示帧中继硬件格式等等。一般在以太网环境下,这4个字节为01 00 00 00.

以上几个字段属于文件头部分,接着就是一个一个的数据包了。每个数据包前面还有相应的16字节标记信息,前8字节为时间戳;然后4字节是捕获到的数据长度,例如一个数据包实际长度为60字节,但由于pcap_open()函数的第二个参数snaplen的值设置为50,所以捕获到的长度为50,如果snaplen设置为65535,那么捕获到的长度应为实际数据包长60;再然后是该数据包的实际长度,用4字节表示;最后是数据包全文,从链路层数据开始记录。一个数据包完了之后是下一个数据包,直到所有数据包记录结束为止。实际上就是把抓包函数的两个参数struct pcap_pkthdr *header和const u_char *pkt_data写到了文件里。

pcap的pcap_dump()保存的文件格式的更多相关文章

  1. php把数组保存成文件格式

    php把数组保存为文件格式的函数实例,或许有的还没听说过可以把数组保存成文件,其实这样做也是另有它用的,两种方法各有千秋,有兴趣的PHP爱好者敬请参阅: $file="./cache/fil ...

  2. ios 使用可视化工具charles转换pcap文件,进行流量统计(通过tcpdump抓包)

    环境准备:使用mac电脑,下载xcode,Charles 连接iPhone手机,打开xcode-window-devices-查看设备UDID 打开终端:rvictl –s 设备号 ,查看虚拟端口号 ...

  3. 关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法

    -----转载:http://blog.csdn.net/sgear/article/details/7663502 关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格 ...

  4. ZBrush中Tool工具的保存

    ZBrush软件的界面及操作方法与其他的三维软件完全不同,很多初学者常常会觉得有些困难,接下来我们就讲解一下ZBrush®最为基础的操作-Tool工具的保存. 首先要明白什么是Tool工具?我们创建的 ...

  5. 20201103_notepad++修改文件保存的默认格式

    修改notepad++文件保存的默认格式 点开 设置 ==> 首选项 1.  修改默认语言为要默认保存的文件格式 2. 将默认目录下的使用新样式对话框取消勾选  

  6. 利用fis3自动化处理asp.net项目静态资源时遇到的一个编码问题

    fis3是一款强大的前端自动化构建工具,提供了很多非常实用的功能,具体参考http://fis.baidu.com/,使用该工具需要安装node环境. 最近在部署网站的时候尝试了一下使用该工具对前端资 ...

  7. [Excel] WorkBook.SaveAs

    ExcelApplication.WorkBook.SaveAs(Filename, FileFormat, Password, WriteResPassword, ReadOnlyRecommend ...

  8. Django入门2

    Django模板简单实例 上篇中将html写在了views中,这种混合方式(指Template和views混在一起)不适合大型开发,而且代码不易管理和维护,下面就用Django自带的模板来学习(显示一 ...

  9. ps技巧

    ADOBE PHOTOSHOP 同义词 PS(位图图像处理软件Photoshop)一般指ADOBE PHOTOSHOP 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . Adobe Pho ...

随机推荐

  1. 意犹未尽而来的第一篇Android 逆向

    游戏:咕噜王国大冒险 平台:android 目标: 1. 去除乱七八糟提示(本篇目标) 2. 去除google弹窗 3. 破解“all stages” 破文开始: 1. 使用APKIDE反编译:搜索字 ...

  2. structDemo1

    structDemo1 # include <iostream.h> # include <malloc.h> enum EType{ One = ,Tow,Three }; ...

  3. QLGame 2d Engine Android端环境搭建(通过jni读取assets目录的文件)

    QLGame 2d Engine win端已经实现了一个动物的动画了,初步的东西已经完成,考虑在Android端也实现这些基本的东西,这样跨平台的引擎也就实现了! 要在Android下编程,首先要实现 ...

  4. 思考 Swift 中的 MirrorType 协议

    Swift中的反射非常有限,仅允许以只读方式访问元数据的类型子集.或许 Swift 因有严格的类型检验而不需要反射.编译时已知各种类型,便不再需要进行进一步检查或区分.然后大量的 Cocoa API ...

  5. 【Uvalive 5834】 Genghis Khan the Conqueror (生成树,最优替代边)

    [题意] 一个N个点的无向图,先生成一棵最小生成树,然后给你Q次询问,每次询问都是x,y,z的形式, 表示的意思是在原图中将x,y之间的边增大(一定是变大的)到z时,此时最小生成数的值是多少.最后求Q ...

  6. Inline Hook NtQueryDirectoryFile

    Inline Hook NtQueryDirectoryFile 首先声明这个是菜鸟—我的学习日记,不是什么高深文章,高手们慎看. 都总是发一些已经过时的文章真不好意思,几个月以来沉迷于游戏也是时候反 ...

  7. Spring 通过工厂方法(Factory Method)来配置bean

    Spring 通过工厂方法(Factory Method)来配置bean 在Spring的世界中, 我们通常会利用bean config file 或者 annotation注解方式来配置bean. ...

  8. perl 监控mysql 事务和锁

    use DBI; use Net::SMTP; use HTTP::Date qw(time2iso str2time time2iso time2isoz); # mail_user should ...

  9. Learing WCF Chapter1 Fundamental WCF Concepts

    At its core,WCF is a development platform for service-oriented applications. As I mentioned earlier, ...

  10. 【Android 复习】:第01期:引导界面(一)ViewPager介绍和使用详解

    一.ViewPager实现的效果图 二.ViewPager实现的功能 看到上面的效果图,想必大家已经猜出了这个类是干吗用的了,ViewPager类提供了多界面切换的新效果, 新效果有如下特征: < ...