`
peizhiinfo
  • 浏览: 1421459 次
文章分类
社区版块
存档分类
最新评论

ICMP协议

 
阅读更多

(转自百度百科)

基本简介

  ICMP协议是一种面向连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于网络 安全具有极其重要的意义。   它是TCP/IP协议 族的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。

ICMP原理

ICMP 提供一致易懂的出错报告信息。发送的出错报文返回到发送原数据的设备,因为只有发送设备才是出错报文的逻辑接受者。发送设备随后可根据ICMP报文确定发 生错误的类型,并确定如何才能更好地重发失败的数据报。但是ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。   我们在网络中经常会使用到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数据包会形成“ICMP风暴”,使得目标主机耗费大量的CPU资源处理,疲于奔命。

编辑本段 ICMP校验和算法

  以下代码在Visual Studio 2008 + Windows 7下调试通过。   lpsz指定要计算的数据包首地址,_dwSize指定该数据包的长度。   int CalcCheckSum(char* lpsz,DWORD _dwSize)   {   int dwSize;   __asm // 嵌入汇编   {   mov ecx,_dwSize   shr ecx,1   xor ebx,ebx   mov esi,lpsz   read: //所有word相加,保存至EBX寄存器   lodsw   movzx eax,ax   add ebx,eax   loop read   test _dwSize,1 //校验数据是否是奇数位的   jz calc   lodsb   movzx eax,al   add ebx,eax   calc:   mov eax,ebx //高低位相加   and eax,0ffffh   shr ebx,16   add eax,ebx   not ax   mov dwSize,eax   }   return dwSize;   }

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics