Traceroute in Batch auswerten
Hallo,
ich möchte in einer Batch prüfen, ob ein Host nach maximal n hops erreichbar ist.
Ist dies der Fall, ist alles besten. Wenn nach dem zweiten (oder n-ten) Hopp dieser Host nicht erreichbar ist möchte ich ein GOTO :irgendwas einfügen.
Das Tracert.log schaut ja z.B. so aus:
Start Trace at Do 22.01.2009 10:25:45,23
Tracing route to Servername.local [192.168.1.8]
over a maximum of 2 hops:
1 <10 ms <10 ms <10 ms 192.168.67.8
Trace complete.
In diesem Fall ist alles bestens. 192.168.67.8 wurde gefunden. Lässt sich dies über ein FIND, eventuell in doppelter Ausführung, lösen?
Gruss
ich möchte in einer Batch prüfen, ob ein Host nach maximal n hops erreichbar ist.
Ist dies der Fall, ist alles besten. Wenn nach dem zweiten (oder n-ten) Hopp dieser Host nicht erreichbar ist möchte ich ein GOTO :irgendwas einfügen.
Das Tracert.log schaut ja z.B. so aus:
Start Trace at Do 22.01.2009 10:25:45,23
Tracing route to Servername.local [192.168.1.8]
over a maximum of 2 hops:
1 <10 ms <10 ms <10 ms 192.168.67.8
Trace complete.
In diesem Fall ist alles bestens. 192.168.67.8 wurde gefunden. Lässt sich dies über ein FIND, eventuell in doppelter Ausführung, lösen?
Gruss
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 106796
Url: https://administrator.de/forum/traceroute-in-batch-auswerten-106796.html
Ausgedruckt am: 24.12.2024 um 16:12 Uhr
8 Kommentare
Neuester Kommentar
Hi,
also ich gehe mal davon aus, dass du schon einen guten Grund haben wirst warum du's nicht selbst mit einer socket mit entsprechender TTL ausprogrammieren willst (und falls du's nicht selbst programmieren willst - gibts eine Reihe von opensource-tools die genau das für einen machen und praktischerweise auch gut script-bar sind)...
...ausserdem bin ich mir nicht sicher für welches OS du das machen willst - aber zB könnte man das wie folgt machen:
traceroute ${MY_TARGET_IP} 2>/dev/null | grep ${MY_TARGET_IP} | awk '{ print $1; }'
...obigen Ausdruck könntest du dann in einer IF-Abfrage in deiner Shell auswerten. (Falls deine Frage für Windows gedacht war - sorry - aber auch dafür gibts sicherlich eine ähnliche Lösung... vielleicht konnte dir dann ja zumindest mein Beispiel einen 'Hinweis' geben wie man's lösen könnte.)
lG
also ich gehe mal davon aus, dass du schon einen guten Grund haben wirst warum du's nicht selbst mit einer socket mit entsprechender TTL ausprogrammieren willst (und falls du's nicht selbst programmieren willst - gibts eine Reihe von opensource-tools die genau das für einen machen und praktischerweise auch gut script-bar sind)...
...ausserdem bin ich mir nicht sicher für welches OS du das machen willst - aber zB könnte man das wie folgt machen:
traceroute ${MY_TARGET_IP} 2>/dev/null | grep ${MY_TARGET_IP} | awk '{ print $1; }'
...obigen Ausdruck könntest du dann in einer IF-Abfrage in deiner Shell auswerten. (Falls deine Frage für Windows gedacht war - sorry - aber auch dafür gibts sicherlich eine ähnliche Lösung... vielleicht konnte dir dann ja zumindest mein Beispiel einen 'Hinweis' geben wie man's lösen könnte.)
lG
Servus,
so als ungetestete Skizze in den Raum geworfen:
Das ganze läßt sich auch prima in eine For Schleife einbinden und das gesuchte Ziel via %1 für beliebige Ziele benutzen.
und sähe dann so aus:
Aufruf mit schnippsel.cmd Ziel IP
Gruß
so als ungetestete Skizze in den Raum geworfen:
tracert 192.168.67.8 |findstr "192.168.67.8">c:\test.txt
if %errorlevel%==0 echo Ziel gefunden
findstr /B /c:" 6" c:\test.txt && echo Dazu waren 6 Schritte nötig
Das ganze läßt sich auch prima in eine For Schleife einbinden und das gesuchte Ziel via %1 für beliebige Ziele benutzen.
und sähe dann so aus:
Aufruf mit schnippsel.cmd Ziel IP
@echo off
@cls
@tracert %1 >c:\test.txt
@findstr "%1" c:\test.txt >c:\test.ini
@if %errorlevel%==0 @title Ziel %1 gefunden
@FOR /L %%i IN (1,1,10) DO (
@findstr /B /c:" %%i" c:\test.ini && @echo Dazu waren %%i Schritte notwendig
)
del c:\test.txt
del c:\test.ini
Servus again,
Rufst du die batch - so wie ich Sie geschrieben habe - mit batch.cmd 192.168.1.8 auf und das Ziel 192.168.1.8 ist innerhalb 10 Schritten gefunden - wird dir das angezeigt.
Wobei mir allerdings nicht wirklich in den Kopf will, wie eine interne Adresse mal mit 5 oder 6 Hops dazwischen antworten kann. Die sollten immer identisch sein, außer der Ping geht über ein VPN/MPLS oder ähnlich.
Wenn du die Batch so änderst - kommst du drauf, wie Sie läuft:
Gruß
Das mit dem %1 eins verstehe ich manchmal noch nicht so ganz.
Ist ganz einfach...Aufruf mit schnippsel.cmd Ziel IP
%1 ist alles das, was nach der batch ohne Leerzeichen steht./edit und was hinter einem Leerzeichen steht wäre %2 und noch ein Leerzeichen mehr wäre %3 usw.
Bzw. %1 in der Dosbox und %%1 usw in der Batch
/editBzw. %1 in der Dosbox und %%1 usw in der Batch
Rufst du die batch - so wie ich Sie geschrieben habe - mit batch.cmd 192.168.1.8 auf und das Ziel 192.168.1.8 ist innerhalb 10 Schritten gefunden - wird dir das angezeigt.
Wobei mir allerdings nicht wirklich in den Kopf will, wie eine interne Adresse mal mit 5 oder 6 Hops dazwischen antworten kann. Die sollten immer identisch sein, außer der Ping geht über ein VPN/MPLS oder ähnlich.
Wenn du die Batch so änderst - kommst du drauf, wie Sie läuft:
@echo off
@cls
@if not "%1"=="" echo %1 wird gesucht
@tracert %1 >c:\test.txt
@Echo Log1 wird geöffnet - damit die Batch weiterläuft - Notepad schliessen
@Start /wait notepad c:\test.txt
@findstr "%1" c:\test.txt >c:\test.ini
@if %errorlevel%==0 @title Ziel %1 gefunden
@Echo Log2 wird geöffnet - damit die Batch weiterläuft - Notepad schliessen
@Start /wait notepad c:\test.ini
@FOR /L %%i IN (1,1,10) DO (
@findstr /B /c:" %%i" c:\test.ini && @echo Dazu waren %%i Schritte notwendig
)
pause
del c:\test.txt
del c:\test.ini
Gruß