Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Broadcast-Adresse per Batch-Skript in Windows

Tipp Microsoft Windows Netzwerk

Mitglied: format-c

format-c (Level 1) - Jetzt verbinden

18.06.2013, aktualisiert 19.06.2013, 4741 Aufrufe, 1 Danke

Wie bekommt man die Broadcast-Adresse für ein Subnetz mit Hilfe nur des CMD-Befehlsprozessors raus.

Hallo allerseits.

Neulich hatte ich das Problem, dass ich die Broadcast-Adresse in meinem IP-Netzwerk (mit Windows) ermitteln musste. Was daraus geworden ist, würde ich gerne mit euch teilen.

Um die Broadcast-Adresse herauszufinden, gibt es mehrere Möglichkeiten; sie unterscheiden sich in ihrer Zuverlässigkeit in Abhängigkeit von der Windows-Version und der Anzahl der Netzwerkadapter eines PCs, also in ihrer Portabilität zwischen unterschiedlichen Rechnern.

Nun, im einfachsten Fall kann man die Broadcast-Adresse aus der ARP-Tabelle auslesen. Wir suchen in der ARP-Tabelle nach Einträgen, die die Ethernet Broadcast-Adresse enthalten und streichen daraus die globale Broadcast-Adresse. Mit einer Zeile hat man bereits das gewünschte Ergebnis.
for /f %a in ('arp -a ^| find /I "ff-ff-ff-ff-ff-ff" ^| find /V "255.255.255.255"') do @echo %a
Das funktioniert solange gut, wie man nur eine einzige Netzwerkkarte hat. D.h., wenn man z.B. einen virtuellen Netzwerkadapter oder einfach LAN und WLAN hat, bekommt man mehrere (meistens unterschiedliche) Broadcast-Adressen.
Das Gute an dieser Methode ist lediglich, dass sie unter XP genauso gut wie unter Windows 8 funktioniert — vermutlich sogar unter Windows NT.

Wenn es uns also nicht gelingt, die Broadcast-Adresse in fertiger Form auf einmal irgendwo auszulesen, müssen wir sie selbst berechnen. Dazu werden eine IP-Adresse (z.B. die eigene) und die zugehörige Subnetzmaske benötigt. Also, machen wir uns auf die Suche.

Ab Windows Vista bietet sich die Möglichkeit an, die IP-Konfiguration aus der netshell auszulesen. Mit
netsh interface ipv4 show addresses <Index-Nr.>
bekommt man die IP-Konfiguration für einen konkreten Netzwerkadapter. Allerdings muss man dafür vorher die Indexnummer dieses Netzwerkadapters ermitteln, wofür sich die Routingtabelle anbieten würde:
netsh interface ipv4 show route
Hier muss man wieder tricksen, um die Nummer des gewünschten Netzwerkadapters zu isolieren. Z.B. mit
for /f "tokens=5" %i in ('netsh interface ipv4 show route ^| find "0.0.0.0/0"') do @echo %i
Wie gesagt, diese Variante funktioniert unabhängig von der Anzahl der Netzwerkadapter — aber leider nicht unter XP (abwärts), weil die netshell dort eine komlett andere Syntax hat.

Eine weitere Methode ist sowohl von der Windows-Version, als auch von der Anzahl der Netzwerkadapter unabhängig, dafür aber etwas umständlicher.
Wir versuchen nun die IP-Konfiguration aus der Ausgabe des Befehls ipconfig auszulesen. Dieser Befehl funktioniert ab Windows NT (aufwärts), also auf so ziemlich allen Windows-Versionen; es bleibt nur noch das Problem mit mehreren Netzwerkadaptern in den Griff zu bekommen. Hier kommt mein Vorschlag: Als Anhaltspunkt benötigt man eine zuverlässige Aussage über die IP-Adresse des Rechners. Diese lässt sich aus ipconfig leider nicht ableiten, dafür aber aus dem ping-Befehl. Mit
for /f "tokens=2 delims=[]" %a in ('ping -n 1 -4 %COMPUTERNAME% ^| find /I "%COMPUTERNAME%"') do @echo %a
ist das schnell erledigt. Nun nutzen wir die Tatsache aus, dass in der Ausgabe des ipconfig-Befehls die Subnetzmaske unmittelbar (in der nächsten Zeile) nach der IP-Adresse des Netzwerkadapters, der uns interessiert, steht. Wir fitern die Ausgabe nach der IP-Adresse und der Zeichenkette "Subnet" ("Subnet" wegen der Gemeinsamkeit mit englischen u.a. Windows-Versionen).
ipconfig | findstr "<meineIP-Adresse> Subnet"
Im Ergebnis haben wir dann eine IP-Adresse und (mehrere) Subnetzmaske(n). Diejenige, die unmittelbar nach der IP-Adresse kommt, ist "unser Klient". Hier ist mir bisher nichts Besseres als eine Lösung mit einer Art Semaphor eingefallen.
01.
SETLOCAL EnableDelayedExpansion 
02.
 
03.
REM # IP-Adresse holen 
04.
for /f "tokens=2 delims=[]" %%a in ('ping -n 1 -4 %COMPUTERNAME% ^| find /I "%COMPUTERNAME%"') do set ip_adresse=%%a 
05.
 
