Directly on code:
#!/usr/bin/python # Filename s5.py # python Dynamic Socks5 Proxy # Usage:python s5.py 1080 # Background Run:nohup P Ython s5.py 1080 & import socket, sys, select, Socketserver, struct, Time class Threadingtcpserver (socketserver.th Readingmixin, Socketserver.tcpserver): Pass class Socks5server (Socketserver.streamrequesthandler): Def handle_tcp ( Self, sock, remote): Fdset = [sock, remote] while True:r, W, E = Select.select (Fdset, [], []) if Sock in R:if Remote.send (SOCK.RECV (4096)) <= 0:break if remote in R:if sock.send (remote.rec
V (4096)) <= 0:break def handle (self): Try:pass # print ' from ', self.client_address No to do. sock = self.connection # 1.
Version sock.recv (262) sock.send ("\x05\x00"); # 2. Request data = Self.rfile.read (4) mode = Ord (data[1]) AddrType = Ord (data[3]) If AddrType = 1 : # IPv4 addr = socket.inet_Ntoa (Self.rfile.read (4)) elif AddrType = = 3: # Domain Name addr = Self.rfile.read (Ord (SOCK.RECV (1) [0]) Port = struct.unpack (' >h ', Self.rfile.read (2)) Reply = "\x05\x00\x00\x01" try:if mode = = 1: # 1. TCP Connect remote = Socket.socket (socket.af_inet, socket.
Sock_stream) Remote.connect ((addr, port[0)) Pass # print "to", addr, port[0] nothing does to. else:reply = "\x05\x07\x00\x01" # Command not supported local = Remote.getsockname () repl
Y + + Socket.inet_aton (local[0]) + struct.pack (">h", local[1)) except Socket.error: # Connection refused Reply = ' \x05\x05\x00\x01\x00\x00\x00\x00\x00\x00 ' sock.send (Reply) # 3. transfering if reply[1] = = ' \x00 ': # Success if mode = = 1: # 1.
TCP Connect self.handle_tcp (sock, remote) except Socket.error:pass #print ' error ' nothing to do. Except inDexerror:pass def main (): filename = sys.argv[0];
If Len (sys.argv) <2:print ' usage: ' + filename + ' port ' sys.exit () socks_port = Int (sys.argv[1));
Server = Threadingtcpserver ((', socks_port), socks5server) print ' Bind port:%d '% socks_port + ' ok! '
Server.serve_forever () if __name__ = = ' __main__ ': Main ()