File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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
7584if __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
You can’t perform that action at this time.
0 commit comments