#!/usr/bin/python import threading from socket import gethostbyname_ex easyadns_debug = True # Enable/disable debugging messages. # Allow 50 simultaneous lookups _lookup_pool = threading.BoundedSemaphore(value=50) # Ensure data.add() is thread safe _data_lock = threading.Lock() def _lookup(name, data): if easyadns_debug: print "[%s] - Acquiring semaphore..." % name _lookup_pool.acquire() # Acquire semaphore if easyadns_debug: print "[%s] - Doing lookup" % name try: res = gethostbyname_ex(name) # Do lookup except: _lookup_pool.release() return _lookup_pool.release() # Release semaphore _data_lock.acquire() for ip in res[2]: # Add results to dataset data.add(ip) _data_lock.release() if easyadns_debug: print "[%s] - Done" % name data = set() threads = list() for name in open('proxies.txt').readlines(): name = name.strip() if name: t = threading.Thread(target=_lookup, args=(name, data)) t.start() threads.append(t) if easyadns_debug: print "Done starting threads" for t in threads: t.join() # Wait for threads to finish if easyadns_debug: print "Last thread exited"