minor update for DNSServer support

This commit is contained in:
Miroslav Stampar 2012-03-30 13:20:29 +00:00
parent 56638f9e95
commit 429b8396e9

View File

@ -52,36 +52,53 @@ class DNSServer:
def __init__(self): def __init__(self):
self._requests = [] self._requests = []
self._lock = threading.Lock() self._lock = threading.Lock()
self._socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self._socket.bind(("", 53))
self._running = False
def pop(self):
retVal = None
with self._lock:
if len(self._requests):
retVal = self._requests.pop(0)
return retVal
def run(self): def run(self):
def _(): def _():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("", 53))
try: try:
self._running = True
while True: while True:
data, addr = s.recvfrom(1024) data, addr = self._socket.recvfrom(1024)
_ = DNSQuery(data) _ = DNSQuery(data)
s.sendto(_.response("127.0.0.1"), addr) self._socket.sendto(_.response("127.0.0.1"), addr)
self._lock.acquire() with self._lock:
self._requests.append(_._query) self._requests.append(_._query)
self._lock.release() except KeyboardInterrupt:
raise
finally: finally:
s.close() self._running = False
thread = threading.Thread(target=_) thread = threading.Thread(target=_)
thread.start() thread.start()
if __name__ == "__main__": if __name__ == "__main__":
server = DNSServer()
try: try:
server = DNSServer()
server.run() server.run()
while True: while server._running:
server._lock.acquire() while True:
for _ in server._requests[:]: _ = server.pop()
print _ if _ is None:
server._requests = [] break
server._lock.release() else:
print "[i] %s" % _
time.sleep(1) time.sleep(1)
except socket.error, ex:
if 'Permission' in str(ex):
print "[x] Please run with sudo/Administrator privileges"
else:
raise
except KeyboardInterrupt: except KeyboardInterrupt:
os._exit(0) os._exit(0)
finally:
server._running = False