ping命令通常被用来检查网络连接是否是通的,如我们的电脑接在局域网的路由器下面,我们可以用ping来测试跟路由器或其它局域网内的某台主机的连接情况,又或者我们想测试是否连接外网正常,我通常会ping的一些网站如www.baidu.com,www.jd.com等。这个命令行工具相信很多人都用过,应该也有不少人和我一样一直想它到底是怎么实现的,或它的过程是怎样的。
1 ping测试
测试设备:电脑一台,android手机一台(^_^手上只有一台电脑),无线路由器一台。
测试方式:电脑用网线连接在路由器下,手机通过WiFi连接上路由器,用android手机ping电脑。
测试准备:电脑上需安装豌豆荚+adbtool,这样电脑可以通过USB线进入android手机调试模式并进入手机shell,我们就可以在电脑上敲手机上的命令,还没安装或还不会使用的去百度一下;电脑上还需安装网络抓包工具,如Wireshark,Omnipeek等,Wireshark挺有名的,而由于工作需要我装的是Omnipeek,两款软件差不多,还没安装或还不会使用的去百度一下。
开始测试:打开电脑上的抓包软件开始抓包
电脑打开cmd输入ipconfig /all查看电脑有线网络获得的ip地址(如192.168.1.100),利用adbtool进入手机shell模式,然后输入ping 192.168.1.100,这样手机就开始ping电脑了。
2 ping分析
通过过滤抓取到的网络封包来分析ping的过程。
从上面的封包protocol这栏我们可以看到"PING Req","PING Reply"这已经说明了这些封包就是ping的请求和响应包。
1) ping请求包分析
封包48的十六进制数据如上,借助Omnipeek工具自动分析展开结果如下:
从上面可知ping请求包是基于IP协议的ICMP消息的,ICMP的数据结构可以查询rfc792,这里[ICMP Type] 为 8 Echo Request。
2) ping响应包分析
封包49的十六进制数据如上,借助Omnipeek工具自动分析展开结果如下:
这里[ICMP Type] 为 0 Echo Reply。