(转自百度百科)
基本简介
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;
}
分享到:
相关推荐
Ping命令使用的ICMP协议中的回送请求和回送响应,所以可以使用协议分析软件通过使用ping命令来抓包,分析IP协议和ICMP协议的工作过程。 4. 实验步骤 (1) 打开192.168.0.204主机的命令行,打开抓包软件wireshark开始...
java 实现 icmp协议测试 需要在java lib目录下添加libjpcap.so文件
湘潭大学网络协议TCP/IP实验五 ICMP 协议分析实验报告,仅供参考
ICMP就是所谓的Internet控制报文协议(Internet Control Message ...有许多重要的网络程序都是基于ICMP协议上的,最为著名如Ping和Tracert等。本文就来介绍用Visual C#实现基于ICMP协议重要的网络命令Ping的方法。
本程序采用VC++ 6.0 设计完成,根据ICMP 协议原理设计网络模型和监听线程,对目标主机执行Ping 服务,是学习ICMP 协议的好例子
C实现Ping功能 基于ICMP协议C实现Ping功能 基于ICMP协议C实现Ping功能 基于ICMP协议C实现Ping功能 基于ICMP协议
进一步研究和了解ICMP协议以及在它基础上工作ping和Traceroute命令。本程序简单的实现Ping和Traceroute工具,在了解这两个命令原理的基础上以对话框的形式显示命令操作结果。
华为培训课件:HC110110004 ICMP协议.ppt
ICMP[version 4]的echo报文运用,模拟ping命令实现pingy命令
网络工程---实验二 ICMP协议分析 有必要的可以看看 里面包涵很多 icmp基础协议分析
用C语言实现的ICMP协议,实现一个ping的功能,适用于Win7系统,VS2008环境。
分析了几种基于ICMP协议的网络隐蔽通道技术
ICMP协议
ICMP协议详解 1. ICMP and Ping 2. ICMP and Traceroute 3. Extra Credit
ICMP协议pcap数据包下载,支持抓包软件(如:wireshark)打开并学习ICMP协议报文解析。需要其他协议,请查看我发布的其他资源。
TCP/IP协议栈ICMP协议源码.txt
尽快掌握icmp协议,是文档类的文件,对网络协议感兴趣的朋友可以下载来看看
C语言实现ICMP协议 TCP/IP协议栈C语言实现ICMP协议 TCP/IP协议栈C语言实现ICMP协议 TCP/IP协议栈
ICMP协议仿真C++代码,// TODO: Add your command handler code here if (IsRun) { MessageBox("网络监测时,不能网段探测!","提示"); return; } CNetIpDlg dlg; if(dlg.DoModal()==IDOK) { char ...
ICMP 协议栈实现代码 最新完整版ICMP 协议栈实现代码 最新完整版ICMP 协议栈实现代码 最新完整版ICMP 协议栈实现代码 最新完整版