Per Batch ermitteln, welche IPs in deinem Subnetz erreichbar sind
Alle erreichbaren IPs in einem Class-C-Subnetz auflisten
Guten Tag
Wenn man mal wissen will, welche IP-Adressen in einem gewissen Subnetz erreichbar sind, kann man sich dieses Batches bedienen.
Einziger Nachteil: Der Batch ist langsam. Er braucht ungefähr 5 Minuten, bis er durchgelaufen ist.
Hier der Code meines Batches SUBNETWALK.BAT (korrigierte Version):
Guten Tag
Wenn man mal wissen will, welche IP-Adressen in einem gewissen Subnetz erreichbar sind, kann man sich dieses Batches bedienen.
Einziger Nachteil: Der Batch ist langsam. Er braucht ungefähr 5 Minuten, bis er durchgelaufen ist.
Hier der Code meines Batches SUBNETWALK.BAT (korrigierte Version):
::*
::* Subnetwalk.bat
::* ==============
::* Pingt alle IP-Adressen eines C-Netzes
::* und listet alle pingbaren Geräte auf
::*
@echo off
cls
::###################################################################
::Start-Aufgaben
::-------------------------------------------------------------------
::Parameter-Abfragen
if "%1%"=="" goto Manual
if "%1%"=="?" goto Manual
if "%1%"=="/?" goto Manual
if "%1%"=="-?" goto Manual
if "%1%"=="-h" goto Manual
if "%1%"=="--h" goto Manual
if "%1%"=="-help" goto Manual
if "%1%"=="--help" goto Manual
if "%1%"=="help" goto Manual
::-------------------------------------------------------------------
::-------------------------------------------------------------------
::Wenn ein Ordner %systemroot%\temp\SubnetWalk existiert, wird dieser gelöscht
if exist %systemroot%\temp\SubnetWalk (
rmdir /s /q %systemroot%\temp\SubnetWalk
)
::-------------------------------------------------------------------
::-------------------------------------------------------------------
:: Erstelle Ordner für Logfiles
mkdir %systemroot%\temp\SubnetWalk
::Erstelle ein Logfile in diesem Ordner
echo Dieser Ordner wurde vom Batch SubnetWalk.bat erstellt >>%systemroot%\temp\SubnetWalk\SubnetWalk-Readme.txt
echo Dieser Ordner kann gelöscht werden. >>%systemroot%\temp\SubnetWalk\SubnetWalk-Readme.txt
::-------------------------------------------------------------------
::###################################################################
::###################################################################
::Hauptroutine
echo SUBNETWALK.BAT
echo =============
echo.
echo Das Subnet %1.0 wird durchsucht...
echo Achtung: Dieser Vorgang dauert mehrere Minuten!
echo Schiesst also nicht schon nach 10 Sekunden den Batch ab!
echo.
::-------------------------------------------------------------------
:Schleife
for /l %%a IN (1,1,255) DO call :Pingvorgang %1 %%a
goto Filterung
::-------------------------------------------------------------------
::-------------------------------------------------------------------
:Pingvorgang
ping -n 1 %1.%2 >>%systemroot%\temp\SubnetWalk\SubnetWalk-Log1.txt
if "%2"=="26" (
echo Subnet %1.0 zu 10 Prozent durchsucht...
)
if "%2"=="52" (
echo Subnet %1.0 zu 20 Prozent durchsucht...
)
if "%2"=="77" (
echo Subnet %1.0 zu 30 Prozent durchsucht...
)
if "%2"=="103" (
echo Subnet %1.0 zu 40 Prozent durchsucht...
)
if "%2"=="128" (
echo Subnet %1.0 zu 50 Prozent durchsucht...
)
if "%2"=="154" (
echo Subnet %1.0 zu 60 Prozent durchsucht...
)
if "%2"=="180" (
echo Subnet %1.0 zu 70 Prozent durchsucht...
)
if "%2"=="205" (
echo Subnet %1.0 zu 80 Prozent durchsucht...
)
if "%2"=="231" (
echo Subnet %1.0 zu 90 Prozent durchsucht...
)
goto end
::-------------------------------------------------------------------
::-------------------------------------------------------------------
:Filterung
echo.
echo Subnetz wurde durchsucht. Filtere Ergebnisse...
echo.
type %systemroot%\temp\SubnetWalk\SubnetWalk-Log1.txt | find /i "ttl" >>%systemroot%\temp\SubnetWalk\SubnetWalk-Log2.txt
::Putze überflüssige Zeichen aus jeder Zeile aus
@for /F "tokens=1,2,3,4 delims=: " %%a in (%systemroot%\temp\SubnetWalk\SubnetWalk-Log2.txt) do echo %%c >>%systemroot%\temp\SubnetWalk\SubnetWalk-Log3.txt
echo Ergebnisse gefiltert!
echo.
echo Folgende IPs im Subnetz %1 sind pingbar:
echo.
type %systemroot%\temp\SubnetWalk\SubnetWalk-Log3.txt
echo.
goto end
::###################################################################
:Manual
echo SUBNETWALK.BAT
echo =============
echo.
echo Listet die pingbaren Geräte im angegebenen Subnetz auf.
echo Dieser Batch funktioniert nur bei Subnetzen mit einer 24-bittigen Subnetzmaske,
echo d.h. bei C-Class-Netzen (255.255.255.0)!
echo.
echo.
echo Starte Batch folgendermassen:
echo %~n0 Netz-ID
echo.
echo Beispiel:
echo %~n0 192.168.0
echo.
echo.
echo Anmerkung:
echo Eine IP-Adresse besteht immer aus Netz-ID (welche u.a. das Subnetz definiert)
echo und einer Host-ID (welche den entsprechenden Client definiert).
echo Bei einem C-Class-Netz (d.h. einem Netz mit der Subnetzmaske 255.255.255.0)
echo besteht die Netz-ID immer aus den ersten drei Bytes.
echo.
echo Beispiel:
echo Die Netz-ID der IP-Adresse 192.168.0.101 ist in einem C-Netz (d.h. mit der
echo Subnetzmaske 255.255.255.0) 192.168.0
echo.
:end
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 64751
Url: https://administrator.de/contentid/64751
Ausgedruckt am: 15.11.2024 um 23:11 Uhr
12 Kommentare
Neuester Kommentar
Ein paar kleinere Verbesserungsvorschläge von mir:
Bei der Parameter-Abrafge würd ich
In der For-Schleife kanns man die 0 glaub ich weglassen... Also statt:
Wenn du beim ping noch ein -w 1 mitgibst gehts noch shcneller (das 1 kansn tdu bei größeren bzw. langsamen netzen auch höher setzen wenn Du meinst):
Und als vierter Punkt würde ich in der Hilfe den Beispielbefehlsaufruf nicht mit nem Festen Dateinamen machen sondern den Der Batch benutzen. So kann man di eBatch auch anders nennen und der Aufruf steht dennoch immer richtig in der Hilfe:
Statt
miniversum
Bei der Parameter-Abrafge würd ich
If /i "%1%"==
schreiben. dan würde z.B. auchSubnetwalk HelP
in der Eingabeaufforderung gehen.In der For-Schleife kanns man die 0 glaub ich weglassen... Also statt:
for /l %%a IN (0,1,255) DO call :Pingvorgang %1 %%a
lieber:for /l %%a IN (1,1,255) DO call :Pingvorgang %1 %%a
Wenn du beim ping noch ein -w 1 mitgibst gehts noch shcneller (das 1 kansn tdu bei größeren bzw. langsamen netzen auch höher setzen wenn Du meinst):
ping -n 1 -w 1 %1.%2 >>%systemroot%\temp\SubnetWalk\SubnetWalk-Log1.txt
Und als vierter Punkt würde ich in der Hilfe den Beispielbefehlsaufruf nicht mit nem Festen Dateinamen machen sondern den Der Batch benutzen. So kann man di eBatch auch anders nennen und der Aufruf steht dennoch immer richtig in der Hilfe:
Statt
echo SubnetWalk 192.168.0
alsoecho %~n0 192.168.0
miniversum
Bei der Ausführung deines Skripts kommt die Meldung: "if" ist syntaktisch an dieser Stelle nicht verarbeitbar.
Hier ist eine kleinere funktionierende Variante:
Hier ist eine kleinere funktionierende Variante:
@ECHO off
cls
SET ip=192.168.0.
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
)