06.
for /f "tokens=2 delims=:" %%A in ('ipconfig ^| findstr "%ip_adresse% Subnet"') do ( 
07.
	REM # IP-Adresse bereinigen (Leerzeichen entfernen) und in einer  
08.
	REM # temporären Variable speichern 
09.
	for /f %%a in ("%%A") do set gefunden=%%a 
10.
	REM # Die Subnetzmaske soll nur dann ausgelesen werden, wenn sie 
11.
	REM # unmittelbar auf die "richtige" IP-Adresse folgt, 
12.
	REM # ansonsten wird sie verworfen. 
13.
	IF '!gefunden!'=='%ip_adresse%' ( 
14.
		set flag=1 
15.
	) ELSE ( 
16.
		IF '!flag!'=='1' ( 
17.
			set subnetz_ip=!gefunden! 
18.
			set flag= 
19.
20.
21.
22.
set gefunden=
Jetzt haben wir, was wir brauchen, und können uns der Berechnung der Broadcast-Adresse widmen. Dazu müssen wir sowohl die IP-Adresse, als auch die Subnetzmaske in einzelne Oktette zerlegen.
01.
for /f "tokens=1-4 delims=." %%A in ("%ip_adresse%") do ( 
02.
	set /A ip_adresse0=%%A 
03.
	set /A ip_adresse1=%%B 
04.
	set /A ip_adresse2=%%C 
05.
	set /A ip_adresse3=%%D 
06.
07.
for /f "tokens=1-4 delims=." %%A in ("%subnetz_ip%") do ( 
08.
	set /A subnetz_ip0=%%A 
09.
	set /A subnetz_ip1=%%B 
10.
	set /A subnetz_ip2=%%C 
11.
	set /A subnetz_ip3=%%D 
12.
)
Die Broadcast-Adresse besteht bekanntlich aus einer Netz-ID und einer Host-ID, bei der alle Bits auf 1 gesetzt sind. Wir invertieren die Subnetzmaske bitweise und bekommen dann ein Bitmuster, bei dem alle Host-Bits Einser sind. Das geht am einfachsten mit dem XOR-Operator.
01.
REM (subnetz_ip) XOR (255.255.255.255) 
02.
set /A inv_subnetz0=%subnetz_ip0%^^255 
03.
set /A inv_subnetz1=%subnetz_ip1%^^255 
04.
set /A inv_subnetz2=%subnetz_ip2%^^255 
05.
set /A inv_subnetz3=%subnetz_ip3%^^255 
06.
@echo Invertierte Subnetzmaske: %inv_subnetz0%.%inv_subnetz1%.%inv_subnetz2%.%inv_subnetz3%
Jetzt bleibt uns nur, alle Host-Bits der IP-Adresse auf "1" zu setzen. Dazu nehmen wir den OR-Operator.
01.
REM (ip_adresse) OR (inv_subnetz) 
02.
set /A broadcast0=%ip_adresse0%^|%inv_subnetz0% 
03.
set /A broadcast1=%ip_adresse1%^|%inv_subnetz1% 
04.
set /A broadcast2=%ip_adresse2%^|%inv_subnetz2% 
05.
set /A broadcast3=%ip_adresse3%^|%inv_subnetz3% 
06.
@echo Broadcast-Adresse: %broadcast0%.%broadcast1%.%broadcast2%.%broadcast3%
Oder man erledigt beides in einem Schritt und spart sich unnötige Umgebungsvariablen.
01.
REM ((subnetz_ip) XOR (255.255.255.255)) OR (ip_adresse) 
02.
set /A broadcast0=%subnetz_ip0%^^255^|%ip_adresse0% 
03.
set /A broadcast1=%subnetz_ip1%^^255^|%ip_adresse1% 
04.
set /A broadcast2=%subnetz_ip2%^^255^|%ip_adresse2% 
05.
set /A broadcast3=%subnetz_ip3%^^255^|%ip_adresse3% 
06.
@echo Broadcast-Adresse: %broadcast0%.%broadcast1%.%broadcast2%.%broadcast3%
Fertsch!

Ich war etwas erstaunt, als ich gesehen habe, das das mit einem bloßen Batch-Skript möglich ist.


Wer anstatt der Broadcast-Adresse die Netz-ID benötigt, kann das mit dem AND-Operator erledigen:
01.
REM (ip_adresse) AND (subnetz_ip) 
02.
set /A netz_id0=%ip_adresse0%^&%subnetz_ip0% 
03.
set /A netz_id1=%ip_adresse1%^&%subnetz_ip1% 
04.
set /A netz_id2=%ip_adresse2%^&%subnetz_ip2% 
05.
set /A netz_id3=%ip_adresse3%^&%subnetz_ip3% 
06.
@echo Netz-ID: %netz_id0%.%netz_id1%.%netz_id2%.%netz_id3%

Grüße
format-c
Neuester Wissensbeitrag
Festplatten, SSD, Raid

12TB written pro SSD in 2 Jahren mit RAID5 auf Hyper-VServer

Erfahrungsbericht von Lochkartenstanzer zum Thema Festplatten, SSD, Raid ...

Ähnliche Inhalte
Windows 7
gelöst Batch-Skript oder VBS Skript zum Sichern von Office Vorlagen (2)

Frage von Ceejaay zum Thema Windows 7 ...

Batch & Shell
gelöst Batch-Skript für Druckerzuweisung auf Terminalserver - Variablenproblem (3)

Frage von BirdyB zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch-Skript: Messdaten in Textdatei finden und in eine neue Datei schreiben (5)

Frage von habmalnefrage zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...