pcap的pcap_dump()保存的文件格式
(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()保存的文件格式的更多相关文章
- php把数组保存成文件格式
php把数组保存为文件格式的函数实例,或许有的还没听说过可以把数组保存成文件,其实这样做也是另有它用的,两种方法各有千秋,有兴趣的PHP爱好者敬请参阅: $file="./cache/fil ...
- ios 使用可视化工具charles转换pcap文件,进行流量统计(通过tcpdump抓包)
环境准备:使用mac电脑,下载xcode,Charles 连接iPhone手机,打开xcode-window-devices-查看设备UDID 打开终端:rvictl –s 设备号 ,查看虚拟端口号 ...
- 关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法
-----转载:http://blog.csdn.net/sgear/article/details/7663502 关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格 ...
- ZBrush中Tool工具的保存
ZBrush软件的界面及操作方法与其他的三维软件完全不同,很多初学者常常会觉得有些困难,接下来我们就讲解一下ZBrush®最为基础的操作-Tool工具的保存. 首先要明白什么是Tool工具?我们创建的 ...
- 20201103_notepad++修改文件保存的默认格式
修改notepad++文件保存的默认格式 点开 设置 ==> 首选项 1. 修改默认语言为要默认保存的文件格式 2. 将默认目录下的使用新样式对话框取消勾选
- 利用fis3自动化处理asp.net项目静态资源时遇到的一个编码问题
fis3是一款强大的前端自动化构建工具,提供了很多非常实用的功能,具体参考http://fis.baidu.com/,使用该工具需要安装node环境. 最近在部署网站的时候尝试了一下使用该工具对前端资 ...
- [Excel] WorkBook.SaveAs
ExcelApplication.WorkBook.SaveAs(Filename, FileFormat, Password, WriteResPassword, ReadOnlyRecommend ...
- Django入门2
Django模板简单实例 上篇中将html写在了views中,这种混合方式(指Template和views混在一起)不适合大型开发,而且代码不易管理和维护,下面就用Django自带的模板来学习(显示一 ...
- ps技巧
ADOBE PHOTOSHOP 同义词 PS(位图图像处理软件Photoshop)一般指ADOBE PHOTOSHOP 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . Adobe Pho ...
随机推荐
- 意犹未尽而来的第一篇Android 逆向
游戏:咕噜王国大冒险 平台:android 目标: 1. 去除乱七八糟提示(本篇目标) 2. 去除google弹窗 3. 破解“all stages” 破文开始: 1. 使用APKIDE反编译:搜索字 ...
- structDemo1
structDemo1 # include <iostream.h> # include <malloc.h> enum EType{ One = ,Tow,Three }; ...
- QLGame 2d Engine Android端环境搭建(通过jni读取assets目录的文件)
QLGame 2d Engine win端已经实现了一个动物的动画了,初步的东西已经完成,考虑在Android端也实现这些基本的东西,这样跨平台的引擎也就实现了! 要在Android下编程,首先要实现 ...
- 思考 Swift 中的 MirrorType 协议
Swift中的反射非常有限,仅允许以只读方式访问元数据的类型子集.或许 Swift 因有严格的类型检验而不需要反射.编译时已知各种类型,便不再需要进行进一步检查或区分.然后大量的 Cocoa API ...
- 【Uvalive 5834】 Genghis Khan the Conqueror (生成树,最优替代边)
[题意] 一个N个点的无向图,先生成一棵最小生成树,然后给你Q次询问,每次询问都是x,y,z的形式, 表示的意思是在原图中将x,y之间的边增大(一定是变大的)到z时,此时最小生成数的值是多少.最后求Q ...
- Inline Hook NtQueryDirectoryFile
Inline Hook NtQueryDirectoryFile 首先声明这个是菜鸟—我的学习日记,不是什么高深文章,高手们慎看. 都总是发一些已经过时的文章真不好意思,几个月以来沉迷于游戏也是时候反 ...
- Spring 通过工厂方法(Factory Method)来配置bean
Spring 通过工厂方法(Factory Method)来配置bean 在Spring的世界中, 我们通常会利用bean config file 或者 annotation注解方式来配置bean. ...
- perl 监控mysql 事务和锁
use DBI; use Net::SMTP; use HTTP::Date qw(time2iso str2time time2iso time2isoz); # mail_user should ...
- Learing WCF Chapter1 Fundamental WCF Concepts
At its core,WCF is a development platform for service-oriented applications. As I mentioned earlier, ...
- 【Android 复习】:第01期:引导界面(一)ViewPager介绍和使用详解
一.ViewPager实现的效果图 二.ViewPager实现的功能 看到上面的效果图,想必大家已经猜出了这个类是干吗用的了,ViewPager类提供了多界面切换的新效果, 新效果有如下特征: < ...