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.