通过wireshark(版本1.99.8)抓ICMP数据包
1.关于ping:
ping使用的是ICMP,本篇文章是通过wireshark捕获从本机ping到360官网的icmp数据包的实例。
2.启动抓包:
①本次实例选择的是360官网:www.360.com作为ping的对象,由于起初默认的wireshark捕获筛选器规则并没有ICMP,这里需要自己新建一个,在筛选器一栏,填写ip proto\icmp语句即可达到筛选的功能,为了醒目,直接将名称设置为ICMP only表示只捕获ICMP数据包。
②首先,先点击wireshark捕获选项的开始按钮,随时等待抓包,然后在cmd命令窗口键入ping www.360.com进行操作,可以看到360的IP是125.88.190.156。并且可以看到发送的四个包全部被接收,其丢包率为0。
③停止抓包,并返回到wireshark主界面后,在应用显示筛选器一栏键入过滤规则:ip src eq 125.88.190.56,表示只显示源地址为125.88.190.56的报文,如下图所示:
显然这是帧号为79的echo (ping )reply包,源地址为125.88.190.56,目的地址为192.168.1.100,ttl为43,该reply包reply的是帧号为69的request包也即如下图所示的报文。
通过以上两图可以看出reply包的TTL值为43,而request包的TTL为64,由此可以大致推算出报文经过了(64-43=21)个路由器。(虽然TTL从字面上翻译,是可以存活的时间,但实际上TTL是IP数据包在计算机网络中可以转发的最大跳数。TTL字段由IP数据包的发送者设置,在IP数据包从源到目的的整个转发路径上,每经过一个路由器,路由器都会修改这个TTL字段值,具体的做法是把该TTL的值减1,然后再将IP包转发出去。如果在IP包到达目的IP之前,TTL减少为0,路由器将会丢弃收到的TTL=0的IP包并向IP包的发送者发送 ICMP time exceeded消息。——百度百科)
3.数据包分析
进一步分析帧号为79的reply报文,可以看出该包通过了数据链路层DLC协议、IP和ICMP共3层协议的封装。
上图类型字段和代码字段分别为“Type:0,Code:0”表示收到的是如下Type=8的ICMP报文(ping),而且在途中没有异常(例如被路由器丢弃,目标不回应ICMP或传输失败),而返回的Type=0的ICMP报文,说明这台主机存在【1】。通过上图还可以看到回复应答的报文的时间比较长(和ping百度相比,该ping的Response time为11504.391ms,而ping百度的则仅仅32.492ms)
抓包期间还有个小插曲,就是源IP为未知地的ICMP报文的乱入,刚好用来作为途中异常的对比对象。由于途中出现异常,下图的类型字段和代码字段变为了(Type:3,Code:3)均不可达。
4.参考文献
【1】刘化君等编著 网络安全技术 机械工业出版社 2015年