Forum: PC-Programmierung UDP Broadcast mit Boost C++


von Keine A. (karabennemsi)


Lesenswert?

Ich habe ein Gerät im Netzwerk, dass mit UDP auf den Port 23000 und 
Adresse 0.0.0.0 lauscht.

Wenn ich mit boost:asio an die Adresse 0.0.0.0 einen Broadcast schicke, 
kommt dieser nicht an. Wenn ich den Endpoint 
"boost::asio::ip::address_v4::broadcast()" nutze, kommt der Broadcast 
auch nicht an.

Er kommt nur an, wenn ich meine IP-Adresse nehme und die letzte Zahl 
durch 255 ersetze.

Jetzt muss ich irgendwie meine eigene IP-Adresse herausfinden, die Maske 
herausfinden und dass durch die passende Zahl ersetzen (welche 
eigentlich?).

Geht das nicht einfacher? Ebenso finde ich keine Methode, um meine 
eigene IP-Adresse herauszufinden.

von Εrnst B. (ernst)


Lesenswert?

Hier gibt's ein paar Grundlagen:

https://de.wikihow.com/Die-Netzwerk-und-die-Broadcast-Adresse-berechnen


> boost::asio::ip::address_v4::broadcast()
Mit welchen Parametern initialisiert?

Ansonsten, deprecated:

https://www.boost.org/doc/libs/1_82_0/doc/html/boost_asio/reference/ip__network_v4.html

: Bearbeitet durch User
von Andreas M. (amesser)


Lesenswert?

Also bei mir ist 255.255.255.255 der globale Broadcast?

von Keine A. (karabennemsi)


Lesenswert?

Εrnst B. schrieb:
> Ansonsten, deprecated:

Ein UDP Broadcast ist deprecated?

von Εrnst B. (ernst)


Angehängte Dateien:

Lesenswert?

Keine A. schrieb:
> Ein UDP Broadcast ist deprecated?

Nein. die "broadcast()"-Methode von der "address_v4".



Das ist natürlich nicht die Lösung für dein Problem, ich wollte dich nur 
darauf hinweisen. Deshalb hatte ich "Ansonsten:" vorangestellt.

: Bearbeitet durch User
von Falk S. (db8fs)


Lesenswert?

Keine A. schrieb:
> Ich habe ein Gerät im Netzwerk, dass mit UDP auf den Port 23000 und
> Adresse 0.0.0.0 lauscht.

D.h. der Dienst läuft auf dem Gerät quasi auf allen verfügbaren 
Interfaces, wobei jedes Interface in einem unterschiedlichen Sub-Netz 
sein könnte.

> Wenn ich mit boost:asio an die Adresse 0.0.0.0 einen Broadcast schicke,
> kommt dieser nicht an. Wenn ich den Endpoint
> "boost::asio::ip::address_v4::broadcast()" nutze, kommt der Broadcast
> auch nicht an.

Hmm, na ja, wie von den anderen schon erwähnt, Broadcasts schickste 
normalerweise immer an die 255. Bei nem Klasse C-Netz eben an die 
192.168.<subnet>.255. Ansonsten hängts, wie du selber schon geschrieben 
hast, eben von der Netzmaske ab, was dein Broadcast wird.

> Er kommt nur an, wenn ich meine IP-Adresse nehme und die letzte Zahl
> durch 255 ersetze.
>
> Jetzt muss ich irgendwie meine eigene IP-Adresse herausfinden, die Maske
> herausfinden und dass durch die passende Zahl ersetzen (welche
> eigentlich?).

Formulier mal anders, was du eigentlich bezwecken willst. Aktuell 
versteh ich deinen Anwendungsfall so, dass dein einen Broadcast in die 
weite LAN-Welt schicken um zu erkennen, ob das spezifische Gerät up ist 
und der Server-Socket auf Verbindungen wartet?

> Geht das nicht einfacher? Ebenso finde ich keine Methode, um meine
> eigene IP-Adresse herauszufinden.

Wofür brauchste die denn so genau bzw. was versprichst du dir davon?

Angenommen du hast ein WLAN Klasse-C im 179er Netz und dein Server läuft 
aber auf nem Ethernet-Teilnehmer im 178er Netz. Irgendwo dazwischen wird 
dann eine Adressübersetzung gemacht - deine Client-IP hilft dir da doch 
nicht wirklich viel. Wenn die Verbindung zum Server-Socket da ist, ist 
doch gut - wat willste dann damit?

Und mal anders gefragt: wäre es nicht einfacher, beim DHCP deinen Server 
mit fester IP zu registrieren und den Socket abzuklopfen, ob er oben ist 
oder nicht?

von Sebastian W. (wangnick)


Lesenswert?

Keine A. schrieb:
> Ich habe ein Gerät im Netzwerk, dass mit UDP auf den Port 23000 und
> Adresse 0.0.0.0 lauscht.

Das glaube ich nicht. Auf Adresse 0.0.0.0 zu lauschen wäre höchst 
ungewöhnlich. Normalerweise wird die Adresse 0.0.0.0 benutzt, um dem 
Netzwerkstack mitzuteilen, dass auf ALLEN Adressen gelauscht werden 
soll.

LG, Sebastian

von Mario M. (thelonging)


Lesenswert?

Falk S. schrieb:
> Klasse C-Netz

Gibt es seit 30 Jahren nicht mehr. Selbst das Mobilfunk-C-Netz gab es 
länger. 😂

Beitrag #7393196 wurde vom Autor gelöscht.
von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Ich habe auch mal "Brutalo-Broadcasts" per UDP in einem kleinen 
Insel-LAN (nur 3 Teilnehmer) verschickt, weil die beteilgten Zulieferer 
mit den Angaben zu den IP-Adressen terminlich nicht "aus dem Knick" 
kamen und die Zeit drängte.

Dafür habe ich als Zieladresse 255.255.255.255 beutzt und als Ziel-MAC 
auch noch ff:ff:ff:ff:ff:ff.

Hat tadellos funktioniert, jeder konnte es empfangen.

von Keine A. (karabennemsi)


Lesenswert?

Also komme ich zum Schluss, dass ich Anhand meiner Konfiguration der 
IP-Adresse und Netzmaske die Broadcastadresse errechnen kann. Alle Bits 
der Netzmaske die 0 sind, muss ich demnach in der IP-Adresse auf 1 
setzen?

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Keine A. schrieb:
> Also komme ich zum Schluss, dass ich Anhand meiner Konfiguration
> der
> IP-Adresse und Netzmaske die Broadcastadresse errechnen kann. Alle Bits
> der Netzmaske die 0 sind, muss ich demnach in der IP-Adresse auf 1
> setzen?

Ja, aber ...

Die Broadcast-Adresse ist immer die höchste IP-Adresse in dem jeweiligen 
Subnet. Ich habe jedoch die praktische Erfahrung gemacht, dass es nicht 
zuverlässig funktioniert, zumindest nicht bei ESP8266 (in Form von Wemos 
D1 Mini).

Ein Wemos als WLAN-AP gibt sich selbst z.B. die 192.168.4.1 und per DHCP 
an seine Clients die Hostadressen 2..7 (max. 8 Teilnehmer insgesamt). 
Das ist wohl durch die begrenzten Kapazitäten des ESP bedingt. Trotzdem 
reicht er per DHCP eine Subnetzmaske "255.255.255.0" aus, so dass die 
Broadcastadresse eigentlich die 192.168.4.255 sein sollte ...

Funzte (bei mir) aber nicht bzw. extrem unzuverlässig, während die 
Sensordaten mit 255.255.255.255 immer zuverlässig ankommen. Also was 
solls ..

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.