Differenze tra le versioni 1 e 2
⇤ ← Versione 1 del 2006-10-20 19:42:15
Dimensione: 23
Commento:
|
Dimensione: 1849
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