Windows 2003 Shell Scripting

Shell Scripting im Netzwerk

Netzwerkadresse berechnen

Dieses Script ist aus reiner Faulheit entstanden. In diesem Fall benötigten wir für eine IP-Adresse im Dialogfeld der TCP/IP-Eigenschaften schnell den Netzwerkanteil. Leider finden sich im Dialogfeld nur die IP-Adresse und die Subnet-Maske. Dieses Script nimmt Ihnen in Zukunft die Rechnerei ab und ist gleichzeitig ein gutes Beispiel für den sinnvollen Einsatz von set /a.

Parameter

  • %1 = IP-Adresse in dezimaler Punktnotation

  • %2 = Subnetzmaske in dezimaler Punktnotation

Code

@echo off
if !%1 == ! goto noparm
if !%2 == ! goto noparm
setlocal
:: das for-Kommando ist eine Zeile!
for /F "delims=. tokens=1,2,3,4" %%f in ("%1") do for /F
"delims=. tokens=1,2,3,4" %%m in ("%2") do call :doByte
%%f %%g %%h %%i %%m %%n %%o %%p
::
goto :eof

:noparm
echo Calculate network address from ip and subnet mask
echo.
echo Usage: %0 [ipaddr] [netmask]
echo.
echo Either [ipaddr] or [netmask] is missing ....
goto :eof

:doByte
set /A byte="%1 & %5"
set net=%byte%
set /A byte="%2 & %6"
set net=%net%.%byte%
set /A byte="%3 & %7"
set net=%net%.%byte%
set /A byte="%4 & %8"
set net=%net%.%byte%
echo Network address = %net%
endlocal

Funktion

Aufruf beispielsweise mit

getnetwork.bat72.31.168.10 255.255.240.0

Die Ausgabe Network address = 172.31.160.0 liefert dann die Netzwerkadresse für eine bestimmte IP anhand der Subnetmaske.

Die Funktion des Scripts selbst ist eigentlich nur eine einzige Demonstration der Nutzung von set für die Arbeit mit Bitoperatoren. Dazu werden die beiden Parameter anhand des Trennzeichens "." mit zwei for-Schleifen in die einzelnen Bytes aufgeteilt. Diese werden dann ab der Sprungmarke :doByte logisch UND-verknüpft, um die Netzwerkadresse zu erhalten.