Ping不通不代表主机不在线!

简介:

局域网络中,测试客户机当前是否在线一般都是ping对方,返回TTL=XXX 就在线,返回Request timed out一般就“当做”它不在线。极少有人继续往下探究,直到确定对方是否在线。

其实Request timed out真正的含义是对方没有响应ICMP ECHO REQUEST包或者响应这个包超时换句话说就是你没收到对方的ICMP ECHO REPLY包。下面几种情况都有可能返回Request timed out:

1.对方不在线

2.网络中存在防火墙(这里只考虑目标主机安装了防火墙的情况,不考虑网络设备与源头)

3.网络延迟或者网络拥塞(正常情况下极少发生)

可是后两种情况往往被人忽视。

 

一、原理部分

一个ping包的原理:

1.首先查本地arp cache信息,看是否有对方的mac地址和IP地址映射条目记录。如果有则直接发送icmp echo request包。

2.如果没有,则发起一个arp请求广播包,等待对方告知具体的mac地址。

3.收到arp响应包之后,获得某个IP对应的具体mac地址,有了MAC地址之后才可以建立数据链路层连接,进行通讯。同时对ip-mac地址做一个本地cache。
4.发出icmp echo request包,收到icmp  echo reply包。
 
Tcpdump抓包求证ping过程:
22:00:29.123851 arp who-has 192.168.1.61 tell 192.168.1.122
22:00:29.123881 arp reply 192.168.1.61 is-at 0:f:1f:ff:71:44
22:07:47.655451 192.168.1.122 > 192.168.1.61: icmp: echo request (DF) (ttl 64, id 0, len 84)
22:07:47.655487 192.168.1.61 > 192.168.1.122: icmp: echo reply (ttl 128, id 25674, len 84)
 
 
二、Windump抓包使其无所遁形。
Ping远端开启XP内置防火墙的机器(192.168.2.27),以下操作均在本地机器完成。
本机安装WinPcap工具和拷贝windump工具。
打开两个命令提示符窗口。一个发送ping ip-addr命令。一个打开windump抓包。
注:为了确保能够发出arp请求,请先确认本地arp cache中没有缓存目标IP-MAC的条目,“arp -a”查看;或者清空arp缓存,“arp -d”,再进行以下操作。
 
窗口1,可以看到开启防火墙后得到time out。无法判断是否在线。
D:\Documents and Settings\Leaves>ping 192.168.2.27
Pinging 192.168.2.27 with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Ping statistics for 192.168.2.27:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
 
窗口2(需要上面的ping命令调用arp request请求,这就是上面ping的目的)
D:\>windump -n -i 1 arp host 192.168.2.17
windump: listening on \Device\NPF_{5AEB58D5-4F88-4B3F-B5D8-56ED494AF764}
16:07:38.721001 arp who-has 192.168.2.27 tell 192.168.2.17
16:07:38.721987 arp reply 192.168.2.27 is-at 00:03:ff:41:7b:9a    (有ARP回应,说明在线!小样,看你还敢不敢隐身)
 
windump参数
-D 获取网卡ID及信息
-i 接需要侦听网卡序号,利用-D得到。
-n 不把ip解析成计算机名
arp为协议
host 接需要侦听的IP(因为是我ping 2.27,所以我侦听自己的2.17端口ip)

 

路漫漫其修远兮,吾将上下而求索


本文转自yangye1985 51CTO博客,原文链接:http://blog.51cto.com/yangye/477793,如需转载请自行联系原作者


相关文章
|
28天前
|
网络协议 Shell Linux
【Shell 命令集合 网络通讯 】⭐⭐⭐Linux 测试与目标主机之间的网络连接ping 命令 使用指南
【Shell 命令集合 网络通讯 】⭐⭐⭐Linux 测试与目标主机之间的网络连接ping 命令 使用指南
42 1
|
5月前
VM 挂起虚拟机后 主机无法ping通虚拟机
VM 挂起虚拟机后 主机无法ping通虚拟机
58 0
|
网络协议 网络安全 虚拟化
解决虚拟机安装windows7无法与主机ping通的解决方案
解决虚拟机安装windows7无法与主机ping通的解决方案
解决虚拟机安装windows7无法与主机ping通的解决方案
|
虚拟化
VMware虚拟机和主机互相ping不通排查以及解决
VMware虚拟机和主机互相ping不通排查以及解决
VMware虚拟机和主机互相ping不通排查以及解决
|
1月前
ping 测试主机之间网络连通性
ping 测试主机之间网络连通性。
46 1
|
4月前
主机ping不通虚拟机,虚拟机可以ping同主机
主机ping不通虚拟机,虚拟机可以ping同主机
92 0
|
5月前
|
Kubernetes 测试技术 Docker
k8s集群节点ping不通其他主机的ip
k8s集群节点ping不通其他主机的ip
162 0
|
9月前
|
Shell 开发工具
写一个脚本/root/bin/hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问
写一个脚本/root/bin/hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问
72 0
|
Linux 网络安全 Windows
CentOs主机能够ping通虚拟机,虚拟机无法ping通主机 解决方案
CentOs主机能够ping通虚拟机,虚拟机无法ping通主机 解决方案
271 0
CentOs主机能够ping通虚拟机,虚拟机无法ping通主机 解决方案
|
9月前
|
Linux 网络安全 Windows
Linux系统-【网络通讯】ping命令 – 测试主机间网络连通性
ping命令的功能是用于测试主机间网络连通性,发送出基于ICMP传输协议的数据包,要求对方主机予以回复,若对方主机的网络功能没有问题且防火墙放行流量,则就会回复该信息,我们也就可得知对方主机系统在线并运行正常了。 不过值得我们注意的是Linux与Windows相比有一定差异,Windows系统下的ping命令会发送出去4个请求后自动结束该命令;而Linux系统则不会自动终止,需要用户手动按下组合键“Ctrl+c”才能结束,或是发起命令时加入-c参数限定发送个数。
232 0