galindiesel
Goto Top

Batch um mehrere IP-Adressen via Ping auf Erreichbarkeit zu prüfen

Hallo liebe Administratoren Gemeinde.

Ich muss ganz viele IP-Adressen auf Erreichbarkeit prüfen und protokollieren. Ich darf keine Tools benutzen, also benutze ich eine batch.
Die einfachste Methode ist ein zyklischer Ping der im Loop über die Liste der IP-Adressen geht. Dazu gibt es hier viele nützliche Beiträge, leider komme ich mit keinem wirklich weiter (oder ich finde nicht den richtigen...). Die IP Adressen befinden sich in einer Datei namens ip.list und sehen so aus:

10.100.8.10
10.100.8.11
10.100.8.12
...

Ich habe hier im Forum ein super Skript gefunden um EINE IP-Adresse zu prüfen. Das klappt auch wunderbar wenn ich eine IP als fester Parameter in die batch eintrage.

set "IP=10.100.8.10"
:start
set "Erfolg=NEIN"
set "Zeit="
for /f "tokens=7 delims==< " %%i in ('ping -n 1 %IP%^|findstr "TTL"') do set "Zeit= - %%i" && set "Erfolg=JA"
result.log echo %IP% - %date%-%time% - %Erfolg%%Zeit%
goto start

Das Ergebnis in der result.log sieht so aus:

10.100.8.10 - 27/04/2016- 8:28:05.73 - JA - 35ms
10.100.8.10 - 27/04/2016- 8:28:05.87 - JA - 33ms
10.100.8.10 - 27/04/2016- 8:28:06.01 - JA - 33ms

Perfekt, genau wie ich es haben will. Nun muss ich nichts weiter tun, als die IP-Adresse aus der ip.list auslesen und der FOR-Schleife übergeben.
Dazu benutze ich eine weitere FOR-Schleife:

:start
FOR /f %%f IN (ip.list) DO (
set "Erfolg=NEIN"
set "Zeit="
for /f "tokens=7 delims==< " %%i in ('ping -n 1 %%f^|findstr "TTL"') do set "Zeit= - %%i" && set "Erfolg=JA"
result.log echo %%f - %date%-%time% - %Erfolg%%Zeit%
)
goto start

Ganz schlicht. Leider funktioniert das nicht. Das Ergebnis in der result.log sieht so aus:

10.100.8.10 - 27/04/2016- 8:34:26.15 -
10.100.8.11 - 27/04/2016- 8:34:26.15 -
10.100.8.12 - 27/04/2016- 8:34:26.15 -
10.100.8.13 - 27/04/2016- 8:34:26.15 -

Wie man sieht, werden die IP-Adressen richtig übergeben, aber die Parameter %Erfolg% und %Zeit% gehen "verloren", oder werden einfach nicht gesetzt... Versuche seit zwei Tagen das Problem zu lösen, mit Schreibweise in einer Zeile, Klammern an verschiedenen Stellen, mit TABs arbeiten usw. Hab hier auch einige verschachtelte scripts gefunden und folgendes versucht:

:start
FOR /f %%f IN (ip.list) DO (
result.log type nul
set "Erfolg=NEIN"
set "Zeit="
setlocal enabledelayedexpansion
for /f "tokens=7 delims==< " %%i in ('ping -n 1 %%f^|findstr "TTL"') do set "Zeit= - %%i" && set "Erfolg=JA"
result.log echo %%f - %date%-%time% - %Erfolg%%Zeit%
endlocal
)
goto start

Wobei ich sagen muss, dass ich das enabledelayedexpansion und endlocal nicht verstehe. Wie auch immer, das Ergebnis ist das gleiche...
Kann mir jemand sagen, was ich falsch mache?

Vielen Dank im Voraus.

Gruß,
GalinDiesel

Content-ID: 302987

Url: https://administrator.de/contentid/302987

Ausgedruckt am: 15.11.2024 um 09:11 Uhr

MrCount
MrCount 27.04.2016 aktualisiert um 10:15:28 Uhr
Goto Top
Hallo GalinDiesel,

also ich habe gerade den Teil

@echo off
:start
FOR /f %%f IN (ip.list) DO (
set "Erfolg=NEIN"  
set "Zeit="  
for /f "tokens=7 delims==< " %%i in ('ping -n 1 %%f^|findstr "TTL"') do set "Zeit= - %%i" && set "Erfolg=JA"  
>>result.log echo %%f - %date%-%time% - %Erfolg%%Zeit%
)
goto start

getestet.
Bei mir läuft das ohne Probleme...

Ergebnis:
1xx.xx.xx.xx8 - 27.04.2016-10:06:54,65 - JA - 1ms
1xx.xx.xx.xx0 - 27.04.2016-10:06:54,65 - JA - 1ms
1xx.xx.xx.xx1 - 27.04.2016-10:06:54,65 - JA - 1ms
1xx.xx.xx.xx8 - 27.04.2016-10:06:54,72 - JA - 1ms
1xx.xx.xx.xx0 - 27.04.2016-10:06:54,72 - JA - 1ms

Allerdings sind die ersten 3 Versuche (1 je IP aus der Liste) auch ohne Ergebnis

