I'm have problems figuring out how to receive UDP broadcast packets on Linux.
Here's the receiving code: ------------------------------receive.py------------------------------- #!/usr/bin/python import socket host = '' port = 5010 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) s.bind((host, port)) while 1: try: message = s.recv(8192) print "Got data: %s" % repr(message) except KeyboardInterrupt: break ---------------------------------------------------------------------- Here's the sending code: --------------------------------send.py------------------------------- #!/usr/bin/python import sys,socket,time host = sys.argv[1] port = 5010 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) s.bind((host,port)) s.sendto(str(time.time()), ('255.255.255.255', port)) ---------------------------------------------------------------------- On the receiving machine, I've used tcpdump to verify that broadcast packets are being seen and have a destination IP of 255.255.255.255 and destination MAC of ff:ff:ff:ff:ff:ff 03:05:09.187327 IP 10.0.0.1.5010 > 255.255.255.255.5010: UDP, length 13 0x0000: ffff ffff ffff 0018 e708 2033 0800 4500 0x0010: 0029 0000 4000 4011 30c4 0a00 0001 ffff 0x0020: ffff 1392 1392 0015 6e6e 3133 3033 3235 0x0030: 3131 3830 2e34 3500 0000 03:05:09.407508 IP 10.0.0.1.5010 > 255.255.255.255.5010: UDP, length 13 0x0000: ffff ffff ffff 0018 e708 2033 0800 4500 0x0010: 0029 0000 4000 4011 30c4 0a00 0001 ffff 0x0020: ffff 1392 1392 0015 6c6c 3133 3033 3235 0x0030: 3131 3830 2e36 3700 0000 03:05:09.615962 IP 10.0.0.1.5010 > 255.255.255.255.5010: UDP, length 13 0x0000: ffff ffff ffff 0018 e708 2033 0800 4500 0x0010: 0029 0000 4000 4011 30c4 0a00 0001 ffff 0x0020: ffff 1392 1392 0015 6b6a 3133 3033 3235 0x0030: 3131 3830 2e38 3800 0000 But, the receiving Python program never sees any packets unless the _source_ IP address in the packets is on the same subnet as the receiving machine. In this test case, the receiving machine has an IP address of 172.16.12.34/16. If I change the receiving machine's IP address to 10.0.0.123, then the receiving program sees the packets. Even though the destination address is 255.255.255.255, the receiving machine appears to discard the packets based on the _source_ IP. Can anybody provide example Python code for Linux that receives UDP broadcast packets regardless of their source IP address? This probably is more of a Linux networking question than a Python question, but I'm hoping somebody has solved this problem in Python. -- Grant Edwards grant.b.edwards Yow! I want my nose in at lights! gmail.com -- http://mail.python.org/mailman/listinfo/python-list