On Friday 28 August 2009, Marcus Obst wrote:
> bisher habe ich (anscheinend) in dem Irrglauben gelebt, dass IP-Pakete
> (UDP, ICMP), wenn man sie an die ,,Broadcast''-Adresse 255.255.255.255
> schickt, auf *ALLEN* physikalischen Netzwerkkarten ausgesendet werden...
>
> Dem scheint allerdings bei genauem hinschauen nicht so zu sein.

Korrekt. 255.255.255.255 ist der Link-Level-Broadcast bei IPv4. Das bedeutet 
der Rechner hat keine Ahnung auf welcher Karte er das Paket rausschicken 
soll. Du musst es ihm sagen.

> Das ,,Broadcast''-Paket kommt unter Linux im besten Falle auf einem der
> verfügbaren Interface heraus.  Hat man keine Default-Route oder
> womöglich 255.255.255.255 nicht direkt in der Routing-Tabelle
> eingetragen, wird das Paket gar nicht versendet und man bekommt
> ,,Network unreachable''.

Woher soll er auch wissen was Du willst?

> (Im Prinzip ist das ja auch logisch, wenn nix in der Rouring-Tabelle
> steht, weiß er auch nicht wohin damit)
>
> Aber irgendwie habe ich mir bisher eingebildet das soetwas ginge?
>
> So wie es aussieht, gibt es also unter Linux keine einfache/automatische
> Möglichkeit ein Pakete auf allen n-Interfacen auszusenden (es sei den
> man sendet es n-mal per Hand).

Du musst auf jedes Interface einzeln senden.


> (Auch wenn es fast Off-Topic ist, unter Windows scheint das ganze anders
> gelöst zu sein.  Dort existiert per Default eine 255.255.255.255-Route
> für jedes Network-Device und der IP-Stack scheint auch dafür zu sorgen,
> dass ein Broadcast-Paket dann auf allen Geräten gesendet wird)

Windows-Routing ist ja auch ein Trauerspiel. Die Jungens in Redmond lesen 
die Standards, verstehen sie nicht, fragen niemand, implementieren 
irgendwas...

> Hat jemand da andere Erfahrungen gemacht, kann man vielleicht in /proc
> oder /sys etwas einstellen?

Nicht direkt Erfahrung, aber eine kurze Suche in den Man-Pages erzielt 
folgende Empfehlungen:

man 2 bind
man 2 socket
man 2 setsockopt
man 7 socket (insb. SO_BINDTODEVICE, SO_BROADCAST)

Bei Ping sind das die -b und -I Optionen.

Ganz nebenbei: wieso willst du auf general Broadcast arbeiten? Ich kenne 
nicht allzu viele Szenarien in denen das sinnvoll ist.

Und Tipp: falls es eine lokale Service-Discovery ist: arbeite doch gleich 
mit IPv6, da kannst Du Dir einen Link-Local-Multicast (ff02::...) 
reservieren und kannst viel freier arbeiten als bei IPv4.


        Konrad

Attachment: signature.asc
Description: This is a digitally signed message part.

_______________________________________________
Lug-dd maillist  -  [email protected]
https://ssl.schlittermann.de/mailman/listinfo/lug-dd

Antwort per Email an