10

С компьютера с Windows 7 я проверяю 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 устанавливает errorlevel в 0 .

3 ответа3

7

Я также столкнулся с проблемой, и она разрешилась с ключом " -w 2000 ". Ping, дополненный ключом " -w " и числом миллисекунд, возвращает 1, когда хост в локальной подсети недоступен. AFAIK, количество миллисекунд должно быть меньше времени ожидания после того, как сетевая подсистема Windows вернет сообщение "Узел назначения недоступен".

На моем ПК (Windows 7):
C:> ping -w 3000 192.168.10.22

Пинг 192.168.10.22 с 32 байтами данных:
Ответ от 192.168.10.2: узел назначения недоступен.
Ответ от 192.168.10.2: узел назначения недоступен.
Ответ от 192.168.10.2: узел назначения недоступен.
Ответ от 192.168.10.2: узел назначения недоступен.

Статистика пинга за 192.168.10.22:
Пакеты: отправлено = 4, получено = 4, потеряно = 0 (потеря 0%),

C:> echo% errorlevel%
0

но

C:> ping -w 2999 192.168.10.22

Пинг 192.168.10.22 с 32 байтами данных:
Истекло время запроса.
Истекло время запроса.
Истекло время запроса.
Истекло время запроса.

Статистика пинга за 192.168.10.22:
Пакеты: отправлено = 4, получено = 0, потеряно = 4 (потеря 100%),

C:> echo% errorlevel%
1

7

Это потому, что пункт назначения находится в вашей локальной подсети. Если пункт назначения находится за пределами вашей локальной подсети, ожидаемое время Request timed out. виден. Однако даже несуществующие пункты назначения в вашей локальной подсети сообщат об Reply from x.x.x.x: Destination host unreachable. , Как это вихревая пост объясняет, все это зависит от того, является ли его первым хмель , что тайм - аут - и пинг вашей локальной подсети только один хмель. По всей видимости, именно по умолчанию уровень ошибки устанавливается равным 0 при получении любого ответа, а host unreachable считается ответом.


обходные

Разбор вывода ping с помощью findstr

Источник: http://forums.techguy.org/7318331-post3.html

Следующий будет пинговать его один раз (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, когда хост назначения недоступен. Я бы не стал этого рекомендовать.

2

Это работает для меня в 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .