ICMP是网际报文控制协议,它是一个对IP协议的补充协议。允许主机或路由器报告差错情况和异常状况。

一、ICMP报文格式和各个字段的含义

ICMP报文的格式如下:

ICMP timestamp请求响应漏洞 补丁 icmp请求和应答报文分析_数据

ICMP协议封装在ip协议中,ICMP有很多报文类型,每一个报文类型又各自不相同,所以无法找到一个统一的报文格式来进行说明,但是他们的前四个字节的报文格式是相同的。

如图所示:

1.校验和:占两个字节,是对整个报文的报文信息的校验。

2.类型:占一个字节:用来表示ICMP的消息类型。

3.代码:占一个字节:用来对类型的进一步说明。

下面是RFC792英文版的文档说明:

点击打开链接

下面试RFC792中文版的文档说明:

点击打开链接

二、ICMP常见的报文类型

下表列出了几种常见的类型:

ICMP timestamp请求响应漏洞 补丁 icmp请求和应答报文分析_回送_02

ICMP的报文分为两类,一类是ICMP询问报文,一类是ICMP差错报告报文

常见的ICMP询问你报文有:8/0回送请求/应答报文,13/14时间戳回送请求/回答报文。

常见的ICMP差错报告报文有:3 目的站点不可达、 11时间超过、12参数问题、5改变路由、4源点抑制

目的站点不可达:当路由器或主机不能交付数据的时候,就会向源点发送终点不可达的报文。

源点抑制:当路由器或主机因为拥塞而导致丢包的时候,就会向源点发送源点抑制报文,请求发送报文速度降低

时间超过:当路由器或主机发现生存时间TTL值为0时,会丢弃该报文,并向源点发送时间超过的信息。或者目的主机没在规定时间内收到所有的数据分片,会丢弃之前的数据分片,并发出报告。

参数问题:当路由器或主机发现数据包首部字段值不正确的时候,会丢弃该报文,并发送参数错误报文。

改变路由:路由器把改变路由报文发给主机。

三、不发送ICMP差错报文的情况

 1、对ICMP差错报文出错不在发送ICMP差错报文信息。

 2、对于第一个ip分片后的所有ip分片报文不发送ICMP差错报文

 3、对具有组播地址的数据报不发送ICMP报文

 4、对具有特殊地址(127.0.0.0或0.0.0.0)不发送ICMP差错报文

四、ICMP协议的用法

icmp协议的常用用法就是ping和tracert

ping的命令参数为ping 目的ip 

一般有选项参数 -n 次数 表示要ping目的ip的次数,windows默认ping10次

-l 大小 向目标主机发送ping 包的大小,单位为字节

tracert  目的ip 可以显示中间经过的路由器

五、ICMP回送请求和应答实例分析

 该组的报文是通过ping来实现的

下面首先来看回送请求/应答报文的格式:

ICMP timestamp请求响应漏洞 补丁 icmp请求和应答报文分析_数据_03

接下来我们来看一下回送请求的具体报文:

ICMP timestamp请求响应漏洞 补丁 icmp请求和应答报文分析_数据_04

下面是回送应答的具体报文:

ICMP timestamp请求响应漏洞 补丁 icmp请求和应答报文分析_回送_05

其中 Code 0 在RFC文档中提到,当这个值为0时表示网管或主机