ICMP协议
ICMP协议
-
英文全称 Internet Control Message Protocol
-
是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
-
控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息并不传输用户数据。
![]()
-
类型 代码 描述 0 - Echo Reply 0 echo响应 (被程序ping使用) 1 and 2 保留 3 - 目的地不可到达 0 目标网络不可达 1 目标主机不可达 2 目标协议不可达 3 目标端口不可达 4 要求分段并设置DF flag标志 5 源路由失败 6 未知的目标网络 7 未知的目标主机 8 源主机隔离 9 禁止访问的网络 10 禁止访问的主机 11 对特定的TOS 网络不可达 12 对特定的TOS 主机不可达 13 网络流量被禁止 4 - ICMP 拥塞控制 0 拥塞控制 5 - 路径控制 0 重定向网络 1 重定向主机 2 基于TOS 的网络重定向 3 基于TOS 的主机重定向 6 Alternate Host Address 7 保留 8 - Echo Request 0 Echo请求 9 - 路由器通告 0 路由建议 10 - 路由器请求 0 路由器的发现/选择/请求 11 - ICMP 超时 0 TTL 超时 1 分片重组超时 12 - 参数错误 0 IP 报首部参数错误 1 丢失选项 2 不支持的长度 13 - 时间戳请求 0 时间戳请求 14 - 时间戳应答 0 时间戳应答 15 - 信息请求 0 信息请求(已弃用) 16 - 信息应答 0 信息应答(已弃用) 17 - 地址掩码请求 0 地址掩码请求 18 - 地址掩码应答 0 地址掩码应答 19 因安全原因保留 20 至 29 Reserved for robustness experiment 30 - Traceroute 0 信息请求 31 数据报转换出错 32 手机网络重定向 33 Where-Are-You(originally meant for IPv6) 34 Here-I-Am(originally meant for IPv6) 35 Mobile Registration Request 36 Mobile Registration Reply 37 Domain Name Request 38 Domain Name Reply 39 SKIP Algorithm Discovery Protocol, Simple Key-Management for Internet Protocol 40 Photuris, Security failures 41 ICMP for experimental mobility protocols such as Seamoby [RFC4065] 42 到 255 保留
ping命令
-
Ping命令(Linux和Windows中均有),ping这个单词源自声纳定位,“Ping”的过程实际上就是ICMP协议工作的过程。
-
ping是用ICMP的"Echo request"(类别代码:8)和"Echo reply"(类别代码:0)消息来实现的。原理是用类型码为0的ICMP发请求,受到请求的主机则用类型码为8的ICMP回应。ping程序来计算间隔时间,并计算有多少个包被送达。
-
ping还给我们一个看主机到目的主机的路由的机会。这是因为,ICMP的ping请求数据报在每经过一个路由器的时候,路由器都会把自己的ip放到该数据报中。而目的主机则会把这个ip列表复制到回应icmp数据包中发回给主机。但是,ip头所能纪录的路由列表是非常的有限。如果要观察路由,我们还是需要Traceroute(windows下面的名字叫做tracert)。
-
Windows系统下的示例<维基百科>
C:\>ping www.google.com Pinging www.l.google.com [64.233.183.103] with 32 bytes of data: Reply from 64.233.183.103: bytes=32 time=25ms TTL=245 Reply from 64.233.183.103: bytes=32 time=22ms TTL=245 Reply from 64.233.183.103: bytes=32 time=25ms TTL=246 Reply from 64.233.183.103: bytes=32 time=22ms TTL=246 Ping statistics for 64.233.183.103: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 22ms, Maximum = 25ms, Average = 23ms其中
Pinging www.l.google.com [64.233.183.103] with 32 bytes of data:www.google.com是www.l.google.com DNS别名,IP地址是64.233.183.103。以32 bytes大小测试,可以以-l(Windows)参数更改,大小是1-65500
Reply from 64.233.183.103: bytes=32 time=25ms TTL=245 Reply from 64.233.183.103: bytes=32 time=22ms TTL=245 Reply from 64.233.183.103: bytes=32 time=25ms TTL=246 Reply from 64.233.183.103: bytes=32 time=22ms TTL=246反应时间25毫秒,TTL(Time To Live)值为245 由上来看,到google通过255-245 = 10个路由
Ping statistics for 64.233.183.103: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 22ms, Maximum = 25ms, Average = 23ms总计,最小22ms,最大25ms,平均23ms
-
死亡之Ping,(英文:ping of death, POD),是一种向目标电脑发送错误封包的或恶意的ping指令的攻击方式。通常,一次ping大小为32字节(若考虑IP标头则为84字节)。在当时,大部分电脑无法处理大于IPv4最大封包大小(65,535字节)的ping封包。因此发送这样大小的ping可以令目标电脑崩溃。
在早期TCP/IP的实现中,这攻击方式很容易实现,能影响到众多系统,如Unix、Linux、Mac、Windows、打印机、路由器等。这是一种专门针对一种弱点的非常简单的攻击。在1997-1998年后几乎所有的现代系统都已经修正了这问题。
一般而言,在ICMP规范中,ICMP回送消息在数据包的数据部分只有65,536个字节。送出超过65,536字节ping封包对IP通讯协定而言不是合法的用法,若送出ping封包时分成多个片段,目标电脑必须不断重组封包,期间可能因发缓冲区溢位,而导致系统崩溃。[1]
近年来,出现了另一种更多见的ping的攻击——Ping洪泛攻击。将过量的ping向目的电脑洪泛以使得正常的访问无法到达目的电脑(一种基本的拒绝服务攻击)。
tracert命令
-
Traceroute的原理:
主叫方首先发出 TTL=1 的 UDP 数据包,第一个路由器将 TTL 减1得0后就不再继续转发此数据包,而是返回一个 ICMP 逾时报文,主叫方从逾时报文中即可提取出数据包所经过的第一个网关地址。然后又发出一个 TTL=2 的 UDP 数据包,可获得第二个网关地址,依次递增 TTL 便获取了沿途所有网关地址。
需要注意的是,并不是所有网关都会如实返回 ICMP 超时报文。出于安全性考虑,大多数防火墙以及启用了防火墙功能的路由器缺省配置为不返回各种 ICMP 报文,其余路由器或交换机也可被管理员主动修改配置变为不返回 ICMP 报文。因此 Traceroute 程序不一定能拿全所有的沿途网关地址。所以,当某个 TTL 值的数据包得不到响应时,并不能停止这一追踪过程,程序仍然会把 TTL 递增而发出下一个数据包。一直达到默认或用参数指定的追踪限制(maximum_hops)才结束追踪。
依据上述原理,利用了 UDP 数据包的 Traceroute 程序在数据包到达真正的目的主机时,就可能因为该主机没有提供 UDP 服务而简单将数据包抛弃,并不返回任何信息。为了解决这个问题,Traceroute 故意使用了一个大于 30000 的端口号,因 UDP 协议规定端口号必须小于 30000 ,所以目标主机收到数据包后唯一能做的事就是返回一个“端口不可达”的 ICMP 报文,于是主叫方就将端口不可达报文当作跟踪结束的标志。


浙公网安备 33010602011771号