winpcap捕捉网络数据包
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
利用WIPCAP捕捉IP数据包分析局域网流量1、背景知识
1.1、IP协议
IP(Internet Protocol,互联网协议)协议是TCP/IP协议族中最为核心的协议,所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。IP协议把传输层送来的消息封装成IP数据包,并把IP数据包传递给数据链路层。IP协议制定了统一的IP数据报格式,向传输层屏蔽了通信子网的差异,从而为消息的收发双方提供了一条透明的传输通道。
IP数据包结构如图1-1:
图1-1 IP包结构
1.版本
IP数据报的第一个域是版本域,其长度为4bit,表示所使用的IP协议的版本。通信双方使用的IP协议的版本必须一致。版本域值为4则表示IPv4;版本域值为6则表示IPv6。当前的版本为IPv4。
2.报头长度
报头长度域长度为4bit,它以4个字节为计算单位表示报头的长度,该长度不包含数据部分。报头中除了IP选项域与填充域之外,其他各项是定长的。因为很少使用IP选项功能,所以,该域的值一般为5,意味着报头的长度是5个4字节,也就是20个字节。
协议规定:IP数据报的报头长度必须是4字节的整数倍。当IP报头长度不是4字节的整数倍时,必须利用最后一个填充域“添0”来加以填充。
3.服务类型
如图1-2所示,该字段占8bit,包括3bit的优先级字段,4bit的服务类型(type of service,TOS)字段和1bit的保留位,保留位必须置0。该字段用于指示路由器如何处理该数据报。
图1-2 服务类型字段结构
3bit的优先级表示数据报的重要性,共分8级,数值越大等级越高,优先级越高则表示数据报越重要(该字段值现在已被忽略)。
4bit的TOS字段分别表示:最小时延(D)、最大吞吐量(T)、最高可靠性(R)和最小费用(C)。每个位都有0或1两个值,但4bit中最多只能有一个位的值为1。如果所有4 bit均为0,那么就意味着是一般服务。
4.总长度
总长度域占16 bit,它以字节为单位具体说明包括报头在内的整个IP数据包的总长度。利用报头长度字段和总长度字段,就可以知道I P数据报中数据内容的起始位置和长度。因为该字段有16 bit,所以IP数据报最长可达65535字节。尽管可以传送一个长达65535字节的IP数据报,但是大多数的链路层都要求对它进行分片,总长度不得超过最大传输单元MTU。当数据报被分片时,该字段的值也随着变化。
5.标识
标识字段占16 bit,用来唯一地标识主机发送的每一份数据报,通常每发送一份报文它的值就会加1。当IP数据报必须进行分片时,这个标识域的值将被复制到所有数据报分片的标识域中。相同的标识域值使各数据报分片最后能正确地重装为原来的数据报。
6.标志
标志字段占3bit,第一bit保留并总设为0;第二bit 是禁止分片标志DF,标识报文能否被分片,如果该位为0,说明数据报可以被分片,如果等于1,表示不允许被分片;第三bit是分片标志MF,只有在DF为0时该字段才有意义,用以标识此报文是否是这系列分片的最后一个,0表示接收到的是最后一个分片。
7.片偏移
片偏移量表示该分片在整个数据报中的原来数据报中的相对位置。片偏移以8B为偏移单位,因此选择的分片长度应该是8B的整数倍。
8.生存时间(TTL)
生存时间TTL(time-to-live)字段占8bit,它设置了数据报可以经过的最多路由器数。TTL的初始值由源主机设置,一旦经过一个处理它的路由器,它的值就减去1。当该字段的值为0时,数据报就被丢弃,并发送ICMP报文通知源主机。设置生存时间是为了避免无法发送的数据报永远在互联网上流动。
9.协议类型
该字段占8bit,指出此IP数据报的高层协议类型,以便目的主机的IP层将数据部分上交给哪个高层协议处理。许多高层协议的数据能够被封装到IP数据报中,如TCP、UDP和ICMP等。常用的协议号如表1-1所示。该字段是本程序要求输出的信息之一。
表1-1 常用的高层协议与其协议域值的对应关系
IP头部校验和占16 bit,它设置的目的是保证数据报头部的数据完整性,而不包括数据部分。这样做的目的有两个:一是所有将数据封装在IP数据报中的高层协议均含有覆盖整个数据的校验码,因此IP数据报没有必要再对其所承载的数据部分进行校验;二是因为每经过一个路由器,IP数据报的头部都要发生改变,而数据部分并不改变,这样,校验和只对发生改变的首部进行校验显然这不需要花费太多的处理时间。
为了减少计算校验和的开销,IP数据报头部校验和不采用CRC校验码,而是采用更简单的分段计算方法:发送端先把检验和字段置为0,然后将头部划分为长度为16 bit的比特序列,对头部中每个16 bit进行二进制反码求和,结果存在检验和字段中;当收到一份IP数据报后,同样对头部中每个16 bit进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在头部中的检验和,因此,如果头部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。
11.源IP地址
源IP地址是32bit,表示发送数据报的源主机的IP地址。在IP数据报从源主机发送到目的主机的过程中,这个域的值必须保持不变。该字段是本程序要求输出的信息之一。
12.目的IP地址
目的IP地址也是32bit,表示接收数据报的目的主机的IP地址。同样地,在IP数据报从源主机发送到目的主机的过程中,这个域的值也必须保持不变。该字段也是本程序要求输出的信息之一。
13.选项域
选项预的长度范围为0~40B,主要用于支持纠错、测量及安全等措施。在使用选项字段的过程中,有可能出现报头部分的长度不是4B的整数倍。如果出现这种情况,就需要通过增加全0的填充域凑齐。
1.2、UDP协议
UDP协议是一种无连接,不可靠的简单通信协议,所以其报头结构也较为简单。UDP数据包报头结构如图
图1-3 UDP数据包结构
源端口和目的端口分别代表本次UDP通信发起主机和目的主机所使用的端口号,总长度代表整个UDP数据包头和其发送数据的总长度。校验和是针对整个数据包内容的网际校验值,提供对本数据包正确性的检查功能。