且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

My learning path (网络安全高级应用)TCP/IP高级技术

更新时间:2022-10-02 15:28:21

本篇文章的内容主要讨论关于TCP/IP中数据报一些理论,包括针对于IP数据报的格式,ICMP数据报等内容,包括使用hping工具模拟一些常见的攻击,并使用sniffer pro查看正常报文和攻击报文的差别。

IP数据报

      IP数据报由首部,数据两部分组成。

My learning path (网络安全高级应用)TCP/IP高级技术

      这里看的是IP数据报的首部,可以看到以下信息。每一行占32个比特,即4个字节,目的IP地址往上的信息都是固定内容,则固定需要20个字节,选项为非固定信息,可变长度,选项最多可长达40个字节。

版本:表示IP版本号,目前版本为IPv4。此位占4个比特。 
首部长度:表示IP数据报的首部长度,占4个比特位。一般IP数据报头长度为20字节。(首部长度占4个比特,则可以有15个字节,表示在IP数据包头中有15行,每行为32个比特,则4个字节,所以IP数据报首部最多长达60个字节。) 
区分服务:表示数据包的优先级和服务类型,占8个比特,用于实现QoS的要求。 
总长度:表示IP数据报的长度,包括首部和数据,占16比特,最长为65535字节。 
标识:IP数据包的标识(在IP分片中会详细介绍),占16比特。 
标志:标志字段,占3比特。 
分片偏移:在IP分片中的偏移量,占13比特。 
TTL:生存时间,当数据包经过一个路由器,TTL值减去1,当为0时,丢弃数据包。 
协议号:在此IP数据报中封装的上层协议,如TCP,UDP等。 
效验和:占16比特位,用于检查数据是否被篡改。

IP分片的原理

      如同IP数据包一样,在数据链路层也会有相应的帧格式,并且数据桢中所包含的数据,也就是上层IP数据包的大小也是有限制的,最大值被称为MTU(最大传输单元),以太网的MTU值为1500字节,PPP链路的MTU值为296字节。但是我们通信所产生的数据流量并不一定小于MTU,在以太网中,当数据大于1500时,就会出现IP分片,将数据分成几部分发送。在IP分片的时候,就需要用到上述IP数据报首部中的第二行中的信息了。标识,同时发送多个数据的时候会产生不同的IP分片,标识就是用来确定此数据包中包含的数据是哪个数据中的分片。标志用来确认这是否是此数据中多个IP分片中的最后一个,而分片偏移就是用来接收方进行分片重组的,相当于序号,通过序号来进行分片重组。

下面通过sniffer pro 抓包工具来证实IP分片。

实验拓扑:PC1和PC2分别连接路由器的两端。PC1使用windows操作系统,装上sniffer软件进行抓包,而PC2使用Linux系统进行IP分片的证实。 
PC1 :  IP  200.1.1.10  MASK  255.255.255.0  网关: 200.1.1.1 
PC2 :  IP  192.168.1.10  MASK  255.255.255.0  网关: 192.168.1.1 
路由器的两个接口分别是PC的两个网关,实现通信。

实验步骤:

setup  : 安装sniffer pro软件。 
setup  : 网络相关配置,达成通信。 
setup  : 开始sniffer工具,并且设置自己为监控的对象。

My learning path (网络安全高级应用)TCP/IP高级技术

 

选择监控的网卡之后,选择规定过滤 define filter,在其中设置自己的IP地址为监控对象。

My learning path (网络安全高级应用)TCP/IP高级技术

确定之后,点击左上角开始按钮开始监控。

我们在linux主机(PC2)使用PING命令进行分片证实。

首先抓到第一个包

My learning path (网络安全高级应用)TCP/IP高级技术

从第一个包中可以得到以上信息,通过第二个数据包对比,就可以看出差异。

My learning path (网络安全高级应用)TCP/IP高级技术

      通过以上实验,说明确实会产生IP分片。在以前的操作系统中,当出现一些利用分片偏移错误的数据包发送给系统,会直接导致系统瘫痪,如今已经有了很好的防范不会产生如此后果。我们在linux主机上安装Hping工具,就可以模拟这种攻击。

安装过程就掠过了。

在Linux系统下键入以下脚本 
#!/bin/bash 
for ((i=1;i<50;i++)) 
do 
hping 200.1.1.10 –1 –x –d 1000 –N $i –c 1 
hping 200.1.1.10 –1 –d 200 –g 400 –N $i –c 1 
done

      这样就模拟了利用分片偏移错误而形成的泪滴攻击。其中-1表示hping中的icmp模式,-x表示more fragments 标志,表示后续还有数据,未发完。-d为数据包大小,-N为标识,-c为数量。正常数据包第二个包的分片偏移应该为980,而第二次发送的数据包我们用-g设置分片偏移为400 则产生了泪滴攻击的效果。

ICMP报文

      ICMP报文就封装在IP数据包中,分为差错报告和查询报文。

查询报文:type 8  type 0都属于查询报文。当我们ping一台主机,ping通会产生两种报文,回送请求(8)和回送应答(0)就是这两种类型了。 
差错报告报文:差错报告报文总共分为 type3 终点不可达  type 4 源点抑制 type 5 改变路由 type 11超时 type 12参数问题 
type 3  : 终点不可达,终点不可达的数据包由中间路由发出,当此路由器不能将数据发送给目的主机或者找不到目的主机时,将数据包丢弃,再给源发送type3 的报文。终点不可达分为16种,常见的有1 主机不可达,3端口不可达。显示为 type 3 code =1。 

还有一种常见的为type 11超时报文,他的code值为0或者1,0的情况为:每个数据包都有ttl值,当一个路由器接到一个ttl值为0的数据包,则直接丢弃,并发送type 11 code =0的报文给源,而1为目的主机使用,当目的主机超过一定时限还没有收到全部的数据分片时,会给源发送 type = 11 code =1的报文。


本文转自 郑伟  51CTO博客,原文链接:http://blog.51cto.com/zhengweiit/406278