Tcpdump文件格式和结构_白旗黑店

来源:百度文库 编辑:神马文学网 时间:2024/10/02 03:15:15
Tcpdump文件格式和结构2009-04-13 14:07

 

前言:层层剖析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小端);

 

7. Tcpdump数据包具体结构见下图(转帖请注明出处):