Batch-Skripting - Erreichbarkeit von IP-Adressen (ping)
Hallo,
ich habe ein Problem...
ich will die Erreichbarkeit einer Adresse (Ip-Adresse oder Name - LAN und WAN) in einem Batch-Skript überprüfen und abhängig vom Ergebnis etwas tun...
Eigentlich wollte ich mit PING und ERRORLEVEL arbeiten, aber bei folgendem Beispiel bekomme ich unterschiedliche Ergebnisse...
Skript:
Und mal bekomme ich OK und mal bekomme ich NOT OK!
Dies ist abhängig vom Output des ping...
- antwortet ping folgendermaßen erhalte ich OK:
- antwortet ping aber so... erhalte ich OK:
Weiß jemand wieso ping mal so und mal so antwortet und dementsprechend den ERRORLEVEL unterschiedlich besetzt?
Wie kann ich denn die Erreichbarkeit wirklich 100 % korrekt auswerten?
ich habe ein Problem...
ich will die Erreichbarkeit einer Adresse (Ip-Adresse oder Name - LAN und WAN) in einem Batch-Skript überprüfen und abhängig vom Ergebnis etwas tun...
Eigentlich wollte ich mit PING und ERRORLEVEL arbeiten, aber bei folgendem Beispiel bekomme ich unterschiedliche Ergebnisse...
Skript:
ping -n 1 -w 1000 -l 1000 172.16.100.139
if ERRORLEVEL 1 (
echo ping 172.16.100.139: NOT OK
) else (
echo ping 172.16.100.139: OK
)
Und mal bekomme ich OK und mal bekomme ich NOT OK!
Dies ist abhängig vom Output des ping...
- antwortet ping folgendermaßen erhalte ich OK:
Ping wird ausgeführt für 192.169.100.139 mit 1000 Bytes Daten:
Zeitüberschreitung der Anforderung.
Ping-Statistik für 172.16.100.139:
Pakete: Gesendet = 1, Empfangen = 0, Verloren = 1 (100% Verlust),
Zeitüberschreitung der Anforderung.
Ping-Statistik für 172.16.100.139:
Pakete: Gesendet = 1, Empfangen = 0, Verloren = 1 (100% Verlust),
- antwortet ping aber so... erhalte ich OK:
Ping wird ausgeführt für 192.169.100.139 mit 1000 Bytes Daten:
Antwort von 62.24.12.197: Zielhost nicht erreichbar.
Ping-Statistik für 172.16.100.139:
Pakete: Gesendet = 1, Empfangen = 1, Verloren = 0 (0% Verlust),
Ca. Zeitangaben in Millisek.:
Minimum = 0ms, Maximum = 0ms, Mittelwert = 0ms
Antwort von 62.24.12.197: Zielhost nicht erreichbar.
Ping-Statistik für 172.16.100.139:
Pakete: Gesendet = 1, Empfangen = 1, Verloren = 0 (0% Verlust),
Ca. Zeitangaben in Millisek.:
Minimum = 0ms, Maximum = 0ms, Mittelwert = 0ms
Weiß jemand wieso ping mal so und mal so antwortet und dementsprechend den ERRORLEVEL unterschiedlich besetzt?
Wie kann ich denn die Erreichbarkeit wirklich 100 % korrekt auswerten?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 165721
Url: https://administrator.de/contentid/165721
Ausgedruckt am: 22.11.2024 um 22:11 Uhr
9 Kommentare
Neuester Kommentar
hallo eccos01,
nur mal was zum Spielen:
Falls es aber bei einer vermeintlich permanenten Verbindung ständig zu Ungereimtheiten kommt - also mal da und mal nicht - dann liegt es mit Sicherheit nicht an der Batch
Gruss
Tsuki
nur mal was zum Spielen:
@ECHO off
cls
SET ip=172.16.100.
SET log=ips.txt
IF EXIST %log% DEL %log% && ECHO Datei wurde gelöscht
IF EXIST %log% NEQ 0 ECHO Datei konnte nicht gelöscht werden! & GOTO :eof
FOR /L %%i IN (0,1,255) DO (
ping -n 1 -w 5 %ip%%%i|find "TTL=" && ECHO %ip%%%i >> %log% || echo %ip%%%i nicht erreichbar
)
Falls es aber bei einer vermeintlich permanenten Verbindung ständig zu Ungereimtheiten kommt - also mal da und mal nicht - dann liegt es mit Sicherheit nicht an der Batch
Gruss
Tsuki
hier habe ich in powershell geschrieben
gruß michael
## ----------------------------------------------------------------------------
## Script Name: ping-test.ps1
## CreationDate: 05.05.2011
## Last Modified:
## Copyright: M.N. (c)2011
## Purpose:
## einmal auf der powershell ausgeführen
## "Set-ExecutionPolicy Unrestricted"
## ----------------------------------------------------------------------------
function timepost() {
$gelaufenezeit_STD = ($stop - $start).TotalHours
$gelaufenezeit_MIN = ($stop - $start).TotalMinutes
$gelaufenezeit_SEK = ($stop - $start).TotalSeconds
echo $gelaufenezeit_SEK
If ($gelaufenezeit_SEK -ge 3600) {
[int]$MINUTEN = ($gelaufenezeit_SEK / 3600)
$MINUTEN_REST = ($gelaufenezeit_SEK - ([int]$MINUTEN*3600))
$MINUTEN_REST = ($MINUTEN_REST / 60)
$MINSEK = "Std."
'Auftrag nach {0:0},{1:0} {2} erledigt....' -f [int]$gelaufenezeit_STD, $MINUTEN_REST, $MINSEK
}
ElseIf ($gelaufenezeit_SEK -ge 60){
[int]$SEKUNDEN = ($gelaufenezeit_SEK / 60)
$SEKUNDEN_REST = ($gelaufenezeit_SEK - ([int]$SEKUNDEN*60))
$MINSEK = "Min."
'Auftrag nach {0:0},{1:0} {2} erledigt....' -f $gelaufenezeit_MIN, $SEKUNDEN_REST, $MINSEK
}
Else {
$MINSEK = "Sek."
'Auftrag nach {0:0} {1} erledigt....' -f $gelaufenezeit_SEK, $MINSEK
}
#'Auftrag nach {0:0.00} {1} erledigt....' -f $gelaufenezeit, $MINSEK
}
$start = Get-Date
echo "Programm ist am laufen seit: $start"
echo "Start Zeit: $start" > .\ping.log
while ($true) {
$ausgabe = ping -n 1000 192.168.181.100
echo $ausgabe
if ($ausgabe -like "Zeitüberschreitung der Anforderung.") {
$stop = Get-Date
echo "Fehler Zeit: $stop" >> .\ping.log
break
}
}
timepost >> .\ping.log
timepost
Moin eccos01,
Dann so [als Demo amCMD-Prompt]
Die xx.yyy.112.zzz war natürlich eine echte IP, ist nur anonymisiert.
"TTL" sollte es in jeder noch so internationalen Ping-Ausgabe geben, ausgenommen da wo T-Mo wohnt.
Grüße
Biber
Zitat von @eccos01:
Ach ja... und es sollte ein reines Batch-Skipt sein... und universell einsetzbar (das heißt unabhängig von der Windows
Version (XP, Vista, 7, 2003, 2008) und von der Sprache (deutsch, englisch, frz)).
Ach ja... und es sollte ein reines Batch-Skipt sein... und universell einsetzbar (das heißt unabhängig von der Windows
Version (XP, Vista, 7, 2003, 2008) und von der Sprache (deutsch, englisch, frz)).
Dann so [als Demo amCMD-Prompt]
>for %i in ( 172.16.100.129 xx.yyy.112.zzz localhost) do @ping -n 1 -w 1000 -l 1000 %i |find "TTL">nul && echo ok %i ||@echo !! %i nicht erreichbar.
!! 172.16.100.129 nicht erreichbar.
ok xx.yyy.112.zzz
ok localhost
"TTL" sollte es in jeder noch so internationalen Ping-Ausgabe geben, ausgenommen da wo T-Mo wohnt.
Grüße
Biber
Hallo,
ich wollte das noch mal aus der Versenkung holen.
Wenn ich nun folgendes habe:
das soll für windows 7 sein.
irgendwie kommt die Batch bei mir in eine Endlosschleife und nix richtiges gibt der dann aus. was mache ich falsch?
ich wollte das noch mal aus der Versenkung holen.
Wenn ich nun folgendes habe:
ping 192.168.0.30 -n 1 -w 1000 -l 2000
if %ERRORLEVEL%==1 (
echo ping 192.168.0.30: NOT OK!
) else (
echo ping 192.168.0.30: OK!
)
das soll für windows 7 sein.
irgendwie kommt die Batch bei mir in eine Endlosschleife und nix richtiges gibt der dann aus. was mache ich falsch?
Zitat von @Biber:
Moin trailer,
benenne die Batchdatei um von "ping.bat" oder "ping.cmd" in "ichbineinsupercoder.cmd".
Dann funktioniert es.
Grüße
Biber
Moin trailer,
benenne die Batchdatei um von "ping.bat" oder "ping.cmd" in "ichbineinsupercoder.cmd".
Dann funktioniert es.
Grüße
Biber
Hallo,
leider geht es dadurch immer noch nicht. Datei ist hier: http://www.dateiupload.com/files/2V4vyu4uCo.cmd ist da irgendwo ein Tippfehler drin?
hoppla, hatte deinen satz falsch gelesen, is ok geht nun.
Hallo,
was mir fehlt ist die Möglichkeit, dass nur die Ping Aussetzer protokolliert werden. Denn so ist das Ergebnis doch immer sehr unübersichtlich und wenn nur die Problemfälle protokolliert werden, dann wäre es doch besser.
Ein Beispiel liefert Michael mit seinem Ping Test.bat. (http://www.windows-faq.de/2015/10/21/netzwerkprobleme-feststellen-nur-p ..)
Vielleicht könnte mal die verschiedenen Möglchkeiten kombinieren?
VG
Leonie
was mir fehlt ist die Möglichkeit, dass nur die Ping Aussetzer protokolliert werden. Denn so ist das Ergebnis doch immer sehr unübersichtlich und wenn nur die Problemfälle protokolliert werden, dann wäre es doch besser.
Ein Beispiel liefert Michael mit seinem Ping Test.bat. (http://www.windows-faq.de/2015/10/21/netzwerkprobleme-feststellen-nur-p ..)
Vielleicht könnte mal die verschiedenen Möglchkeiten kombinieren?
VG
Leonie