(1)什么是ICMP协议?
ICMP(Internet Control Message Protocol)网际报文控制协议,是Internet协议族的核心协议之一,它主要用在网络计算机的操作系统中发送出错信息。例如:请求服务不可用,主机不可达。ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。但是ICMP不是高层协议,而是IP层协议。
(2)学习ICMP的重要性?
ICMP协议因为其ping功能而著名,ping是用来检测一个设备主机的可连续性,我想大部分都可能用过ping命令的。但是ICMP协议本身的特点决定了它非常容易被用于攻击网络上的路由器或者主机。例如,用户可以利用操作系统规定的ICMP数据包最大尺寸不超过64K这一规定,向主机发起ping OF Death(死亡之ping)攻击。这时候主机就会出现内存分配失败,导致主机崩溃,死机。此外,向主机长时间发送ICMP数据包,也会最终导致系统瘫痪,大量的ICMP数据包也会形成“ICMP风暴”,使得目标主机耗费大量的CPU资源处理。
(3)ICMP首部格式
可以清晰的看到ICMP报文作为IP层数据报的数据,加上IP数据包的首部,组成IP数据报发送出去。上图是ICMP报文的格式
类型(Type): ICMP信息基于RFC规范的类型分类
代码(Code): ICMP信息基于RFC规范的子类型
检验和(CheckSum):用来保证ICMP数据的头部和数据部分的完整
数据部分:依赖于类型和代码域的部分
(4)ICMP的请求报文类型
(5)ICMP响应报文类型
(6)ICMP协议提供的诊断报文类型
(1)捕获ICMP请求包和响应包,利用ping命令,ping目标主机
(2)分析ICMP请求包-------Echo(ping)请求包,分析53
(3)分析ICMP响应包---------Echo(ping)reply,也就是对应的54帧
(4)捕获ICMP数据包------请求超时数据包
从以上可以看出,从info信息中看到,Time-to-live表示此帧是请求超时数据包
(5)分析请求超时包,分析6201帧
说到ICMP的请求报文超时,就的先说说ICMP差错报告报文的数据字段格式。如下图
ICMP差错报文的格式是:把收到的IP数据报的首部和数据字段的前8个字节提取出来(也就是ICMP报文的格式)。作为ICMP报文的数据字段。在加上ICMP差错报文的前8个字节,就构成了ICMP差错报告报文。
(5)捕获ICMP目标主机不可达的数据包
(6)分析ICMP目标主机不可达数据包,分析6514,也就是info信息为: Destination Unreachable