Ping з Windows 7 не отримує відповіді, але встановлює рівень помилок на 0


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 встановлює рівень помилок на 0.

Відповіді:


8

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

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

Pinging 192.168.10.22 з 32 байтами даних:
Відповідь від 192.168.10.2: Хост призначення недоступний.
Відповідь від 192.168.10.2: Хост призначення недоступний.
Відповідь від 192.168.10.2: Хост призначення недоступний.
Відповідь від 192.168.10.2: Хост призначення недоступний.

Статистика Ping за 192.168.10.22:
Пакети: відправлено = 4, отримано = 4, втрачено = 0 ( 0% втрати ),

C:> echo% errorlevel%
0

але

C:> ping -w 2999 192.168.10.22

Pinging 192.168.10.22 з 32 байтами даних:
запит вичерпано.
Час запиту вичерпано.
Час запиту вичерпано.
Час запиту вичерпано.

Статистика Ping за 192.168.10.22:
Пакети: відправлено = 4, отримано = 0, втрачено = 4 ( 100% втрати ),

C:> echo% errorlevel%
1


Чи може хтось підтвердити, що це справедливо для всіх випадків використання?
користувач1853181

2
Я перевірив встановлення -wперемикача на 2999 проти дійсного та недійсного IP, додавши -n 1перемикач. Здається, працює.
fyrye

так ... це встановлює рівень помилок, якщо немає жодного хоста за вказаною адресою ... дякую
ZEE

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, коли хост призначення недоступний. Я б не дуже рекомендував це, хоча.


+1 для alive, використовуваного ще багато років тому, саме з цієї причини.
Брайан

Якщо у відповіді "Запит Ping не вдалося знайти створений хост04. Будь ласка, перевірте ім'я та повторіть спробу" це не працює, оскільки він шукає "хост недоступний", тому ваш результат "madeup04 відповідає", що невірно.
Джеймс Дженкінс

1
@JamesJenkins Я зробив припущення, що, як і в питанні, спроба ping проти IP-адреси. Вже тоді це тривіальна зміна (додайте ще одну /Cрядок пошуку). Навряд чи варто брати участь. Як це було, я змінив відповідь, тому дякую, що вказав на це.
Боб

Тьфу ... ну це глупо ... Провели половину дня, намагаючись з'ясувати, чому моя система повідомляє про підсистему як онлайн - поки явно не було ...
Метт Кларк

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.