ICMP协议范文

2024-07-12

ICMP协议范文(精选5篇)

ICMP协议 第1篇

隐蔽通道(Covert Channel)是指用非正常的途径来达到获取或传输信息的目的。随着网络技术的飞速发展,整个网络可以被看作一个巨大的计算机系统,这种在网络环境下与网络协议密切相关的隐蔽通道,通常被称作网络隐蔽通道,它利用非正常手段在网络中传递信息。隐蔽通道是信息隐藏的一个主要分支。在信息隐藏中,通信双方在符合系统安全策略的条件下进行互相通信,当使用隐蔽通道时,即在合法的内容上加上无法觉察的信息。

在传统的秘密传输信息的方法中,一般是利用TCP协议和UDP协议在控制端和被控制端之间建立一个标准的可信通道,从而传输数据。但是在网络安全措施较完善的情况下,这种方法实施起来比较困难。因此,有必要对网络隐蔽通道进行构建,以理解其工作原理。在网络通信中,隐蔽通道可以使用数据包作为载体,如IP数据包,ICMP数据包等。

本文中使用ICMP数据包作为载体,建立隐蔽通道,并采用动态加密算法对ICMP数据包中数据域中的数据进行加密,然后在网络中进行传输。最后对网络隐蔽通道给出一些相应的防范措施,

2 ICMP隐蔽通道的设计

ICMP协议的含义是由头部标识来表示的,防火墙和管理员都很少关心头部以外的区域,而ICMP协议的可变长度的数据域在很大程度上与传输的控制消息的目的不相关,因此可以作为隐蔽通道来使用。

在构建隐蔽通道过程中,隐蔽通道需要满足以下条件:

(1)发送进程和接收进程必须能够访问同一个客体,也就是两个客体之间是连通的;

(2)发送进程必须能够改变客体,也就是可以将客体进行形式变换,以便进行信息隐藏;

(3)接收进程必须能够检测到客体的变化,也就是可以将客体还原,将隐藏的信息解读来;

(4)在发送进程和接收进程之间必须有同步机制。

利用ICMP(Internet Control Message Protocol)协议构建隐蔽通道进行数据传输时,数据报中的一些域都必须进行填充,防火墙或入侵检测系统容易忽视对它们的检查。因此,这些域也是比较理想的隐藏数据的场所。我们就可以在数据域中填充经过加密后的数据,构建隐蔽通道。最后经过隐蔽的数据在网络上传输后,到达目的主机。

建立隐蔽通道中,在发送端发送ICMP Echo Request请求时,在ICMP数据包包头的选项域中,可以添加隐藏数据。当目的端收到ICMP请求报文以后,在ICMP发送ICMP Echo Reply回应请求应答。

ICMP Echo Request和Echo Reply数据包结构如图1所示。

3 ICMP隐蔽通道程序的实现

本程序在WINDOWS平台下,用集成开发环境C++Builder6.0开发。利用Raw Socket可获得所需要的ICMP数据报。目前Winsock2已提供了对它的支持,因此要在程序头条件中加入包含文件#include。在集成开发环境C++Builder 6.0下,此程序设计流程图如图2。

根据ICMP协议的数据格式,要在程序头文件中构造ICMP报文的数据结构。下面给出自定义的ICMP报文的结构,旁边给出了相应的注释。

构造好ICMP报文的数据结构后,对ICMP数据报中的数据域进行填充。对填充到数据域中的数据进行加密。加密算法采用动态加密算法,算法如下:

在构造ICMP报文的数据结构,加密数据,填充隐蔽数据后,还需初始化,建立连接,传输数据,断开连接等工作,在这里不一一赘述。

当此程序编译连接通过后。利用网络嗅探器对隐蔽通道传输的ICMP数据包进行监测。在本次实例中使用的网络嗅探器是Ethereal。利用Ethereal抓取隐蔽通道传输的ICMP数据包,其中一个数据包内容如下:

对以上数据包内容进行分析:

