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
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ Lug-dd maillist - [email protected] https://ssl.schlittermann.de/mailman/listinfo/lug-dd
