zoukankan      html  css  js  c++  java
  • python socks5 代理服务

    linux 后台运行: 
    nohup python s5.py 1080 & 

    #!/usr/bin/python 
    # Filename s5.py 
    # Python Dynamic Socks5 Proxy 
    # Usage: python s5.py 1080 
    # Backgroup Run: nohup python s5.py 1080 & 
    # Email: ringzero@557.im 

    import socket, sys, select, SocketServer, struct, time 

    class ThreadingTCPServer(SocketServer.ThreadingMixIn, 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.recv(4096)) <= 0: break 
        def handle(self): 
            try: 
                pass # print 'from ', self.client_address nothing 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 do to. 
                    else: 
                        reply = "\x05\x07\x00\x01" # Command not supported 
                    local = remote.getsockname() 
                    reply += 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()

    http://zone.wooyun.org/content/100

  • 相关阅读:
    GitLab--简单使用
    Git
    GitLab--安装部署
    RabbitMQ--工作模式
    服务器上TIME_WAIT过多怎么处理
    LVS Nginx HAProxy区别
    部署 Kubernetes 集群(kubeadm方式)
    office选项-》高级-》显示 中, 显示此数目的“最近使用的文档” 为灰色,无法更改
    期末测验: 课程水平综合测验 (第10周)-程序题
    测验9: Python计算生态纵览 (第9周)-程序题
  • 原文地址:https://www.cnblogs.com/keepfocus/p/2563065.html
Copyright © 2011-2022 走看看