| Index: src/third_party/miniFakeDns/src/miniFakeDns.py
|
| diff --git a/src/third_party/miniFakeDns/src/miniFakeDns.py b/src/third_party/miniFakeDns/src/miniFakeDns.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8ffd4a47a0f89b456daf6241e4f0f0bf8f056c5a
|
| --- /dev/null
|
| +++ b/src/third_party/miniFakeDns/src/miniFakeDns.py
|
| @@ -0,0 +1,43 @@
|
| +import socket
|
| +
|
| +class DNSQuery:
|
| + 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
|
| +
|
| +if __name__ == '__main__':
|
| + ip='192.168.1.1'
|
| + print 'pyminifakeDNS:: dom.query. 60 IN A %s' % ip
|
| +
|
| + udps = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
| + udps.bind(('',53))
|
| +
|
| + try:
|
| + while 1:
|
| + data, addr = udps.recvfrom(1024)
|
| + p=DNSQuery(data)
|
| + udps.sendto(p.respuesta(ip), addr)
|
| + print 'Respuesta: %s -> %s' % (p.dominio, ip)
|
| + except KeyboardInterrupt:
|
| + print 'Finalizando'
|
| + udps.close()
|
|
|