<1>“08”表示ICMP数据报的i_type(类型域)=8,为Echo request;

<2>“00”表示ICMP数据报的i_code(代码域)=0;

<3>“52 19”表示ICMP数据报的i_cksum(校验合);

<4>“98 04”表示ICMP数据报的i_id(标识符);

<5>“09 00”表示ICMP数据报的i_seq(序列号);

<6>“bf 99 9d 00”表示ICMP数据报的timestamp(自定义时间戳);

<7>“79 74 71 6a 6e 68 7f 69 6f 79 72 79 74 78 79 2b”表示ICMP数据报中的数据域;

在此结果中,<7>为传输的经过加密后的隐蔽数据。在网络嗅探器Ethereal中,传输数据都用十六进制数表示。由上面的加密算法可知,加密之前的数据为字符串computerscience1。结果显示此隐蔽通道可在网络中进行通信。

4 结束语

建立网络隐蔽通道为我们了解和学习TCP/IP协议和网络通信机制提供了一个有益的平台。但另一方面,网络隐蔽通道也常用于网络攻击,特别是隐蔽通道与木马程序相结合,将对系统有比较大的危害。因此,我们应该采取相应的防范措施,如使用网络地址转换(NAT),代理防火墙,网络监控设备等都可以有效的阻止网络隐蔽通道。

本文阐述了隐蔽通道的原理,并用程序实现了隐蔽通道,但还有许多方面值得研究。在下一步的研究工作中,可以设计隐蔽通道与目的主机中的程序结合起来,以实现对目的主机的有效控制。

参考文献

[1]卢大航.基于网络协议的隐蔽通道研究与实现[J].计算机工程与应用,2003,(3):183.

[2]夏耐.隐蔽通道发现技术综述[J].计算机科学,2006,33(12):1-4.

[3]Internetworking With TCP/IP Vol II:Design,Implementation,and Internals.Douglas E.Comer,David L.Stens.2001.

ICMP协议 第2篇

前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成,其中一个重要的模块就是ICMP(网络控制报文)协议。

当传送IP数据包发生错误--比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这 也就是为什么说建立在IP层以上的协议是可能做到安全的原因。ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成。而前16bit就组成了ICMP所要传递的信息。书上的图6-3清楚的给出了错误类型和代码的组合代表的意思。

尽管在大多数情况下,错误的包传送应该给出ICMP报文,但是在特殊情况下,是不产生ICMP错误报文的。如下

ICMP差错报文不会产生ICMP差错报文(出IMCP查询报文)(防止IMCP的无限产生和传送)

目的地址是广播地址或多播地址的IP数据报。

作为链路层广播的数据报。

不是IP分片的第一片。

源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地 址或多播地址。

虽然里面的一些规定现在还不是很明白,但是所有的这一切规定,都是为了防止产生ICMP报文的无限传播而定义的。

ICMP协议大致分为两类,一种是查询报文,一种是差错报文。其中查询报文有以下几种用途:

ping查询(不要告诉我你不知道ping程序)

子网掩码查询(用于无盘工作站在初始化自身的时候初始化子网掩码)

时间戳查询(可以用来同步时间)

而差错报文则产生在数据传送发生错误的时候。就不赘述了。

2.ICMP的应用--ping

ping可以说是ICMP的最著名的应用,当我们某一个网站上不去的时候。通常会ping一下这个网站。ping会回显出一些有用的信息。一般的信息如下:

Reply from 10.4.24.1: bytes=32 time<1ms TTL=255

Reply from 10.4.24.1: bytes=32 time<1ms TTL=255

Reply from 10.4.24.1: bytes=32 time<1ms TTL=255

Reply from 10.4.24.1: bytes=32 time<1ms TTL=255

Ping statistics for 10.4.24.1:

Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

Approximate round trip times in milli-seconds:

Minimum = 0ms, Maximum = 0ms, Average = 0ms

ping这个单词源自声纳定位,而这个程序的作用也确实如此,它利用ICMP协议包来侦测另一个主机是否可达,

原理是用类型码为0的ICMP发请 求,受到请求的主机则用类型码为8的ICMP回应。ping程序来计算间隔时间,并计算有多少个包被送达。用户就可以判断网络大致的情况。我们可以看到,ping给出来了传送的时间和TTL的数据。我给的例子不太好,因为走的路由少,有兴趣地可以ping一下国外的网站比如sf.net,就可以观察到一些 丢包的现象,而程序运行的时间也会更加的长。

ping还给我们一个看主机到目的主机的路由的机会。这是因为,ICMP的ping请求数据报在每经过一个路由器的时候,路由器都会把自己的ip放到该数 据报中。而目的主机则会把这个ip列表复制到回应icmp数据包中发回给主机。但是,无论如何,ip头所能纪录的路由列表是非常的有限。如果要观察路由, 我们还是需要使用更好的工具,就是要讲到的Traceroute(windows下面的名字叫做tracert)。

3.ICMP的应用--Traceroute

Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。前面说到,尽管ping工具也可以进行侦测,但是,因为ip头的限制,ping不能完全的记录下所经过的路由器。所以Traceroute正好就填补了这个缺憾。

Traceroute的原理是非常非常的有意思,它受到目的主机的IP后,首先给目的主机发送一个TTL=1(还记得TTL是什么吗?)的UDP(后面就 知道UDP是什么了)数据包,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生 一个主机不可达的ICMP数据报给主机。主机收到这个数据报以后再发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据 报。如此往复直到到达目的主机。这样,traceroute就拿到了所有的路由器ip。从而避开了ip头只能记录有限路由IP的问题。

有人要问,我怎么知道UDP到没到达目的主机呢?这就涉及一个技巧的问题,TCP和UDP协议有一个端口号定义,而普通的网络程序只监控少数的几个号码较 小的端口,比如说80,比如说23,等等。而traceroute发送的是端口号>30000(真变态)的UDP报,所以到达目的主机的时候,目的 主机只能发送一个端口不可达的ICMP数据报给主机。主机接到这个报告以后就知道,主机到了,所以,说Traceroute是一个骗子一点也不为过:)

Traceroute程序里面提供了一些很有用的选项,甚至包含了IP选路的选项,请察看man文档来了解这些,这里就不赘述了。

ICMP协议 第3篇

ICMP Flood攻击是指攻击者利用ICMP ping产生的大量回应请求超出了系统的最大限度,以至于系统耗费所有资源来进行响应直至再也无法处理有效的网络信息流,是一种拒绝服务攻击(Denial of Service,DoS)。有时攻击者会直接或间接控制大量主机,从多个攻击源同时对目标主机发动ICMP ping攻击,组成的一个分布式的拒绝服务攻击(Distributed Denial of Service,DDoS),最终使网络中充斥着大量的无用的数据包,消耗网络带宽、使得被攻击主机性能下降甚至瘫痪,从而造成其他合法用户无法正常使用服务。

对一般的点对点网络攻击仿真时,实物仿真是一种简便易行的方式,但在研究DDoS这类多对一攻击时,面对成百甚至上千台攻击节点,实物仿真就受到了局限。而采用OPNET进行软件仿真可以完全避开实物仿真遇到的困难,最大限度地重现现实网络的各种情况[1]。

2 OPNET建模的方法

OPNET是目前最常用的网络仿真软件之一。它采用面向对象的建模方法来反映实际的网络和网络组件结构,实际的系统可以直观地映射到模型中。

2.1 OPNET建模机制

利用OPNET进行网络建模机制可以分为以下3个层次。

1)进程层次

在进程层次中模拟单个对象的行为,刻画节点模型里的处理器以及队列模型的行为,主要是各种状态之间的转换过程。

2)节点层次

节点层次是实施各种算法的载体,也是产生事件和处理事件的主体,它可以模拟通信协议、算法、排队策略、共享资源、操作系统、特殊的业务源等大多数软件或者硬件系统。建立由相应协议模型构成的节点模型,将进程层次中的各个进程互连成设备,并反映设备的特性。

3)网络层次

网络层次负责将节点层次中建立起来的设备互连成网络,确定网络的拓扑结构、协议、应用、流量以及其他一些系统设置,位于3个层次的最上层。

通过OPNET的3层建模机制建立起来的3层模型和实际的网络、设备、协议层次完全对应,全面反映了网络的相关特性。

2.2 OPNET仿真的步骤

OPNET仿真可以分为以下4步[3],图1所示。

1)配制网络拓扑

通过OPNET提供的相关工具,建立场景,选择所需要的设备和连接方式,建立网络拓扑,并检查整个网络是否连通。

2)配制运行参数

选择在该网络上运行的服务,并配制这些服务的运行参数。这样就完成了系统流量的建模。

3)选择要查看的结果

选择所需要的结果报告,可以是某个设备上运行的某一服务的参数之一,也可以是某些全局性的参数。

4)运行仿真

通过前3步已初步搭建出仿真环境。通过第4步运行仿真可以得到仿真数据。运行以后得到的数据很可能因为参数配置等因素,仿真效果不满意,可以调整拓扑或者修改参数,再次运行仿真,直到得到满意的结果。

3 仿真模型的建立与分析

本文利用OPNET对DDoS攻击中的ICMP Flood攻击进行仿真。

3.1 创建网络仿真模型

按照OPNET三层建模机制建立网络仿真模型。建立中心节点(hub),一个具有四对收发信机的hub节点模型,建立周边节点,包括发起攻击的主机(node)和受到攻击的服务器(node),仿真选择有四台主机通过一个hub向一台服务器连续发送ICMP包,如图2所示。检查连通情况,确认都连通之后,准备配置仿真参数。

为了对仿真结果的统计量进行收集和分析,并对不同网络环境中的仿真结果进行比较,将仿真ICMP Flood攻击的网络填环境配置成两个仿真场景。

在第一个仿真场景属性配置中,将参数Duration改为1 000s,seed改为21,value值改为4。

在第二个仿真场景属性配置中,复制一个场景,将第二场景的value值改为40。ICMP攻击当中,发信机发送包的速度足够大,一些数据包将阻塞在发信机队列当中,而使得端到端延时受到影响,而我们修改value的值就是为了模拟这种情况。

3.2 仿真结果分析

在node0和hub之间发包进行分布式ICMP攻击的时候。从仿真结果中可以看出,如图3所示,遭攻击前网络利用率变化不明显,而遭受攻击后网络效率下降明显。

图4为ETE Delay线性图,说明遭受攻击后包到达处理器时间增大,性能下降。场景1收集数据要大于场景2,ETE delay代表端到端的时延,反映的是包从创建到到达相应处理器模块的延时。

图5为ETE Delay离散图,说明遭受攻击前、后包到处理器的时延,可以更清楚的展示单独数据包所经历的延时。

在图6中,前两条曲线反映场景1和2遭受攻击时上行数据变化。后两条曲线反映场景1和2遭受攻击时下行数据变化。不难看到,在不足五分钟的时间里,遭到攻击的部分系统性能直线下降。在五分钟以后达到稳定,这是由于攻击没有持续增强。

分布式拒绝攻击一般而言对两个指标造成影响即为攻击奏效,第一是服务器性能下降、二是网络性能下降。由于现在的宽带技术日益普及,网络设备冗余做的也比较好,往往遭到攻击的时候网络性能下降要晚于服务器性能下降,

ICMP攻击是一种最原始最简单的拒绝服务攻击,从现在的硬件水平看,这种攻击需要达到相当的规模才能对服务器造成影响。在本次仿真的过程中没有使用过大规模的网络模型,但通过使用模拟大规模攻击时,网络中的数据包状态能够达到预期的仿真效果。

4 结论

