从 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)
即使没有回复,错误级别也会设置为0
。
我想要做的是确定远程机器是否正在响应 ping。我的一个测试是关闭机器并 ping 它。出于某种原因,ping 将错误级别设置为0
。
答案1
我也遇到了这个问题,它解决了关键“-w 2000“. Ping 补充密钥”-w“并返回毫秒数1当本地子网中的主机无法访问时。据我所知,Windows 网络子系统返回“目标主机无法访问”之后的毫秒数必须小于超时时间。
在我的电脑(Windows 7)上:
C:>ping -w3000192.168.10.22
使用 32 字节数据对 192.168.10.22 执行 Ping 操作:
来自 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:> 回显 %错误级别%
0
但
C:>ping -w2999192.168.10.22
正在 Ping 192.168.10.22,数据为 32 字节:
请求超时。
请求超时。
请求超时。
请求超时。
192.168.10.22 的 Ping 统计信息:
数据包:已发送 = 4,已接收 = 0,丢失 = 4 (100% 亏损),
C:> 回显 %错误级别%
1
答案2
这是因为目标位于您的本地子网中。如果目标位于您的本地子网之外,Request timed out.
则会看到预期结果。但是,即使本地子网中不存在的目标也会报告结果Reply from x.x.x.x: Destination host unreachable.
。正如这个漩涡柱解释一下,这完全取决于第一跳是否超时 - 并且 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
独立设施
有一个有趣的实用程序叫做活。我还没有尝试过,它是 2002 年发布的,所以它甚至可能在 Windows 7 中都无法工作。但是,如果它确实有效,当目标主机无法访问时,它会将错误级别设置为 2。不过,我并不推荐这样做。
答案3
这在 Windows 7 上对我有用:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f %%i in (PCS.TXT) do (
SET bHOSTUP=0
ping -n 2 %%i |find "TTL=" && SET bHOSTUP=1
IF !bHOSTUP! equ 1 (
CALL :HOSTUP %%i
) else (
CALL :HOSTDOWN %%i
)
)
:HOSTUP
echo Host UP %1
GOTO EOF
:HOSTDOWN
echo Host DOWN %1
GOTO EOF
:EOF
exit /B