6.3.5 利用Wireshark进行协议分析(五)----捕获并分析ICMP报文
一、捕获ICMP报文
-
打开Wireshark,选择网络接口并点击开始按钮。分组列表面板不断刷新抓渠道的数据包,为了过滤出我们所要分析的ICMP报文,我们在过滤框中输入icmp,为了生成icmp报文,我们需要运行系统自带的ping程序。
-
打开命令行,输入
ping 192.168.184.2
ping命令在运行过程中会发送多个ICMP的回应请求报文,如果目标主机可达,则ping程序会接收到多个响应的ICMP回应应答报文,如我们ping 192.168.184.2如图
我们可以看到ping程序的返回结果,里面包含了四条目标主机的回复信息及一些统计信息,图中ping的IP地址是操作主机所在网络的网关地址。
-
回到Wireshark我们可以看到分组列表中过滤出了8个ICMP报文,这8个报文是由成对的请求和应答组成。
如图
这些报文是否属于ping程序,我们来验证一下。
第一个报文的目的地址是192.168.184.2,这正是刚才ping命令执行的目的IP地址。源地址是192.168.184.133如图
我们可以看到本机的IP地址是192.168.184.133。这就说明第一条报文是由本机发出的。
第二个ICMP报文图中我们看到它的目的IP地址和源地址与第一个ICMP报文恰恰相反,它是由网关发往本地主机的一个ICMP的应答报文,所以Wireshark捕获的这8个报文告诉我们ping程序是连续的发送了四个ICMP的请求,对方在可达可联通的情况下会回应相应的ICMP应答报文,所以利用ICMP报文的交互,就可以检测对方的可达性。
二、分析ICMP报文结构
点击第一个ICMP的回应请求报文,在分组详情面板中会以分层的形式显示数据包的具体结构如图
-
第一层Frame点开,给出了数据帧的全局信息,显示了包括帧长74个字节,帧到达的时间,接口的编号和帧的类型。
-
第二行显示了数据帧头部信息,可以看到以太帧头部包括的三个字段,目的MAC地址,源MAC地址、类型字段,类型字段取值为十六进制的0800,说明数据帧中包含的是一个IP分组。
-
第三行显示了IP分组头部信息,包括版本号4,头部长度20字节,服务类型,数据报总长度,用于分片的标志字0,分片偏移字段0,说明这是一个完整的IP数据报。没有被分片。生存周期128,表示最多允许经过128跳路由器的转发。协议字段1,说明IP分组里面封装的是一个ICMP报文,头部校验、源IP地址,目的IP地址。我们可以对照以太网IP协议规范的报文格式(5.2.3 IP数据报(一)IP数据报的格式)来检查ICMP报文该字段是符合规范的。
-
第四行是ICMP的协议报文,具体内容是类型8,Code:0表明这是一个 Echo (ping) request也就是一个回应请求报文,校验和字段,这三个字段是所有ICMP报文的通用首部,或称为固定首部,下面的标识字段(Identifier (BE): 1 (0x0001))和序号字段(Sequence Number (BE): 1 (0x0001)),都是用两种不同的字节序来显示的。标识代表的是当前运行的ping进程的标识,序号字段代表ping生成的ICMP报文的编号
-
这里我们可以发现,在成对出现的ICMP的回应报文中标识字段和序号字段都是相同的
-
最后的Data字段中,包含了32个字节的随机生成的数据
通过对Wireshark捕获到的ICMP报文的分析,我们能够更加清晰的了解到ICMP报文的结构并且更加深入的理解了ping命令的工作过程。
这里我们一起讨论如果在主机上同时运行两个ping程序对相同的目标地址进行检测,那么这两个ping程序发送或者接收到的ICMP报文之间的区别,这些区别的含义又是什么欢迎大家评论区讨论。