import select import socket import threading import random from Queue import Queue, Empty MAGIC_PACKET = "" for i in xrange(50): MAGIC_PACKET += chr(random.randrange(ord('a'),ord('z'))) def get_local_ip(): def udp_listening_server(): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind(('', 8888)) s.setblocking(0) while True: result = select.select([s],[],[]) msg, address = result[0][0].recvfrom(1024) msg = unicode(msg) if msg == MAGIC_PACKET: break queue.put(address) queue = Queue() thread = threading.Thread(target=udp_listening_server) thread.queue = queue thread.start() s2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s2.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) waiting = True while waiting: s2.sendto(bytes(MAGIC_PACKET), ('', 8888)) try: address = queue.get(False) except Empty: pass else: waiting = False return address[0]