Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python3
- #
- # start proxy server and listen for client connection
- #
- import socket,sys
- import threading
- try:
- port=int(input('Enter port to listen: '))
- except KeyboardInterrupt:
- print('Exiting...')
- sys.exit(1)
- # Max connections
- max_con=5
- buffer_size=4096
- def retry():
- try:
- option=input('Enter Y/n to retry or quit proxy server:')
- if option=='y' or option=="" or option=="Y":
- print("Restarting proxy server...")
- start()
- else:
- sys.exit(1)
- except KeyboardInterrupt:
- print('Stop retrying proxy server initialisation.')
- sys.exit(1)
- def start():
- try:
- s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)# IPv4 and tcp socket selected
- print("[+] Socket prepared for IPv4/TCP protocols ")
- s.bind(('0.0.0.0',port)) #bind port for listening
- print("[+] socket binded to listen on port:%d"%(port))
- s.listen(max_con)
- print("[+] Server started \n[+] Waiting for clients to connect...\n")
- except Exception as e:
- # print the exception object e
- # or just a simple message
- print("Exception error in starting server.\n")
- #print(e,'\n')
- s.close()
- #opt=input('Enter Y/n to retry or quit proxy server:')
- retry()
- while True:
- try:
- connection, addr=s.accept() #Accept connection from client
- #print(connection,'ADDRESS:',addr)
- print('\nGot connection from:', addr)
- data=connection.recv(buffer_size)#recieve client data
- #print(data)
- t=threading.Thread(target=connection_string,args=(connection,data,addr))
- t.start()
- t.join()
- # just started a process thread
- except KeyboardInterrupt:
- s.shutdown(socket.SHUT_RDWR)
- s.close()
- print("Killing server process")
- sys.exit(1)
- s.shutdown(socket.SHUT_RDWR)
- s.close()
- ##
- # Defining connection_string
- #
- ##
- def connection_string(connection,data,addr):
- # Client broser reuest will be seen here
- try:
- data=data.decode('utf-8')
- first_line=data.split('\n')[0]
- url=first_line.split(' ')[1]
- #print("url:",url)
- http_pos=url.find("://")# finding positonn of http tag
- #print(http_pos)#########
- if (http_pos==-1):
- temp=url
- else:
- temp =url[(http_pos+3):]# concating rest url
- #print(temp)
- port_pos=temp.find(':')# find the position of posrt if any
- webserver_pos=temp.find("/")#end of web server
- #print(port_pos,webserver_pos)
- if webserver_pos== -1:
- webserver_pos=len(temp)
- #webserver_pos=""
- port=-1
- if (port ==-1 or webserver_pos<port_pos):
- port=80
- webserver=temp[:webserver_pos]
- else:
- #specific port
- port=int((temp[(port_pos+1):])[:(webserver-port_pos-1)])
- webserver=temp[:port_pos]
- data=bytes(data.encode('utf-8'))
- proxy_server(webserver,port,connection,addr,data)
- except Exception as e:
- print("\nException in connection_string\n")
- print(e,'\n')
- pass
- # connection.shutdown(socket.SHUT_RDWR)
- # connection.close()
- retry=input('Enter Y/n to retry or quit proxy server:')
- if retry=='y' or retry=="" or retry=="Y":
- print("Restarting proxy server...")
- start()
- else:
- sys.exit(1)
- def proxy_server(webserver,port,connection,addr,data):
- print("Func-proxy_server")
- #print("\nwebserver->",webserver,"\nport->",port,"\nconnection->",connection,"\naddr->",addr,"\ndata->",data)
- try:
- s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
- #print("\nwebserver->",webserver,"\nport->",port,"\nconnection->",connection,"\naddr->",addr,"\ndata->",data)
- s.connect((webserver,port))
- s.send(data)
- print(data)
- while True:
- # read adata from web server
- reply=s.recv(buffer_size)
- #print("reply from target site to proxy server",reply.decode('utf-8'))
- if len(reply)>0:
- connection.send(reply)
- print(reply)
- #connection.send(bytes(reply.encode('utf-8')))# send rply bak to client
- #Send notification to proxy server#
- data_recieved=float(len(str(reply.decode('utf-8'))))
- data_recieved=float(data_recieved/1024)
- data_recieved="%.3s"%str(data_recieved)
- data_recieved="%s KB "%(data_recieved)
- #
- #print message on completein each request successfully
- #
- print("[+]%s %s "%(str(addr[0]),str(data_recieved)))
- else:
- # breaking connection if data not recieved
- break
- s.close()
- connection.close()
- except Exception as e:
- print(e)
- s.shutdown(socket.SHUT_RDWR)
- s.close()
- connection.shutdown(socket.SHUT_RDWR)
- connection.close()
- sys.exit(1)
- #start()
- start()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement