Thread Broadcastdaten vom Netz holen (IPv4)
(2 answers)
Opened by JoeMiller at 2011-05-11 10:13
Hallo zusammen,
ich versuche, Daten vom Netz zu holen. Diese Daten werden per UDP-Broadcast ins Subnetz gespült. Im tcpdump auf eth0 sieht das so aus: Code: (dl
)
1 11:03:15.885446 IP 10.40.3.5.2000 > 10.40.3.255.2000: UDP, length 1020 Mein Linux-Rechner hat die Adresse 10.40.3.250: Code: (dl
)
1 eth0 Link encap:Ethernet Hardware Adresse 00:19:99:xx:xx:xx mein Perl5.10.0-Ansatz hierzu sieht wie folgt aus: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #!/usr/bin/perl use strict; use warnings; use IO::Socket; my($sock, $nachricht, $maxlen, $portno); my $maxlen=1024; $sock = IO::Socket::INET -> new ( PeerAddr => '10.40.3.255', PeerPort => 2000, # LocalAddr => '10.40.3.250', Broadcast => 1, Proto => 'udp') or die "socket-problem: $@"; while ($sock->recv($nachricht, $MAXLEN)) { print "Message: %0x\n", $nachricht; } close($sock); aber bei $sock->recv wartet das Programm auf Daten und bekommt keine. Mit LocalAddr geht's auch nicht, und es spielt auch keine Rolle ob ich Broadcast=1 angebe oder nicht. Ich bin sicher, dass ich kurz vor der Lösung stehe, aber mal wieder einen kleinen Denkfehler drin hab. Daher bitte ich euch um Hilfe. Wo liegt das Problem? Sobald der Socket Daten empfängt, hab ich übrigens das nächste Problem: Die Daten werden byteweise vertauscht sein. Also statt 0xAABBCCDD werde ich 0xBBAADDCC erhalten. Ich hab früher viel Assembler programmiert, aber im Zusammenhang mit Netzwerken hätte ich diese LittleEndian-/BigEndian-Problematik am wenigsten erwartet... wie auch immer. Kann ich dem socket gleich noch ein unpack("S"...)oder was ähnliches mit auf den Weg geben? Und was passiert, wenn ein Paket eine ungerade Anzahl an Bytes lang ist? Herzlichen Dank schonmal vorab. |