Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: format-c

format-c (Level 1) - Jetzt verbinden

18.06.2013, aktualisiert 19.06.2013, 5287 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
Ähnliche Inhalte
Datenschutz

Tracking-Skripte klauen E-Mail-Adressen aus Web-Browsern

Tipp von magicteddyDatenschutz3 Kommentare

Wieder ein Grund mehr dafür Scripte erstmal grundsätzlich zu verbieten. -teddy

MikroTik RouterOS

Mikrotik Skript: E-Mail Benachrichtigung über neue MAC-Adressen im Netzwerk

Tipp von colinardoMikroTik RouterOS5 Kommentare

Servus Kollegen, hatte vor kurzem einen Kunden der folgendes Anliegen hatte: Es sollte über jede neu auftauchende MAC-Adresse für ...

Batch & Shell

Kleines Treesize Bash Skript

Tipp von MKLindnerBatch & Shell1 Kommentar

Ich Gebe euch mal ein kleines Bash Skript: Vielleicht Hilft es jemandem Viel Spass damit

Router & Routing

192.168er Adresse im öffentlichen Netz

Erfahrungsbericht von visco-cRouter & Routing8 Kommentare

Hallo, eher rein zufällig habe ich in der log-Datei meiner Firewall entdeckt, dass eine 192.168er Adresse von außen über ...

Neue Wissensbeiträge
Internet

Europa baut Zensurinfrastruktur auf: EU-Parlament stimmt für Upload-Filter, Leistungsschutzrecht und gegen KI-Forschung

Information von Frank vor 2 TagenInternet9 Kommentare

Eine sehr schlechte Entscheidungen für die Zukunft Europas ist gefallen: Der Rechtsausschuss im EU-Parlament stimmte heute morgen in einer ...

Windows 10

Mikrofon von Headset geht nach Update auf Windows 10 1803 nicht mehr

Tipp von Deepsys vor 4 TagenWindows 102 Kommentare

Ich verwende ein Plantronics Headset das per USB mit dem Windows 10 PC verbunden ist. Damit kann ich auch ...

Video & Streaming

Ruckelfreies Fernsehen auf Smartphone oder Tablet - in SD oder gar HD - Eine Alternative zum Fritz DVB-C Receiver

Anleitung von power-user vor 4 TagenVideo & Streaming9 Kommentare

Wer kennt das nicht: Man möchte gemütlich auf dem Balkon sitzen und vielleicht grillen und dabei das WM-Spiel gucken ...

Erkennung und -Abwehr
Trendmicro WFBS 10 ist in deutsch verfügbar!
Tipp von VGem-e vor 5 TagenErkennung und -Abwehr4 Kommentare

Servus Kollegen, downloadbar unter

Heiß diskutierte Inhalte
LAN, WAN, Wireless
WLAN-Übersicht wie FritzWLAN jedoch für PC gesucht
gelöst Frage von HenereLAN, WAN, Wireless16 Kommentare

Servus, ich suche für einen Windows PC eine Anwendung die so ähnlich wie die FritzWLAN App auf dem Smartphone ...

Netzwerke
Netzwerkkommunikation von Windows 10 aus Freigabe mit Windows XP funktioniert nicht
gelöst Frage von KLinnebankNetzwerke14 Kommentare

Hallo werte Gemeinde, ja, es ist Freitag. Aber das ist KEINE Freitagsfrage Ich habe ein für mich völlig wirres ...

Festplatten, SSD, Raid
Server Architektur mit RAID 5 - wozu interne Platten?
Frage von Pierre78Festplatten, SSD, Raid10 Kommentare

Hallo, ich beschäftige mich gerade mit RAID Systemen. Ich habe mir einen gebrauchten Dell PowerEdge R515 gekauft. Dieser hat ...

Samba
Netzlaufwerk über VPN hat Probleme
Frage von geocastSamba8 Kommentare

Hallo Zusammen Ich habe hier ein QNAP TS-269 Pro (aktuellste Firmware) NAS in einem entfernten Standort, der über VPN ...