Ich habe eine Ubuntu Virtual Machine, die UDP-Broadcast-Pakete abhört, die vom Host-Rechner generiert werden. Wenn ich mit der Methode socket.bind von python an eine meiner Netzwerkschnittstellen eth1 oder lo (local loopback) binde, erhalte ich keine Pakete. Wenn ich jedoch mit '' (das Symbol für alle Schnittstellen) binde, ist alles in Ordnung. Ich würde erwarten, dass es möglich ist, nur an die Adresse von eth1 zu binden, aber das scheint nicht der Fall zu sein. Könnte jemand erklären, warum das '' benötigt wird? Gibt es etwas Unkonventionelles, weil ich eine virtuelle Maschine benutze? Ich verwende ein Bridged-Netzwerk-Setup, sodass die virtuelle Maschine wie eine andere Maschine in meinem LAN aussieht. Hier ist der Code:Empfangen von UDP-Broadcast [VirtualBox, Ubuntu, Python]
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
# using the '' address works
sock.bind(('', UDP_PORT))
# using the address of eth1 doesn't
#sock.bind(('192.168.2.123', UDP_PORT))
# and neither does using the local loopback
#sock.bind(('127.0.0.1', UDP_PORT))
while True:
data, addr = sock.recv(2048)
print data
was ist '127.0.0.1'? – dav1d
127.0.0.1 funktioniert auch nicht. Aus irgendeinem Grund muss es die Adresse sein, die ich nicht verstehe. Ich werde meinen Code ändern, um ein bisschen klarer zu sein. – user975326