Advertisement
sm4rtn0bit4

proxy server

Feb 10th, 2018
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.35 KB | None | 0 0
  1. #!/usr/bin/python3
  2. #
  3. #   start proxy server and listen for client connection
  4. #
  5. import socket,sys
  6. import threading
  7. try:
  8.     port=int(input('Enter port to listen:  '))
  9. except KeyboardInterrupt:
  10.     print('Exiting...')
  11.     sys.exit(1)
  12.     #   Max connections
  13. max_con=5
  14. buffer_size=4096
  15. def retry():
  16.     try:
  17.         option=input('Enter Y/n to retry or quit proxy server:')
  18.         if option=='y' or option=="" or option=="Y":
  19.             print("Restarting proxy server...")
  20.             start()
  21.         else:
  22.             sys.exit(1)
  23.     except KeyboardInterrupt:
  24.         print('Stop retrying proxy server initialisation.')
  25.         sys.exit(1)
  26. def start():
  27.     try:
  28.         s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)# IPv4 and tcp socket selected
  29.         print("[+] Socket prepared for IPv4/TCP protocols ")
  30.         s.bind(('0.0.0.0',port))    #bind port for listening
  31.         print("[+] socket binded to listen on port:%d"%(port))
  32.         s.listen(max_con)
  33.         print("[+] Server started \n[+] Waiting for clients to connect...\n")
  34.     except Exception as e:
  35.         #   print the exception object e
  36.         # or just a simple message
  37.         print("Exception error in starting server.\n")
  38.         #print(e,'\n')
  39.         s.close()
  40.         #opt=input('Enter Y/n to retry or quit proxy server:')
  41.         retry()
  42.    
  43.     while True:
  44.         try:
  45.             connection, addr=s.accept() #Accept connection from client
  46.             #print(connection,'ADDRESS:',addr)
  47.             print('\nGot connection from:', addr)
  48.             data=connection.recv(buffer_size)#recieve client data
  49.             #print(data)
  50.             t=threading.Thread(target=connection_string,args=(connection,data,addr))
  51.             t.start()
  52.             t.join()
  53.             # just started a process thread
  54.         except KeyboardInterrupt:
  55.             s.shutdown(socket.SHUT_RDWR)
  56.             s.close()
  57.             print("Killing server process")
  58.             sys.exit(1)
  59.     s.shutdown(socket.SHUT_RDWR)
  60.     s.close()
  61. ## 
  62. #   Defining connection_string
  63. #  
  64. ##
  65. def connection_string(connection,data,addr):
  66.     # Client broser reuest will be seen here
  67.     try:
  68.         data=data.decode('utf-8')
  69.         first_line=data.split('\n')[0]
  70.        
  71.         url=first_line.split(' ')[1]
  72.         #print("url:",url)
  73.         http_pos=url.find("://")# finding positonn of http tag
  74.         #print(http_pos)#########
  75.         if (http_pos==-1):
  76.             temp=url
  77.         else:
  78.             temp =url[(http_pos+3):]# concating rest url
  79.         #print(temp)
  80.        
  81.         port_pos=temp.find(':')# find the position of posrt if any
  82.        
  83.         webserver_pos=temp.find("/")#end of web server
  84.         #print(port_pos,webserver_pos)
  85.         if webserver_pos== -1:
  86.             webserver_pos=len(temp)
  87.         #webserver_pos=""
  88.         port=-1
  89.         if (port ==-1 or webserver_pos<port_pos):
  90.             port=80
  91.             webserver=temp[:webserver_pos]
  92.         else:
  93.         #specific port
  94.             port=int((temp[(port_pos+1):])[:(webserver-port_pos-1)])
  95.             webserver=temp[:port_pos]
  96.         data=bytes(data.encode('utf-8'))
  97.         proxy_server(webserver,port,connection,addr,data)
  98.     except Exception as e:
  99.         print("\nException in connection_string\n")
  100.         print(e,'\n')
  101.         pass
  102. #       connection.shutdown(socket.SHUT_RDWR)
  103. #       connection.close()
  104.         retry=input('Enter Y/n to retry or quit proxy server:')
  105.         if retry=='y' or retry=="" or retry=="Y":
  106.             print("Restarting proxy server...")
  107.             start()
  108.         else:
  109.             sys.exit(1)
  110. def proxy_server(webserver,port,connection,addr,data):
  111.     print("Func-proxy_server")
  112.     #print("\nwebserver->",webserver,"\nport->",port,"\nconnection->",connection,"\naddr->",addr,"\ndata->",data)
  113.     try:
  114.         s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  115.         #print("\nwebserver->",webserver,"\nport->",port,"\nconnection->",connection,"\naddr->",addr,"\ndata->",data)
  116.         s.connect((webserver,port))
  117.         s.send(data)
  118.         print(data)
  119.         while True:
  120.     # read adata from web server
  121.             reply=s.recv(buffer_size)
  122.             #print("reply from target site to proxy server",reply.decode('utf-8'))
  123.             if len(reply)>0:
  124.                 connection.send(reply)
  125.                 print(reply)
  126.                 #connection.send(bytes(reply.encode('utf-8')))# send rply bak to client
  127.                
  128.                 #Send notification to proxy server#
  129.                 data_recieved=float(len(str(reply.decode('utf-8'))))
  130.                 data_recieved=float(data_recieved/1024)
  131.                 data_recieved="%.3s"%str(data_recieved)
  132.                 data_recieved="%s KB "%(data_recieved)
  133. #
  134. #print message on completein each request successfully
  135. #
  136.                 print("[+]%s %s "%(str(addr[0]),str(data_recieved)))
  137.             else:
  138. # breaking connection if data not recieved
  139.                 break
  140.         s.close()
  141.         connection.close()
  142.     except Exception as e:
  143.         print(e)
  144.         s.shutdown(socket.SHUT_RDWR)
  145.         s.close()
  146.         connection.shutdown(socket.SHUT_RDWR)
  147.         connection.close()
  148.         sys.exit(1)
  149.     #start()
  150. start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement