计算机技术论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

  • 欢迎访问 计算机技术论坛-电脑迷与初学者的家园!由于论坛管理严格,新注册会员可能遇到各种问题,无法解决的请发邮件 admin@jsjbbs.cn
查看: 3409|回复: 3

ICMP协议

[复制链接]
发表于 2009-2-28 11:29:40 | 显示全部楼层 |阅读模式
ICMP ICMP原理
目录 【什么是ICMP】 【ICMP 协定内容】 【ICMP的重要性】 【ICMP校验和算法】 【应对ICMP攻击】
[编辑本段]
【什么是ICMP】  英文原义:Internet Control Message Protocol

  中文释义:(RFC-792)Internet控制报文协议(网际控制报文协议)

  对TCP/IP协议你一定非常熟悉,但是对ICMP协议你可能就一无所知了。ICMP协议是一个非常重要的协议,它对于网络安全具有极其重要的意义。

  它是TCP/IP协议集中的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。我们可以通过Ping命令发送ICMP回应请求消息并记录收到ICMP回应回复消息。通过这些消息来对网络或主机的故障提供参考依据

  ICMP是“Internet Control Message Protocol”(Internet控制报文协议)的缩写。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

  我们在网络中经常会使用到ICMP协议,只不过我们觉察不到而已。比如我们经常使用的用于检查网络通不通的Ping命令(Linux和Windows中均有),这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。
[编辑本段]
【ICMP 协定内容】  ICMP的全称是 Internet Control Message Protocol 。从技术角度来说,ICMP就是一个“错误侦测与回报机制”,其目的就是让我们能够检测网路的连线状况﹐也能确保连线的准确性﹐其功能主要有:

  · 侦测远端主机是否存在。

  · 建立及维护路由资料。

  · 重导资料传送路径。

  · 资料流量控制。 ICMP常用类型


   ICMP常用类型
 ICMP在沟通之中,主要是透过不同的类别(Type)与代码(Code) 让机器来识别不同的连线状况。常用的类别如下表所列﹕

  ICMP 是个非常有用的协定﹐尤其是当我们要对网路连接状况进行判断的时候。下面让我们看看常用的 ICMP 实例,以更好了解 ICMP 的功能与作用。
[编辑本段]
【ICMP的重要性】  ICMP协议对于网络安全具有极其重要的意义。ICMP协议本身的特点决定了它非常容易被用于攻击网络上的路由器主机。例如,在1999年8月海信集团“悬赏”50万元人民币测试防火墙的过程中,其防火墙遭受到的ICMP攻击达334050次之多,占整个攻击总数的90%以上!可见,ICMP的重要性绝不可以忽视!

  比如,可以利用操作系统规定的ICMP数据包最大尺寸不超过64KB这一规定,向主机发起“Ping of Death”(死亡之Ping)攻击。“Ping of Death” 攻击的原理是:如果ICMP数据包的尺寸超过64KB上限时,主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机。

  此外,向目标主机长时间、连续、大量地发送ICMP数据包,也会最终使系统瘫痪。大量的ICMP数据包会形成“ICMP风暴”,使得目标主机耗费大量的CPU资源处理,疲于奔命。
[编辑本段]
【ICMP校验和算法】  unsigned short chksum(addr,len)

  unsigned short *addr; /* 校验数据开始地址(注意是以2字节为单位) */

  int len; /* 校验数据的长度大小,以字节为单位 */

  {

  int sum = 0; /* 校验和 */

  int nleft = len; /* 未累加的数据长度 */

  unsigned short *p; /* 走动的临时指针,2字节为单位 */

  unsigned short tmp = 0; /* 奇数字节长度时用到 */

  while( nleft > 1)

  {

  sum += *p++; /* 累加 */

  nleft -= 2;

  }

  if(nleft == 1) /* 奇数字节长度 */

  {

  *(unsigned char *)&tmp = *(&(unsigned char *)p); /* 将最后字节压如2字节的高位 */

  sum += tmp;

  }

  sum += (sum >> 16) + (sum & 0xffff); /* 高位低位相加 */

  sum += sum >> 16; /* 上一步溢出时,将溢出位也加到sum中 */

  tmp = ~sum; /* 注意类型转换,现在的校验和为16位 */

  return tmp;

  }
[编辑本段]
【应对ICMP攻击】  虽然ICMP协议给黑客以可乘之机,但是ICMP攻击也并非无药可医。只要在日常网络管理中未雨绸缪,提前做好准备,就可以有效地避免ICMP攻击造成的损失。

  对于“Ping of Death”攻击,可以采取两种方法进行防范:第一种方法是在路由器上对ICMP数据包进行带宽限制,将ICMP占用的带宽控制在一定的范围内,这样即使有ICMP攻击,它所占用的带宽也是非常有限的,对整个网络的影响非常少;第二种方法就是在主机上设置ICMP数据包的处理规则,最好是设定拒绝所有的ICMP数据包。

  设置ICMP数据包处理规则的方法也有两种,一种是在操作系统上设置包过滤,另一种是在主机上安装防火墙。具体设置如下:

   〖1.在Windows 2000 Server中设置ICMP过滤〗

  Windows 2000 Server提供了“路由与远程访问”服务,但是默认情况下是没有启动的,因此首先要启动它:点击“管理工具”中的“路由与远程访问”,启动设置向导。在其中选择“手动配置服务器”项,点击[下一步]按钮。稍等片刻后,系统会提示“路由和远程访问服务现在已被安装。要开始服务吗?”,点击[是]按钮启动服务。

   图1


  服务启动后,在计算机名称的分支下会出现一个“IP路由选择”,点击它展开分支,再点击“常规”,会在右边出现服务器中的网络连接(即网卡)。用鼠标右键点击你要配置的网络连接,在弹出的菜单中点击“属性”,会弹出一个网络连接属性的窗口,如图1所示。

  图1中有两个按钮,一个是“输入筛选器”(指对此服务器接受的数据包进行筛选),另一个是“输出筛选器”(指对此服务器发送的数据包进行筛选),这里应该点击[输入筛选器] 按钮,会弹出一个“添加筛选器”窗口,再点击[添加]按钮,表示要增加一个筛选条件。

  在“协议”右边的下拉列表中选择“ICMP”,在随后出现的“ICMP类型”和“ICMP编码”中均输入“255”,代表所有 图2
的ICMP类型及其编码。ICMP有许多不同的类型(Ping就是一种类型),每种类型也有许多不同的状态,用不同的“编码”来表示。因为其类型和编码很复杂,这里不再叙述。

  点击[确定]按钮返回“输入筛选器”窗口,此时会发现“筛选器”列表中多了一项内容(如图2所示)。点击[确定]按钮返回“本地连接”窗口,再点击[确定]按钮,此时筛选器就生效了,从其他计算机上Ping这台主机就不会成功了 图3


   〖2. 用防火墙设置ICMP过滤〗

  现在许多防火墙在默认情况下都启用了ICMP过滤的功能。如果没有启用,只要选中“防御ICMP攻击”、“防止别人用ping命令探测”就可以了,如图3所示。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
 楼主| 发表于 2009-2-28 11:32:37 | 显示全部楼层
2楼的朋友,好好的看一下!对你的问题有一定的帮助!
发表于 2009-3-2 18:39:36 | 显示全部楼层
小弟受教勒``
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

无图版|手机版|计算机技术论坛 JSJBBS.CN @ 2008-2024 ( 鲁ICP备17021708号 )

技术支持 : 北京康盛新创科技有限责任公司

快速回复 返回顶部 返回列表