Italiano English
Modifica History Actions

Differenze per "fakeDNS.py"

Differenze tra le versioni 1 e 2
Versione 1 del 2006-10-20 19:42:15
Dimensione: 23
Autore: ClauzClauz
Commento:
Versione 2 del 2006-10-20 19:49:29
Dimensione: 1849
Autore: ClauzClauz
Commento:
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 1: Linea 1:
Fake dns threadizzato #FORMAT python
#! /usr/bin/env python

# Fake dns threadizzato

from SocketServer import *

FAKEADDRESS="111.111.111.111"
PORT=53 #udp

class DNSQuery:
  #da http://preachermm.blogspot.com/2006/04/servidor-fake-dns-en-python.html
  def __init__(self, data):
    self.data=data
    self.dominio=''
    tipo = (ord(data[2]) >> 3) & 15 # Opcode bits
    if tipo == 0: # Standard query
      ini=12
      lon=ord(data[ini])
      while lon != 0:
        self.dominio+=data[ini+1:ini+lon+1]+'.'
        ini+=lon+1
        lon=ord(data[ini])

  def respuesta(self, ip):
    packet=''
    if self.dominio:
      packet+=self.data[:2] + "\x81\x80"
      packet+=self.data[4:6] + self.data[4:6] + '\x00\x00\x00\x00' # Questions and Answers Counts
      packet+=self.data[12:] # Original Domain Name Question
      packet+='\xc0\x0c' # Pointer to domain name
      packet+='\x00\x01\x00\x01\x00\x00\x00\x3c\x00\x04' # Response type, ttl and resource data length -> 4 bytes
      packet+=str.join('',map(lambda x: chr(int(x)), ip.split('.'))) # 4bytes of IP
    return packet
#DNSQuery
    
class DNSRequestHandler (DatagramRequestHandler):
 def handle(self):
  DNSRequest=self.rfile.read()
  q=DNSQuery(DNSRequest)
   DNSDatagram=q.respuesta(FAKEADDRESS)
    self.wfile.write(DNSDatagram)
#DNSRequestHandler

#crea una classe di server udp threadizzato
class FakeDNSServer (ThreadingMixIn, UDPServer): pass

dummyDNS=FakeDNSServer(('',53),DNSRequestHandler)

#per prevenire attacchi, l'unico modo x fermare il server e' killarlo (SIGTERM, SIGKILL) o premere ctrl-C
going=True
while going:
 try:
  dummyDNS.serve_forever()
  except KeyboardInterrupt:
   going=False
 except:
  pass
   1 # Fake dns threadizzato
   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
  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(('',53),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