从 Windows 7 Ping 没有得到答复,但将错误级别设置为 0

Dor*_*ron 11 windows-7 ping

在 Windows 7 机器上,我 ping 关闭机器的 IP 地址。

C:\>ping 192.168.1.222
Pinging 192.168.1.222 with 32 bytes of data:
Reply from 192.168.1.222: Destination host unreachable.
Reply from 192.168.1.222: Destination host unreachable. 
Reply from 192.168.1.222: Destination host unreachable.

Ping statistics for 192.168.1.222:
    Packets: Sent = 3, Received = 3, Lost = 0 (0% loss)
Run Code Online (Sandbox Code Playgroud)

即使没有回复,错误级别也设置为0

我想要做的是弄清楚远程机器是否正在回复 ping。我的测试之一是关闭机器并ping它。出于某种原因,ping 将错误级别设置为0.

use*_*000 8

我也遇到了这个问题,它用“ -w 2000 ”键解决了。当本地子网中的主机不可访问时,Ping 辅以键“ -w ”和毫秒数返回1。AFAIK,在 Windows 的网络子系统返回“目标主机无法访问”之后,毫秒数必须小于超时。

在我的 PC 上(Windows 7):
C:>ping -w 3000 192.168.10.22

使用 32 字节数据 Ping 192.168.10.22:
来自 192.168.10.2 的回复:目标主机无法访问。
192.168.10.2回复:目标主机不可达。
192.168.10.2回复:目标主机不可达。
192.168.10.2回复:目标主机不可达。

192.168.10.22 的 Ping 统计信息:
数据包:发送 = 4,接收 = 4,丢失 = 0(丢失 0%),

C:>echo %errorlevel%
0

C:>ping -w 2999 192.168.10.22

使用 32 字节数据 Ping 192.168.10.22:
请求超时。
请求超时。
请求超时。
请求超时。

192.168.10.22 的 Ping 统计信息:
数据包:发送 = 4,接收 = 0,丢失 = 4(100% 丢失),

C:>echo %errorlevel%
1

  • 我测试了将 `-w` 开关设置为 2999,同时添加了 `-n 1` 开关。它似乎工作。 (2认同)

Bob*_*Bob 7

这是因为目标位于您的本地子网上。如果目标位于您的本地子网之外,Request timed out.则会看到预期。但是,即使本地子网中不存在的目的地也会报告Reply from x.x.x.x: Destination host unreachable.. 正如this whirlpool post解释的那样,这完全取决于它是否超时的第一跳 - 并且ping您的本地子网只是单跳。显然,0当收到任何回复时,错误级别被设置为设计使然,并且host unreachable算作回复。


解决方法

解析ping输出findstr

来源:http : //forums.techguy.org/7318331-post3.html

下面将 ping 它一次 ( ping -n 1)。这%1是传递给批处理文件的第一个参数。该变量attrib是根据目的地是否回复而设置的。

echo Scanning %1
set attrib=responding
ping -n 1 %1|Findstr /I /C:"timed out" /C:"host unreachable" /C:"could not find host"
if %errorlevel%==0 set attrib=nonresponsive
Run Code Online (Sandbox Code Playgroud)

单独的实用程序

有一个有趣的实用程序,叫做live。我没试过,它是 2002 年发布的,所以它甚至可能无法在 Windows 7 中运行。但是,如果它可以运行,它会在目标主机无法访问时将错误级别设置为 2。不过,我真的不会推荐这个。