Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 429b839

Browse files
committed
minor update for DNSServer support
1 parent 56638f9 commit 429b839

1 file changed

Lines changed: 33 additions & 16 deletions

File tree

lib/request/dns.py

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -52,36 +52,53 @@ class DNSServer:
5252
def __init__(self):
5353
self._requests = []
5454
self._lock = threading.Lock()
55+
self._socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
56+
self._socket.bind(("", 53))
57+
self._running = False
58+
59+
def pop(self):
60+
retVal = None
61+
with self._lock:
62+
if len(self._requests):
63+
retVal = self._requests.pop(0)
64+
return retVal
5565

5666
def run(self):
5767
def _():
58-
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
59-
s.bind(("", 53))
60-
6168
try:
69+
self._running = True
6270
while True:
63-
data, addr = s.recvfrom(1024)
71+
data, addr = self._socket.recvfrom(1024)
6472
_ = DNSQuery(data)
65-
s.sendto(_.response("127.0.0.1"), addr)
66-
self._lock.acquire()
67-
self._requests.append(_._query)
68-
self._lock.release()
73+
self._socket.sendto(_.response("127.0.0.1"), addr)
74+
with self._lock:
75+
self._requests.append(_._query)
76+
except KeyboardInterrupt:
77+
raise
6978
finally:
70-
s.close()
79+
self._running = False
7180

7281
thread = threading.Thread(target=_)
7382
thread.start()
7483

7584
if __name__ == "__main__":
76-
server = DNSServer()
7785
try:
86+
server = DNSServer()
7887
server.run()
79-
while True:
80-
server._lock.acquire()
81-
for _ in server._requests[:]:
82-
print _
83-
server._requests = []
84-
server._lock.release()
88+
while server._running:
89+
while True:
90+
_ = server.pop()
91+
if _ is None:
92+
break
93+
else:
94+
print "[i] %s" % _
8595
time.sleep(1)
96+
except socket.error, ex:
97+
if 'Permission' in str(ex):
98+
print "[x] Please run with sudo/Administrator privileges"
99+
else:
100+
raise
86101
except KeyboardInterrupt:
87102
os._exit(0)
103+
finally:
104+
server._running = False

0 commit comments

Comments
 (0)