对网络攻击的仿真,尤其是对大规模的网络攻防场景进行实验研究时,可以降低实验设备的成本;另一方面可以加快实验进程,提高效率,有利于对一些耗时的网络攻防场景进行反复研究。可以为网络作战样式和网络战战法的运用提供对抗模拟、效果演示和攻防训练环境,是培养掌握网络攻击和防护技能人才的训练手段。

摘要:本文主要介绍OPNET的层次建模方法和步骤,利用OPNET对DDoS攻击中ICMPFlood攻击进行仿真。同时对攻击前后被攻击服务器的相关工作曲线的数据进行了测量,为大规模的网络攻防场景进行实验研究时提供方法,为现实中防范网络DDOS攻击提供一定的依据。

关键词:网络对抗,OPNET,建模

参考文献

[1]金伟新,肖田元.基于复杂系统理论的信息化战争体系对抗建模与仿真.大会报告.国防大学信息作战与指挥训练教研部.

[2]卢昱,等.协同式网络对抗[M].北京:国防工业出版社,2003.

[3]傅鹂,李舸,艾鹏.基于OPNET的局域网DDOS攻击仿真.重庆工学院学报:自然科学版,2007,21(10).

ICMP协议 第4篇

1.ICMP防护措施

ICMP最初开发出来是为了帮助网络,经常被广域网管理员用作诊断工具。但今天各种各样的不充分的ICMP被滥用,没有遵守RFC 792原先制订的标准,要执行一定的策略可以让它变得安全一些。入站的ICMP时间标记(Timestamp)和信息请求(Information Request)数据包会得到响应,带有非法或坏参数的伪造数据包也能产生ICMP参数问题数据包,从而允许另外一种形式的主机搜寻。这仍使得站点没有得到适当保护。以秘密形式从主方到客户方发布命令的一种通用方法,就是使用ICMP Echo应答数据包作为载波。 回声应答本身不能回答,一般不会被防火墙阻塞。首先,我们必须根据出站和入站处理整个的ICMP限制问题。ICMP回声很容易验证远程机器,但出站的ICMP回声应该被限制只支持个人或单个服务器/ICMP代理(首选)。如果我们限制ICMP回声到一个外部IP地址(通过代理),则我们的ICMP回声应答只能进入我们网络中预先定义的主机。重定向通常可以在路由器之间找到,而不是在主机之间。防火墙规则应该加以调整,使得这些类型的ICMP只被允许在需要信息的网际连接所涉及的路由器之间进行。建议所有对外的传输都经过代理,对内的ICMP传输回到代理地址的时候要经过防火墙。这至少限制了ICMP超时数据包进入一个内部地址,但它可能阻塞超时数据包。当ICMP数据包以不正确的参数发送时,会导致数据包被丢弃,这时就会发出ICMP参数出错数据包。主机或路由器丢弃发送的数据包,并向发送者回送参数ICMP出错数据包,指出坏的参数,

总的来说,只有公开地址的服务器(比如Web、电子邮件和FTP服务器)、防火墙、联入因特网的路由器有真正的理由使用ICMP与外面的世界对话。如果调整适当,实际上所有使用进站和出站ICMP的隐密通讯通道都会被中止。

2. SYN Flood防范

SYN Flood是当前最流行的DoS(拒绝服务攻击)与DdoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。对于SYN Flood攻击,目前尚没有很好的监测和防御方法,不过如果系统管理员熟悉攻击方法和系统架构,通过一系列的设定,也能从一定程度上降低被攻击系统的负荷,减轻负面的影响。一般来说,如果一个系统(或主机)负荷突然升高甚至失去响应,使用Netstat 命令能看到大量SYN_RCVD的半连接(数量500或占总连接数的10%以上),可以认定,这个系统(或主机)遭到了SYN Flood攻击。遭到SYN Flood攻击后,首先要做的是取证,通过Netstat n p tcp resault.txt记录目前所有TCP连接状态是必要的,如果有嗅探器,或者TcpDump之类的工具,记录TCP SYN报文的所有细节也有助于以后追查和防御,需要记录的字段有:源地址、IP首部中的标识、TCP首部中的序列号、TTL值等,这些信息虽然很可能是攻击者伪造的,但是用来分析攻击者的心理状态和攻击程序也不无帮助。特别是TTL值,如果大量的攻击包似乎来自不同的IP但是TTL值却相同,我们往往能推断出攻击者与我们之间的路由器距离,至少也可以通过过滤特定TTL值的报文降低被攻击系统的负荷(在这种情况下TTL值与攻击报文不同的用户就可以恢复正常访问)。从防御角度来说,有几种简单的解决方法:

