Ping von Windows 7 erhält keine Antwort, setzt aber die Fehlerstufe auf 0

10

Von einem Windows 7-Computer aus pinge ich eine IP-Adresse eines ausgeschalteten Computers.

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)

Obwohl keine Antwort erfolgt, wird die Fehlerstufe auf gesetzt 0.

Ich versuche herauszufinden, ob ein Remote-Computer auf Ping antwortet. Einer meiner Tests besteht darin, die Maschine auszuschalten und zu pingen. Aus irgendeinem Grund setzt Ping die Fehlerstufe auf 0.

Doron
quelle

Antworten:

8

Ich habe mich auch dem Problem gestellt und es wurde mit dem Schlüssel " -w 2000 " gelöst . Ping mit dem Schlüssel " -w " und der Anzahl der Millisekunden gibt 1 zurück, wenn der Host im lokalen Subnetz nicht erreichbar ist. AFAIK, die Anzahl der Millisekunden muss kleiner als das Zeitlimit sein, nachdem das Windows-Netzwerksubsystem "Zielhost nicht erreichbar" zurückgegeben hat.

Auf meinem PC (Windows 7):
C:> ping -w 3000 192.168.10.22

Ping 192.168.10.22 mit 32 Datenbytes:
Antwort von 192.168.10.2: Zielhost nicht erreichbar.
Antwort von 192.168.10.2: Zielhost nicht erreichbar.
Antwort von 192.168.10.2: Zielhost nicht erreichbar.
Antwort von 192.168.10.2: Zielhost nicht erreichbar.

Ping-Statistik für 192.168.10.22:
Pakete: Gesendet = 4, Erhalten = 4, Verloren = 0 ( 0% Verlust ),

C:> echo% errorlevel%
0

aber

C:> ping -w 2999 192.168.10.22

Ping 192.168.10.22 mit 32 Datenbytes: Zeitüberschreitung bei
Anforderung.
Zeitüberschreitung der Anforderung.
Zeitüberschreitung der Anforderung.
Zeitüberschreitung der Anforderung.

Ping-Statistik für 192.168.10.22:
Pakete: Gesendet = 4, Erhalten = 0, Verloren = 4 ( 100% Verlust ),

C:> echo% errorlevel%
1

user354000
quelle
Kann jemand bestätigen, dass dies für alle Anwendungsfälle gilt?
user1853181
2
Ich habe getestet, wie der -wSwitch auf 2999 gegen eine gültige und ungültige IP eingestellt wird, wobei der -n 1Switch ebenfalls hinzugefügt wurde . Es scheint zu funktionieren.
Fyrye
ja ... dies setzt die Fehlerstufe, wenn kein Host an der angegebenen Adresse ... danke
ZEE
7

Dies liegt daran, dass sich das Ziel in Ihrem lokalen Subnetz befindet. Wenn sich das Ziel außerhalb Ihres lokalen Subnetzes befindet, wird das erwartete Request timed out.angezeigt. Es werden jedoch auch nicht vorhandene Ziele in Ihrem lokalen Subnetz gemeldet Reply from x.x.x.x: Destination host unreachable.. Wie dieser Whirlpool-Beitrag erklärt, hängt alles davon ab, ob es der erste Hop ist, dessen Zeitüberschreitung abgelaufen ist - und das Pingen Ihres lokalen Subnetzes ist nur ein einziger Hop. Anscheinend ist die Fehlerstufe beabsichtigt, 0wenn eine Antwort eingeht , und a host unreachablezählt als Antwort.


Problemumgehungen

Analyse der pingAusgabe mitfindstr

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

Das Folgende wird es einmal anpingen ( ping -n 1). Das %1ist der erste param auf die Batchdatei übergeben. Die Variable attribwird abhängig davon festgelegt, ob das Ziel antwortet oder nicht.

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

Separates Dienstprogramm

Es gibt ein interessantes Dienstprogramm namens lebendig . Ich habe es nicht ausprobiert und es wurde 2002 veröffentlicht, sodass es möglicherweise nicht einmal unter Windows 7 funktioniert. Wenn es jedoch funktioniert, wird die Fehlerstufe auf 2 gesetzt, wenn der Zielhost nicht erreichbar ist. Ich würde das allerdings nicht wirklich empfehlen.

Bob
quelle
+1 für alive, das wurde auch vor vielen Jahren verwendet, genau aus diesem Grund.
Bryan
Wenn die Antwort lautet "Ping-Anfrage konnte Host madeup04 nicht finden. Bitte überprüfen Sie den Namen und versuchen Sie es erneut", funktioniert dies nicht, da nach "Host nicht erreichbar" gesucht wird. Ihr Ergebnis lautet also "madeup04 antwortet", was falsch ist.
James Jenkins
1
@JamesJenkins Ich bin davon ausgegangen, dass der Ping-Versuch wie in der Frage gegen eine IP-Adresse gerichtet ist. Selbst dann ist es eine triviale Änderung (fügen Sie eine weitere /CSuchzeichenfolge hinzu). Kaum eine Gegenstimme wert. So wie es ist, habe ich die Antwort geändert, also danke, dass Sie darauf hingewiesen haben.
Bob
Ugh ... nun, das ist dumm ... Ich habe den halben Tag damit verbracht herauszufinden, warum mein System ein Subsystem als online gemeldet hat - obwohl dies eindeutig nicht der
Matt Clark,
2

Dies funktioniert bei mir unter 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
Andrew S.
quelle