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-Key: 302987

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

Printed on: April 23, 2024 at 08:04 o'clock

Member: MrCount
MrCount Apr 27, 2016 updated at 08:15:28 (UTC)
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 - 
Member: Galindiesel
Galindiesel Apr 27, 2016 at 08:26:58 (UTC)
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
Member: MrCount
Solution MrCount Apr 27, 2016 at 08:43:41 (UTC)
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
Member: Galindiesel
Galindiesel Apr 27, 2016 at 08:57:38 (UTC)
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
Member: MrCount
MrCount Apr 27, 2016 at 09:04:57 (UTC)
Goto Top
das

setlocal enabledelayedexpansion

und die ! bei den Variablen
Member: thielm
thielm Jul 29, 2019 at 20:36:43 (UTC)
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.
Member: thielm
thielm Apr 12, 2020 at 14:34:07 (UTC)
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