Il ping da Windows 7 non riceve risposta ma imposta il livello di errore su 0


10

Da un computer Windows 7, eseguo il ping di un indirizzo IP di un computer spento.

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)

Anche se non c'è risposta, il livello di errore è impostato su 0.

Quello che sto cercando di fare è capire se una macchina remota sta rispondendo al ping. Uno dei miei test è quello di spegnere la macchina e eseguirne il ping. Per qualche motivo, ping imposta errorlevel su 0.

Risposte:


8

Ho anche affrontato il problema e si è risolto con il tasto " -w 2000 ". Il ping integrato con la chiave " -w " e il numero di millisecondi restituisce 1 quando l'host nella sottorete locale non è raggiungibile. AFAIK, il numero di millisecondi deve essere inferiore al timeout dopo che il sottosistema di rete di Windows restituisce "Host di destinazione non raggiungibile".

Sul mio PC (Windows 7):
C:> ping -w 3000 192.168.10.22

Ping 192.168.10.22 con 32 byte di dati:
Risposta da 192.168.10.2: Host di destinazione non raggiungibile.
Risposta da 192.168.10.2: Host di destinazione non raggiungibile.
Risposta da 192.168.10.2: Host di destinazione non raggiungibile.
Risposta da 192.168.10.2: Host di destinazione non raggiungibile.

Statistiche del ping per 192.168.10.22:
Pacchetti: inviati = 4, ricevuti = 4, persi = 0 ( perdita 0% ),

C:> echo% errorlevel%
0

ma

C:> ping -w 2999 192.168.10.22

Ping 192.168.10.22 con 32 byte di dati:
richiesta scaduta.
Tempo scaduto per la richiesta.
Tempo scaduto per la richiesta.
Tempo scaduto per la richiesta.

Statistiche del ping per 192.168.10.22:
Pacchetti: inviati = 4, ricevuti = 0, persi = 4 ( perdita del 100% ),

C:> echo% errorlevel%
1


Qualcuno può confermare che questo è valido per tutti i casi d'uso?
user1853181

2
Ho provato a impostare lo -wswitch su 2999 contro un IP valido e non valido aggiungendo anche lo -n 1switch. Sembra funzionare
Fyrye,

sì ... questo imposta il livello di errore se nessun host all'indirizzo specificato ... grazie
ZEE

7

Questo perché la destinazione si trova nella tua sottorete locale. Se la destinazione si trova all'esterno della sottorete locale, Request timed out.viene visualizzato l'atteso . Tuttavia, verranno segnalate anche le destinazioni inesistenti all'interno della sottorete locale Reply from x.x.x.x: Destination host unreachable.. Come spiega questo post di idromassaggio , tutto dipende dal fatto che sia il primo hop scaduto - e il ping della sottorete locale è solo un singolo hop. Apparentemente, è in base alla progettazione che il livello di errore è impostato 0quando viene ricevuta una risposta e host unreachableconta come una risposta.


soluzioni alternative

Analisi pingdell'output confindstr

Fonte: http://forums.techguy.org/7318331-post3.html

Quanto segue eseguirà il ping una volta ( ping -n 1). Il %1è il primo parametro passato al file batch. La variabile attribviene impostata a seconda che la destinazione risponda o meno.

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

Utilità separata

C'è un'utilità interessante chiamata viva . Non l'ho provato ed è stato rilasciato nel 2002, quindi potrebbe non funzionare nemmeno in Windows 7. Tuttavia, se funziona, imposterà il livello di errore su 2 quando l'host di destinazione non è raggiungibile. Non lo consiglierei davvero, però.


+1 per alive, usato anche molti anni fa, proprio per questo motivo.
Bryan

Se la risposta è "Richiesta ping non è stato possibile trovare l'host madeup04. Controllare il nome e riprovare", questo non funziona, perché sta cercando "host irraggiungibile", quindi il risultato è "madeup04 sta rispondendo" che è errato.
James Jenkins,

1
@JamesJenkins Ho fatto il presupposto che, come nella domanda, il tentativo di ping è contro un indirizzo IP. Anche allora, è una modifica banale (aggiungi un'altra /Cstringa di ricerca). Non vale la pena un voto negativo. Così com'è, ho modificato la risposta, quindi grazie per averlo sottolineato.
Bob,

Uff ... beh, è ​​stupido ... Ho passato metà della mia giornata a cercare di capire perché il mio sistema segnalasse un sottosistema come online - mentre chiaramente non lo era ...
Matt Clark,

2

Questo funziona per me su 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.