Italiano English
Modifica History Actions

Differenze per "fakeDNS.py"

Differenze tra le versioni 3 e 4
Versione 3 del 2006-10-20 19:51:45
Dimensione: 1851
Autore: ClauzClauz
Commento:
Versione 4 del 2006-10-21 12:52:46
Dimensione: 1866
Autore: ClauzClauz
Commento:
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 4: Linea 4:
# Fake dns threadizzato # Fake dns multithread
Linea 12: Linea 12:
  #da http://preachermm.blogspot.com/2006/04/servidor-fake-dns-en-python.html   #da http://preachermm.blogspot.com/2006/04/servidor-fake-dns-en-python.html (single thread)
   1 # Fake dns multithread
   2 
   3 from SocketServer import *
   4 
   5 FAKEADDRESS="111.111.111.111"
   6 PORT=53 #udp
   7 
   8 class DNSQuery:
   9   #da http://preachermm.blogspot.com/2006/04/servidor-fake-dns-en-python.html (single thread)
  10   def __init__(self, data):
  11     self.data=data
  12     self.dominio=''
  13     tipo = (ord(data[2]) >> 3) & 15   # Opcode bits
  14     if tipo == 0:                     # Standard query
  15       ini=12
  16       lon=ord(data[ini])
  17       while lon != 0:
  18         self.dominio+=data[ini+1:ini+lon+1]+'.'
  19         ini+=lon+1
  20         lon=ord(data[ini])
  21 
  22   def respuesta(self, ip):
  23     packet=''
  24     if self.dominio:
  25       packet+=self.data[:2] + "\x81\x80"
  26       packet+=self.data[4:6] + self.data[4:6] + '\x00\x00\x00\x00'   # Questions and Answers Counts
  27       packet+=self.data[12:]                                         # Original Domain Name Question
  28       packet+='\xc0\x0c'                                             # Pointer to domain name
  29       packet+='\x00\x01\x00\x01\x00\x00\x00\x3c\x00\x04'             # Response type, ttl and resource data length -> 4 bytes
  30       packet+=str.join('',map(lambda x: chr(int(x)), ip.split('.'))) # 4bytes of IP
  31     return packet
  32 #DNSQuery
  33     
  34 class DNSRequestHandler (DatagramRequestHandler):
  35 	def handle(self):
  36 		DNSRequest=self.rfile.read()
  37 		q=DNSQuery(DNSRequest)
  38  		DNSDatagram=q.respuesta(FAKEADDRESS)
  39   		self.wfile.write(DNSDatagram)
  40 #DNSRequestHandler
  41 
  42 #crea una classe di server udp threadizzato
  43 class FakeDNSServer (ThreadingMixIn, UDPServer): pass
  44 
  45 dummyDNS=FakeDNSServer(('',PORT),DNSRequestHandler)
  46 
  47 #per prevenire attacchi, l'unico modo x fermare il server e' killarlo (SIGTERM, SIGKILL) o premere ctrl-C
  48 going=True
  49 while going:
  50 	try:
  51 		dummyDNS.serve_forever()
  52  	except KeyboardInterrupt:
  53  		going=False
  54 	except:
  55 		pass