Seite 1 von 1
Broadcast ins Netzwerk?
Verfasst: Dienstag 5. Dezember 2006, 21:01
von lunar
Hallo Forum,
ich versuche gerade ein kleines Chatprogramm fürs lokale Netz zu implementieren. Das Ganze soll auf UDP basieren. Gerade spiele ich noch mit den Möglichkeiten der Python Bibliothek. Bis jetzt hat alles geklappt, nur eins bereitet mir Kopfzerbrechen:
Ich möchte beim Start des Programmes halt eine Liste aller gerade verfügbaren Rechner (mit laufendem Chatprogramm) anzeigen, aus welcher der User dann nur noch den richtigen auswählen muss. Wie erhalte ich also eine Liste aller Rechner im lokalen Netz?
Der Server sieht dabei in etwa so aus:
Code: Alles auswählen
from SocketServer import UDPServer, BaseRequestHandler
class Handler(BaseRequestHandler):
def handle(self):
print 'received:', self.request, 'from', self.client_address
addr = ('192.168.2.24', 5555)
print 'listening on %s:%s' % addr
server = UDPServer(addr, Handler)
server.serve_forever()
Ich habe versucht, Pakete an die Broadcast Adresse 255.255.255.255 zu senden:
Code: Alles auswählen
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, True)
s.sendto('hallo', ('255.255.255.255', 5555)
s.close()
Allerdings scheint der UDP Server auf der Gegenseite diese zu ignorieren, d.h. er zeigt auf ein solches Paket keinerlei Ausgabe.
Welche Möglichkeiten gibt es noch, bzw. was mache ich falsch?
Ach ja, ich sollte noch hinzufügen, dass ich von Netzwerkprogrammierung wenig bis gar keine Ahnung habe
Danke
lunar
Re: Broadcast ins Netzwerk?
Verfasst: Dienstag 5. Dezember 2006, 21:43
von gerold
lunar hat geschrieben:Allerdings scheint der UDP Server auf der Gegenseite diese zu ignorieren, d.h. er zeigt auf ein solches Paket keinerlei Ausgabe.
Hi lunar!
Du hast einfach nur die falsche Broadcast-Adresse angegeben.
Diese hängt meist von der Netzwerkmaske ab. Wahrscheinlich hast du die Maske "255.255.255.0" gesetzt.
mfg
Gerold

Re: Broadcast ins Netzwerk?
Verfasst: Dienstag 5. Dezember 2006, 22:16
von lunar
gerold hat geschrieben:
Du hast einfach nur die falsche Broadcast-Adresse angegeben.
Diese hängt meist von der Netzwerkmaske ab. Wahrscheinlich hast du die Maske "255.255.255.0" gesetzt.
Mmmh, also 255.255.255.255 ist doch eigentlich die "Universal"-Broadcast Adresse für Pakete ins eigene LAN, oder? Zumindest habe ich das so verstanden, aber - wie gesagt - ich habe nicht so wirklich viel Ahnung von Netzwerkprogrammierung...
Anyway, ich probiere das morgen Nachmittag mal aus. Jetzt ist's schon ein bisschen spät...
Verfasst: Mittwoch 6. Dezember 2006, 14:05
von lunar
Mmmh, sehr strange
Ich habe deinen Tipp mal befolgt und das Paket an 192.168.2.255 gesendet. Trotzdem wird es von Server nicht bemerkt. Das Paket wird definitiv gesendet, ich habe den Traffic mit wireshark "gesnifft".
Das ganze scheint auch kein generelles Problem zu sein, da andere UDP Broadcasts wunderbar funktionieren. Getestet habe ich das mittels "nmblookup". Damit wird ein Broadcast zur NETBios Namensauflösung gesendet.
Ich habe das Gefühl, dass das am Server liegt. Muss ich dem Server vielleicht irgendeine spezielle Option mit auf den Weg geben? Oder liegt der Fehler doch beim Code fürs Senden? Ich bin ratlos
Danke für eure Hilfe
lunar
Verfasst: Mittwoch 6. Dezember 2006, 14:40
von lunar
Ah, ich hab das Problem gelöst
Mein Fehler war, dass der Server explizit auf '192.168.2.24' gelauscht hat. Offenbar werden dadurch Broadcasts ignoriert. Erzeugt man den Server dagegen mit folgendem Code,
Code: Alles auswählen
addr = ('', 5555) # '' steht für INADDR_ANY
server = UDPServer(addr, Handler)
dann werden auch Broadcast Pakete erkannt.
Man sollte die Dokumentation eben genauer lesen
Gruß
lunar
Verfasst: Freitag 8. Dezember 2006, 09:34
von Blattlaus
Nichts desto trotz hängt die Korrekte Broadcast-Adresse von IP und Subnetzmaske ab. Die BC-Adresse kann 192.168.11.255 sind, aber genau so gut 10.255.255.255 oder 192.168.99.128.
Eine entsprechende erkennung musst du implementieren

Verfasst: Samstag 9. Dezember 2006, 12:07
von lunar
Blattlaus hat geschrieben:Nichts desto trotz hängt die Korrekte Broadcast-Adresse von IP und Subnetzmaske ab.
Ja, das bestreite ich ja auch gar nicht...
Mein Problem war nicht, dass ich die falsche BC Adresse genommen habe, sondern dass der Server trotz korrekter BC-Adresse beim Senden keine BC Paket empfangen hat...
Blattlaus hat geschrieben:Die BC-Adresse kann 192.168.11.255 sind, aber genau so gut 10.255.255.255 oder 192.168.99.128.
Eine entsprechende erkennung musst du implementieren

Da komme ich nicht mit...
Beim Server muss ich doch überhaupt nichts erkennen. Es reicht mir, wenn ich Broadcast Pakete empfange, was beim ersten Versuch nicht der Fall war...
Ob Paket nun an die Broadcast Adresse oder direkt an meine IP gerichtet war, ist für meine Zwecke völlig egal. Wichtig ist für mich nur der Inhalt des Pakets und die Quell-IP. Mehr nicht...
Beim Senden reicht es, wenn man statt einer IP den String "<broadcast>" angibt. Dann geht das Paket an die Broadcast-Adresse.
Wo muss ich da jetzt was erkennen?
Tia
lunar
Verfasst: Samstag 9. Dezember 2006, 14:52
von gerold
lunar hat geschrieben:Da komme ich nicht mit...
Hi lunar!
- Start --> Ausführen --> cmd
- IPCONFIG
Poste hier doch mal die Ausgabe von ``ipconfig``.
mfg
Gerold

Verfasst: Samstag 9. Dezember 2006, 15:04
von lunar
gerold hat geschrieben:lunar hat geschrieben:Da komme ich nicht mit...
- Start --> Ausführen --> cmd
- IPCONFIG
Poste hier doch mal die Ausgabe von ``ipconfig``.
Unmöglich, da Linux User
Deshalb:
Code: Alles auswählen
[lunar@nargond]-[15:00:31] >> ~
--> ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:07:e9:55:31:3c brd ff:ff:ff:ff:ff:ff
inet 192.168.2.24/24 brd 192.168.2.255 scope global eth0
inet6 fe80::207:e9ff:fe55:313c/64 scope link
valid_lft forever preferred_lft forever
Meine Broadcast Adresse lautet folglich 192.168.2.255.
Aber wo ist denn eigentlich das Problem. Es geht doch jetzt

Verfasst: Samstag 9. Dezember 2006, 15:20
von gerold
Hi Lunar!
lunar hat geschrieben:Unmöglich, da Linux User

Sehr positiv!
lunar hat geschrieben:Meine Broadcast Adresse lautet folglich 192.168.2.255.
Aber wo ist denn eigentlich das Problem. Es geht doch jetzt

Das Problem ist, dass du mein Verständnis von Broadcast durcheinander geworfen hast.
Wenn der
Server auf ``192.168.2.24`` horcht, dann müsste er die Signale, die der Client an
``192.168.2.255`` sowie an ``255.255.255.255`` sendet, abfangen können.
Bei dir hat das aber anscheinend nicht funktioniert. Erst als du den Server auf ```` umgestellt hast. Das ist es, was ich nicht kapiere.
mfg
Gerold
