ICMP 报文分析
理论
互联网控制消息协议(英语:Internet Control Message Protocol,缩写:ICMP)是互联网协议族的核心协议之一。它用于网际协议(IP)中发送控制消息,提供可能发生在通信环境中的各种问题反馈。通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。 —— WikiPedia
ICMP是在 RFC 792 中定义的互联网协议族之一。通常用于返回的错误信息或是分析路由。ICMP错误消息总是包括了源数据并返回给发送者。 ICMP错误消息的例子之一是TTL值过期。每个路由器在转发数据报的时候都会把IP包头中的TTL值减1。如果TTL值为0,“TTL在传输中过期”的消息将会回报给源地址。 每个ICMP消息都是直接封装在一个IP数据包中的,因此,和UDP一样,ICMP是不可靠的。
虽然ICMP是包含在IP数据包中的,但是对ICMP消息通常会特殊处理,会和一般IP数据包的处理不同,而不是作为IP的一个子协议来处理。在很多时候,需要去查看ICMP消息的内容,然后发送适当的错误消息到那个原来产生IP数据包的程序,即那个导致ICMP消息被发送的IP数据包。
抓包测试
ping命令
在Windows Shell 中使用ping命令向局域网内的主机发送ICMP报文,并使用WireShark捕获
请求报文
-
Type : 08
-
Code : 00
- 0800 表示这是一个 请求回显报文
-
数据部分为一串ASC码
回复报文
-
Type : 00
-
Coed :00
-
该报文为Ping指令的echo响应
-
-
不可达差错
- Type: 03
- Code: 03
- 0303表示这是一个目标端口不可答报文
- 并且发现这个ICMP报文里还有一个UDP报文,从192.168.137.249的65046端口到126.255.110.50的20768端口
- 所以这个ICMP差错报文是上一个UDP报文未到达目标端口的回显报文
tracert命令
使用Windows Shell执行tracert命令,使用wireshark命令捕获icmp报文
在抓包时发现,我抓到的ICMP报文里竟然有两个IPV4首部,我顿时感到事情不简单。
分析第一个IPv4首部,这里出现的src源地址并不是抓包过程中看到的10.200.49.95
,而是10.136.8.139
,
查看电脑网卡配置可知,10.200.49.95属于一张虚拟网卡My VPN Link,而10.136.8.193属于电脑的以太网网卡。
我推测这是因为寝室的校园网使用的是L2TP拨号上网的形式,所有的数据包都要走虚拟网卡才能通过以太网口访问外网。前面出现的目标地址192.168.113.1 正好是拨号上网的服务器地址
继续对tracert中的ICMP报文进行分析
第一个报文
-
IPv4 首部部分
- TTL:1
- Protocol: ICMP
-
ICMP 部分
-
Type: 08
-
Code: 00
(这是一个请求回显报文)
-
回显报文
-
Type: 11
-
Code: 0
- 1100表示报文类型为TTL超时报文,并且在这个ICMP报文中还包含了一个ICMP报文,即上一个发自该主机的ICMP请求回显示报文
之后就是重复性的每次把TTL+1,然后发送三个一样的ICMP请求回显报文
到达目标地址
在ttl为22时,ICMP请求回显报文成功到达了bing.com的主机地址204.79.197.200
-
Type: 0
-
Code:0
这是一个echo响应报文
-
Response time:41.058 ms