-
Notifications
You must be signed in to change notification settings - Fork 1
/
DNSProxy.py
51 lines (37 loc) · 1.09 KB
/
DNSProxy.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/env python
# Author Dario Clavijo 2017
# GPLv3
import socket
import struct
UDP_IP = "127.0.0.1"
UDP_PORT = 53
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
sock2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
def DNS_dissect(data,addr):
#print len(data)
#fmt = "HHHHHH%ds" % (len(data)-12)
#print fmt
#f = struct.unpack(fmt,data1)
#print addr,data.encode('hex')
#print "ID,QR,QD,AN,NS,AR,payload"
#print addr,f
ID = data[0:2].encode('hex')
QR = data[2:4].encode('hex')
QD = data[4:6].encode('hex')
AN = data[6:8].encode('hex')
NS = data[8:10].encode('hex')
AR = data[10:12].encode('hex')
payload = data[12:].encode('hex')
#print addr,data.encode('hex')
print "ADDR,ID,QR,QD,AN,NS,AR,payload"
print addr,ID,QR,QD,AN,NS,AR,payload
while True:
data1, addr1 = sock.recvfrom(1024) # buffer size is 1024 bytes
if len(data1) > 0:
DNS_dissect(data1,addr1)
sock2.sendto(data1, ("8.8.8.8", 53))
data2, addr2 = sock2.recvfrom(1024)
if len(data2) > 0:
DNS_dissect(data2,addr2)
sock.sendto(data2,addr1)