Per Batch ermitteln, welche IPs in deinem Subnetz erreichbar sind
26.07.2007
11:48:31 Uhr18735 Aufrufe
12 Antworten
11:48:31 Uhr
12 Antworten
Hilfreich +2
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):
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):
01.
::* 02.
::* Subnetwalk.bat 03.
::* ============== 04.
::* Pingt alle IP-Adressen eines C-Netzes 05.
::* und listet alle pingbaren Geräte auf 06.
::* 07.
08.
@echo off 09.
cls 10.
11.
::################################################################### 12.
::Start-Aufgaben 13.
14.
::------------------------------------------------------------------- 15.
::Parameter-Abfragen 16.
17.
if "%1%"=="" goto Manual 18.
19.
if "%1%"=="?" goto Manual 20.
21.
if "%1%"=="/?" goto Manual 22.
23.
if "%1%"=="-?" goto Manual 24.
25.
if "%1%"=="-h" goto Manual 26.
27.
if "%1%"=="--h" goto Manual 28.
29.
if "%1%"=="-help" goto Manual 30.
31.
if "%1%"=="--help" goto Manual 32.
33.
if "%1%"=="help" goto Manual 34.
35.
36.
::------------------------------------------------------------------- 37.
::------------------------------------------------------------------- 38.
::Wenn ein Ordner %systemroot%\temp\SubnetWalk existiert, wird dieser gelöscht 39.
if exist %systemroot%\temp\SubnetWalk ( 40.
rmdir /s /q %systemroot%\temp\SubnetWalk 41.
) 42.
43.
::------------------------------------------------------------------- 44.
45.
::------------------------------------------------------------------- 46.
:: Erstelle Ordner für Logfiles 47.
mkdir %systemroot%\temp\SubnetWalk 48.
::Erstelle ein Logfile in diesem Ordner 49.
echo Dieser Ordner wurde vom Batch SubnetWalk.bat erstellt >>%systemroot%\temp\SubnetWalk\SubnetWalk-Readme.txt 50.
echo Dieser Ordner kann gelöscht werden. >>%systemroot%\temp\SubnetWalk\SubnetWalk-Readme.txt 51.
::------------------------------------------------------------------- 52.
::################################################################### 53.
54.
::################################################################### 55.
::Hauptroutine 56.
57.
echo SUBNETWALK.BAT 58.
echo ============= 59.
echo. 60.
echo Das Subnet %1.0 wird durchsucht... 61.
echo Achtung: Dieser Vorgang dauert mehrere Minuten! 62.
echo Schiesst also nicht schon nach 10 Sekunden den Batch ab! 63.
echo. 64.
::------------------------------------------------------------------- 65.
:Schleife 66.
for /l %%a IN (1,1,255) DO call :Pingvorgang %1 %%a 67.
goto Filterung 68.
69.
::------------------------------------------------------------------- 70.
71.
::------------------------------------------------------------------- 72.
:Pingvorgang 73.
ping -n 1 %1.%2 >>%systemroot%\temp\SubnetWalk\SubnetWalk-Log1.txt 74.
if "%2"=="26" ( 75.
echo Subnet %1.0 zu 10 Prozent durchsucht... 76.
) 77.
78.
if "%2"=="52" ( 79.
echo Subnet %1.0 zu 20 Prozent durchsucht... 80.
) 81.
82.
if "%2"=="77" ( 83.
echo Subnet %1.0 zu 30 Prozent durchsucht... 84.
) 85.
86.
if "%2"=="103" ( 87.
echo Subnet %1.0 zu 40 Prozent durchsucht... 88.
) 89.
90.
if "%2"=="128" ( 91.
echo Subnet %1.0 zu 50 Prozent durchsucht... 92.
) 93.
94.
if "%2"=="154" ( 95.
echo Subnet %1.0 zu 60 Prozent durchsucht... 96.
) 97.
98.
if "%2"=="180" ( 99.
echo Subnet %1.0 zu 70 Prozent durchsucht... 100.
) 101.
102.
if "%2"=="205" ( 103.
echo Subnet %1.0 zu 80 Prozent durchsucht... 104.
) 105.
106.
if "%2"=="231" ( 107.
echo Subnet %1.0 zu 90 Prozent durchsucht... 108.
) 109.
110.
goto end 111.
::------------------------------------------------------------------- 112.
113.
::------------------------------------------------------------------- 114.
:Filterung 115.
echo. 116.
echo Subnetz wurde durchsucht. Filtere Ergebnisse... 117.
echo. 118.
type %systemroot%\temp\SubnetWalk\SubnetWalk-Log1.txt | find /i "ttl" >>%systemroot%\temp\SubnetWalk\SubnetWalk-Log2.txt 119.
120.
::Putze überflüssige Zeichen aus jeder Zeile aus 121.
@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 122.
echo Ergebnisse gefiltert! 123.
echo. 124.
echo Folgende IPs im Subnetz %1 sind pingbar: 125.
echo. 126.
type %systemroot%\temp\SubnetWalk\SubnetWalk-Log3.txt 127.
echo. 128.
goto end 129.
::################################################################### 130.
131.
:Manual 132.
echo SUBNETWALK.BAT 133.
echo ============= 134.
echo. 135.
echo Listet die pingbaren Geräte im angegebenen Subnetz auf. 136.
echo Dieser Batch funktioniert nur bei Subnetzen mit einer 24-bittigen Subnetzmaske, 137.
echo d.h. bei C-Class-Netzen (255.255.255.0)! 138.
echo. 139.
echo. 140.
echo Starte Batch folgendermassen: 141.
echo %~n0 Netz-ID 142.
echo. 143.
echo Beispiel: 144.
echo %~n0 192.168.0 145.
echo. 146.
echo. 147.
echo Anmerkung: 148.
echo Eine IP-Adresse besteht immer aus Netz-ID (welche u.a. das Subnetz definiert) 149.
echo und einer Host-ID (welche den entsprechenden Client definiert). 150.
echo Bei einem C-Class-Netz (d.h. einem Netz mit der Subnetzmaske 255.255.255.0) 151.
echo besteht die Netz-ID immer aus den ersten drei Bytes. 152.
echo. 153.
echo Beispiel: 154.
echo Die Netz-ID der IP-Adresse 192.168.0.101 ist in einem C-Netz (d.h. mit der 155.
echo Subnetzmaske 255.255.255.0) 192.168.0 156.
echo. 157.
158.
:end
miniversum schreibt am 26.07.2007 um 14:15:26 Uhr
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. auch Subnetwalk 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
Seltermann schreibt am 08.08.2007 um 17:01:52 Uhr
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:
01.
@ECHO off 02.
03.
cls 04.
05.
SET ip=192.168.0. 06.
SET log=ips.txt 07.
08.
IF EXIST %log% DEL %log% && ECHO Datei wurde gelöscht 09.
IF EXIST %log% NEQ 0 ECHO Datei konnte nicht gelöscht werden! & GOTO :eof 10.
11.
FOR /L %%i IN (0,1,255) DO ( 12.
ping -n 1 -w 5 %ip%%%i|find "TTL=" && ECHO %ip%%%i >> %log% || echo %ip%%%i nicht erreichbar 13.
)
Seltermann schreibt am 10.08.2007 um 11:35:31 Uhr
Es kommt immer noch die gleiche Fehlermeldung!
Seltermann schreibt am 10.08.2007 um 14:45:54 Uhr
Du musst den Batch-Code mit ##red|
## einklammern.
01.
####green|[Batch-Code]####red|
Seltermann schreibt am 11.08.2007 um 22:04:35 Uhr
Oben steht bei dir <nocode> und unten </code>
Das muss aber ##red|
## heißen.
Das muss aber ##red|
01.
####green|[hier steht der Batch-Code]####red|
miniversum schreibt am 12.08.2007 um 10:12:55 Uhr
TuXHunt3R schreibt am 28.07.2008 um 17:55:47 Uhr
Da ich Ferien habe und darum etwas Zeit, habe ich das Ding mal in PowerShell umgeschrieben. Hier ist der Code:
Der Vorteil dieser Version: Es läuft etwas schneller als die Batch-Version und hat eine schicke Fortschrittsanzeige
. Try and have Fun....
01.
# ******************************************* 02.
# * SubnetWalk.ps1 * 03.
# * ============== * 04.
# * Pingt alle IP-Adressen eines C-Netzes * 05.
# * und listet alle pingbaren Geräte auf * 06.
# * History: * 07.
# * TuXHunT3R - 11.06.2007 - New Batch * 08.
# * TuXHunT3R - 28.07.2008 - Recoded in PSL * 09.
# ******************************************* 10.
11.
############################################################################### 12.
# Funktionen: 13.
# =========== 14.
15.
function fcnTitel { 16.
Write-Host " " 17.
Write-Host "________ ______ ________ __ ___________ " -ForegroundColor cyan 18.
write-host "__ ___/___ ____ /_______________ /__ | / /_____ ___ /__ /__" -ForegroundColor cyan 19.
Write-Host "_____ \_ / / /_ __ \_ __ \ _ \ __/_ | /| / /_ __ `/_ /__ //__/" -ForegroundColor cyan 20.
Write-Host "____/ // /_/ /_ /_/ / / / / __/ /_ __ |/ |/ / / /_/ /_ / _ ,< " -ForegroundColor cyan 21.
Write-Host "/____/ \__,_/ /_.___//_/ /_/\___/\__/ ____/|__/ \__,_/ /_/ /_/|_| " -ForegroundColor cyan 22.
Write-Host " " 23.
Write-Host "Coded 2007 as Windows Batch, " 24.
Write-Host "recoded in PowerShell Scripting Language @ the 28.07.2008" 25.
Write-Host "-------------------------------------------------------------------------" -ForegroundColor cyan 26.
Write-Host " " 27.
write-host " " 28.
} 29.
30.
function fcnFusszeile { 31.
Write-Host " " 32.
Write-Host " " 33.
Write-Host "-------------------------------------------------------------------------" -ForegroundColor cyan 34.
Write-Host "by TuXHunT3R" 35.
Write-Host " " 36.
} 37.
38.
function fcnManual { 39.
fcnTitel 40.
write-host "Listet die pingbaren Geräte im angegebenen Subnetz auf. " 41.
write-host "Dieses Script funktioniert nur bei Subnetzen mit einer 24-bittigen Subnetzmaske," 42.
write-host "d.h. bei C-Class-Netzen (255.255.255.0)!" 43.
Write-Host " " 44.
Write-Host " " 45.
write-host "Starte Batch folgendermassen:" 46.
write-host "SubnetWalk NetzID" 47.
Write-Host " " 48.
write-host "Beispiel:" 49.
write-host "SubnetWalk 192.168.0" 50.
Write-Host " " 51.
Write-Host " " 52.
write-host "Anmerkung:" 53.
write-host "Eine IP-Adresse besteht immer aus Netz-ID (welche u.a. das Subnetz definiert)" 54.
write-host "und einer Host-ID (welche den entsprechenden Client definiert)." 55.
write-host "Bei einem C-Class-Netz (d.h. einem Netz mit der Subnetzmaske 255.255.255.0)" 56.
write-host "besteht die Netz-ID immer aus den ersten drei Bytes." 57.
Write-Host " " 58.
write-host "Beispiel:" 59.
write-host "Die Netz-ID der IP-Adresse 192.168.0.101 ist in einem C-Netz (d.h. mit der" 60.
write-host "Subnetzmaske 255.255.255.0) 192.168.0" 61.
fcnFusszeile 62.
} 63.
# 64.
# 65.
############################################################################### 66.
67.
Clear-Host 68.
69.
$NetzID = $Args[0] 70.
71.
switch ($NetzID) { 72.
"" {fcnManual} 73.
"?" {fcnManual} 74.
"/?" {fcnManual} 75.
"-?" {fcnManual} 76.
"-h" {fcnManual} 77.
"--h" {fcnManual} 78.
"-help" {fcnManual} 79.
"--help" {fcnManual} 80.
"help" {fcnManual} 81.
default{ 82.
Write-Host " " 83.
Write-Host " " 84.
Write-Host " " 85.
Write-Host " " 86.
Write-Host " " 87.
Write-Host " " 88.
Write-Host " " 89.
fcnTitel 90.
Remove-Item $env:temp\SubnetWalk.log -force | Out-Null 91.
$Gestartet = Get-Date -Format G 92.
for ($zaehler=1; $zaehler -lt 255; $zaehler++) { 93.
$address= $NetzID + "." + $zaehler 94.
$ping = get-wmiobject win32_pingstatus -filter "Address='$address'" 95.
if ($ping.statuscode -eq "0") { 96.
$ping.ProtocolAddress | Out-File -FilePath $env:temp\SubnetWalk.log -Encoding default -Append 97.
} 98.
$PercentComplete = (100/254)*$zaehler 99.
Write-Progress -activity "Scan des Subnetz $NetzID.XXX" -Status "$zaehler/254" -PercentComplete $PercentComplete 100.
} 101.
$Beendet = Get-Date -Format G 102.
Write-Host "Pingbare IP-Adressen im Subnetz $NetzID.XXX" 103.
Write-Host "==============================================" 104.
Write-Host "Gestartet: $Gestartet" 105.
write-host "Beendet: $Beendet" 106.
Write-Host " " 107.
Get-Content $env:temp\SubnetWalk.log 108.
#Remove-Item $env:temp\SubnetWalk.log -force 109.
fcnFusszeile 110.
} 111.
} 112.
Der Vorteil dieser Version: Es läuft etwas schneller als die Batch-Version und hat eine schicke Fortschrittsanzeige