2.1 缩短SYN Timeout时间:由于SYN Flood攻击的效果取决于服务器上保持的SYN半连接数,这个值=SYN攻击的频度 x SYN Timeout,所以通过缩短从接收到SYN报文到确定这个报文无效并丢弃改连接的时间,例如设置为20秒以下(过低的SYN Timeout设置可能会影响客户的正常访问),可以成倍的降低服务器的负荷。

2.2 设置SYN Cookie:就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被丢弃。可是上述的两种方法只能对付比较原始的SYN Flood攻击,缩短SYN Timeout时间仅在对方攻击频度不高的情况下生效,SYN Cookie更依赖于对方使用真实的IP地址,如果攻击者以数万/秒的速度发送SYN报文,同时利用SOCK_RAW随机改写IP报文中的源地址,以上的方法将毫无用武之地。

ICMP协议 第5篇

随着通信技术和计算机技术在电网中得到越来越广泛和深入地应用,基于IP的通信业务在电网企业中应用越来越多,例如,办公自动化、营销自动化、生产管理系统、图像监控系统、雷电定位系统。上述各个系统都有数量不等的服务器、工作站(客户机)及其他IP终端,对一个地区级电网企业来说,这些服务器、工作站及IP终端加在一起数量将达到数百台。一般运行维护人员要检测上述服务器、工作站及IP终端是否正常工作,通常是通过Ping命令来帮助判断问题。Ping命令是计算机网络中应用最多的命令之一,它是Windows系列自带的一个可执行命令,利用它可以检查网络是否能够连通,可以很好地帮助我们分析判断网络故障。Ping命令的主要作用是通过发送数据包并接收应答信息来检测2台计算机之间的网络是否连通。Ping能够以毫秒为单位显示发送请求到返回应答之间的时间量,也即是网络传输的双向时延之和。如果要对数百台设备都通过运行维护人员人工使用Ping命令来处理,工作量可想而知。本文提出一种编程方法,只要轻轻一点鼠标,就能将预先指定的若干个IP地址连续一次Ping完,极大地方便运行维护人员发现和处理问题。

1 利用ICMP.DLL实现Ping功能

1.1 ICMP.DLL功能简介

I C M P.D L L和WINSOCK.DLL、WININET.DLL一样, 属于Windows的系统DLL文件, 广泛用于网络编程中。ICMP.DLL动态链接库中包含IcmpCreateFile函数、I c m p C l o s e H a n d l e函数、I c m p S e n d E c h o函数。

IcmpCreateFile打开一个句柄,通过该句柄可以发送ICMP的请求回送报文。IcmpCloseHandle关闭通过IcmpCreateFile函数打开的句柄, IcmpSendEcho通过打开的句柄发送ICMP请求,在超时或应答报文接收后返回。

1.2 Ping功能的具体实现

程序在VisualBasic6.0环境下实现。程序结构如图1所示。

信息结构定义有2部分:IP选项信息结构和ICMP显示回复结构,具体如下:

IP选项信息结构

ICMP显示回复结构

函数声明为声明ICMP.DLL中的3个函数:

Pinger函数通过调用IcmpSendEcho函数实现Ping功能:

SetIp函数实现从普通的4段式IP转化到长整型IP:

窗体代码中包括20个需要检测的IP地址,其实现如下:

这样运行维护人员就能从大量的IP地址中发现存在异常的IP地址, 然后针对异常地址进行处理, 就能快速有效地处理问题了。

2 结语

上一篇:作用路径下一篇:思想理论建设作用