1xx.xx.xx.xx8 - 27.04.2016-10:06:54,38 - 
1xx.xx.xx.xx0 - 27.04.2016-10:06:54,38 - 
1xx.xx.xx.xx1 - 27.04.2016-10:06:54,38 - 
Galindiesel
Galindiesel 27.04.2016 um 10:26:58 Uhr
Goto Top
Hallo MrCount,

danke für die schnelle Antwort.
Meine IP-Liste war wohl zu lang. Habe nie auf einen zweiten Durchlauf gewartet. Allerdings stimmen die Parameter %Erfolg% und %Zeit% immer noch nicht... Habe meine IP-Liste jetzt verkürzt und eine nicht erreichbare Adresse (10.10.10.10) ans Ende der Liste gesetzt. Das Ergebnis sieht jetzt so aus:

10.100.8.10 - 27/04/2016- 9:22:19.22 -
10.100.8.11 - 27/04/2016- 9:22:19.22 -
10.100.8.12 - 27/04/2016- 9:22:19.22 -
10.100.8.13 - 27/04/2016- 9:22:19.22 -
10.10.10.10 - 27/04/2016- 9:22:19.22 -
10.100.8.10 - 27/04/2016- 9:22:23.60 - NEIN
10.100.8.11 - 27/04/2016- 9:22:23.60 - NEIN
10.100.8.12 - 27/04/2016- 9:22:23.60 - NEIN
10.100.8.13 - 27/04/2016- 9:22:23.60 - NEIN
10.10.10.10 - 27/04/2016- 9:22:23.60 - NEIN
10.100.8.10 - 27/04/2016- 9:22:28.10 - NEIN

Die erreichbaren sind jetzt auch NEIN...

Wenn ich die nicht erreichbare in der Mitte der Liste platziere, dann sieht das Ergebnis so aus:

10.100.8.10 - 27/04/2016- 9:18:51.55 -
10.10.10.10 - 27/04/2016- 9:18:51.55 -
10.100.8.11 - 27/04/2016- 9:18:51.55 -
10.100.8.12 - 27/04/2016- 9:18:51.55 -
10.100.8.13 - 27/04/2016- 9:18:51.55 -
10.100.8.10 - 27/04/2016- 9:18:55.83 - JA - 34ms
10.10.10.10 - 27/04/2016- 9:18:55.83 - JA - 34ms
10.100.8.11 - 27/04/2016- 9:18:55.83 - JA - 34ms
10.100.8.12 - 27/04/2016- 9:18:55.83 - JA - 34ms
10.100.8.13 - 27/04/2016- 9:18:55.83 - JA - 34ms
10.100.8.10 - 27/04/2016- 9:18:59.91 - JA - 34ms
10.10.10.10 - 27/04/2016- 9:18:59.91 - JA - 34ms

Die nicht erreichbare hat jetzt auch JA...

Also es scheint, als würde er sich die beiden Parameter %Erfolg% und %Zeit% aus dem Ergebnis der letzten IP-Adresse aus der liste zu merken und im nächsten Durchlauf für alle anderen zu setzen...

Gruß,
GalinDiesel
MrCount
Lösung MrCount 27.04.2016 um 10:43:41 Uhr
Goto Top
So sollte es gehen:

@echo off
setlocal enabledelayedexpansion

:start
FOR /f %%f IN (ip.list) DO (
set "Erfolg=NEIN"  
set "Zeit="  
for /f "tokens=7 delims==< " %%i in ('ping -n 1 %%f^|findstr "TTL"') do (  
set "Zeit= - %%i"  
set "Erfolg=JA"  
)
>>result.log echo %%f - %date%-%time% - !Erfolg!!Zeit!
)
goto start
Galindiesel
Galindiesel 27.04.2016 um 10:57:38 Uhr
Goto Top
Hallo MrCount,

JAAA, das funktioniert!! DANKE!!

was war jetzt das entscheidende?

das setlocal enabledelayedexpansion, oder die Klammern der inneren FOR Schleife, oder das !Erfolg!!Zeit!, oder alle drei zusammen?

Nochmal Danke & Gruß,
GalinDiesel
MrCount
MrCount 27.04.2016 um 11:04:57 Uhr
Goto Top
das

setlocal enabledelayedexpansion

und die ! bei den Variablen
thielm
thielm 29.07.2019 um 22:36:43 Uhr
Goto Top
Guten Abend,
ich benutze dankenswerter Weise dieses Skript, um die Erreichbarkeit von 6 Galaxy Tab A Tablets zu überprüfen. Jetzt habe ich allerdings ein Problem.
Ein Tablet zeigt immer "Nein" also offline an, obwohl es mit dem Internet verbunden ist und auch über das Netzwerk erreichbar ist. (http Aufruf um auf eine App zuzugreifen funktioniert, mit einem vorher eingestelltem Port.) Hat man diese http Anfrage gemacht, dann wird in dem Ping das Tablet auch als Online angezeigt. Kurz später, beim nächsten Ping (mit 3min Pause) wieder als offline. Alle anderen Tablets werden durchgänig als Online angezeigt.

Ich bin nicht allzu fit im Thema Netzwerk. Ich hoffe mir kann hier einer von euch helfen.
thielm
thielm 12.04.2020 um 16:34:07 Uhr
Goto Top
Viele Dank für das Skript, allerdings funktioniert es bei mir unter Windows10 Pro mit den aktuellsten Update nicht.
Muss ich da irgendwas verändern?

LG