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

本文涉及的产品
云防火墙,500元 1000GB
简介:

局域网络中,测试客户机当前是否在线一般都是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,如需转载请自行联系原作者


相关文章
|
6月前
|
网络协议 Shell Linux
【Shell 命令集合 网络通讯 】⭐⭐⭐Linux 测试与目标主机之间的网络连接ping 命令 使用指南
【Shell 命令集合 网络通讯 】⭐⭐⭐Linux 测试与目标主机之间的网络连接ping 命令 使用指南
169 1
VM 挂起虚拟机后 主机无法ping通虚拟机
VM 挂起虚拟机后 主机无法ping通虚拟机
97 0
53Linux - 系统管理(测试远程主机连通性:ping)
53Linux - 系统管理(测试远程主机连通性:ping)
51 0
|
网络协议 网络安全 虚拟化
解决虚拟机安装windows7无法与主机ping通的解决方案
解决虚拟机安装windows7无法与主机ping通的解决方案
1008 0
解决虚拟机安装windows7无法与主机ping通的解决方案
|
虚拟化
VMware虚拟机和主机互相ping不通排查以及解决
VMware虚拟机和主机互相ping不通排查以及解决
VMware虚拟机和主机互相ping不通排查以及解决
|
3月前
|
网络协议 Linux 测试技术
基于PING命令的主机探测
基于PING命令的主机探测
99 3
|
3月前
|
网络协议 安全 Linux
在Linux中,当一台服务器无法ping通其他主机时,可能有哪些原因?
在Linux中,当一台服务器无法ping通其他主机时,可能有哪些原因?
|
6月前
|
Shell Linux 开发工具
Vmware 虚拟机挂起恢复后发现无法 Ping 通,无法连接到主机
在Linux主机上,以`root`用户停止NetworkManager服务并重启网络: ```shell systemctl stop NetworkManager systemctl restart network ``` 或修改网卡配置文件`ifcfg-ens33`,添加`NM_CONTROLLED="no"`,然后重启`network`服务: ```shell vim /etc/sysconfig/network-scripts/ifcfg-ens33 systemctl restart network ```
203 6
|
6月前
|
监控 Shell
生产环境Shell脚本Ping监控主机是否存活(多种方法)
生产环境Shell脚本Ping监控主机是否存活(多种方法)
|
6月前
|
监控 Shell
Shell脚本Ping监控主机是否存活并发邮件报警(三种方法)
Shell脚本Ping监控主机是否存活并发邮件报警(三种方法)
下一篇
无影云桌面