Advertisement
Guest User

dns client

a guest
May 24th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.51 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. #takes traffic routed through this script (acting like a proxy), and turns it into dns packets to get past login stuff
  3. #Need to calculate MaxDnsSize base64 to length
  4. from scapy3k.all import * #only import libraries needed
  5. import socket
  6. import sys
  7. import base64
  8. from multiprocessing import Process
  9.  
  10. localPort = 32
  11. MaxDnsSize = 253
  12. #pretty sure this needs to be smaller, because were not including the headers, but i'll calculate this later. Who knows, maybe routers don't even block based on length.  
  13.  
  14. localProxy = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  15. localProxy.bind(("127.0.0.1", localPort))
  16. localProxy.listen(5)
  17.  
  18.  
  19.  
  20. dnsServer='192.168.1.65'
  21.  
  22. def sendDns(incomingBytes, port):
  23.     print('sending packet data :\n' + incomingBytes.decode('utf-8'))
  24.     incomingBytes = base64.encodebytes(incomingBytes)
  25.     send(IP(dst=dnsServer)/UDP(dport=53, sport=port)/DNS(qd=DNSQR(qname=incomingBytes)))
  26.  
  27. def transmitData(client, addr):
  28.     print("new incomming connection from " + str(addr))
  29.     conencted=False
  30.     incomingBytes=bytes('', 'utf-8')
  31.     client.settimeout(1)
  32.     while True:
  33.         try:
  34.             recvBytes = client.recv(1)
  35.             if not recvBytes:
  36.                 print("User " + str(addr) + " discconected.")
  37.                 client.shutdown(socket.SHUT_RDWR)
  38.                 client.close()
  39.                 break
  40.             else:
  41.                 incomingBytes += recvBytes
  42.             if len(incomingBytes) == MaxDnsSize:
  43.                 sendDns(incomingBytes, addr[1])
  44.                 incomingBytes = bytes('', 'utf-8')
  45.         except socket.timeout:
  46.             if incomingBytes:
  47.                 sendDns(incomingBytes, addr[1])
  48.                 incomingBytes = bytes('', 'utf-8')
  49.         except KeyboardInterrupt:
  50.             localProxy.shutdown(socket.SHUT_RDWR)
  51.             localProxy.close()
  52.         except Exception as error:
  53.             print(str(addr) + "has error: " + error)
  54.             #client.shutdown(socket.SHUT_RDWR)
  55.             #client.close()
  56.             #break
  57.         #    exit()
  58. def waitForConnections():
  59.     print("waiting for connections on port " + str(localPort) + ".")
  60.     while True:
  61.         try:
  62.             client, addr = localProxy.accept()
  63.             clientListener = Process(target=transmitData, args=(client, addr))
  64.             clientListener.start()
  65.         except KeyboardInterrupt:
  66.             print("exiting...")
  67.             localProxy.shutdown(socket.SHUT_RDWR)
  68.             localProxy.close()
  69.  
  70. waitForConnections()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement