加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Python 简单的代理服务器

发布时间:2020-12-17 17:11:45 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #/bin/env python #coding:utf-8 import socket,select,sys,time import thread s_list = [] def loop(cs,addr,s_ip,s_port): print '%s %d connected

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

#/bin/env python    
#coding:utf-8    

import socket,select,sys,time    
import thread    

s_list = []    

def loop(cs,addr,s_ip,s_port):    
    print '%s %d connected.' % addr    
    ts = socket.socket()    

    try:    
        ts.connect((s_ip,s_port))    
    except:    
        cs.close()    
        print '%s %d closed.' % addr    
        sys.exit(0)    

    while True:    

        rl,wl,xl = select.select([cs.fileno(),ts.fileno()],[],[cs.fileno(),ts.fileno()])    

        if len(xl) > 0:    
            cs.close()    
            ts.close()    
            print '%s %d closed.' % addr    
            sys.exit(0)    

        if len(rl) > 0:    
            if rl[0] == cs.fileno():    
                rs = ts    
                ws = cs    
            else:    
                rs = cs    
                ws = ts    

            try:    
                buffer = ws.recv(10000)    
                if len(buffer) == 0:    
                    raise   
                rs.send(buffer)    
            except:    
                rs.close()    
                ts.close()    
                print '%s %d closed.' % addr    
                sys.exit(0)    

def mainserver(l_port,s_port):    
    global s_list    
    try:    
        ss = socket.socket()    
        ss.bind(('0.0.0.0',l_port))    
        ss.listen(10)    
        s_list.append((l_port,s_port))            
    except:    
        sys.exit(0)    

    while True:    
        cs,addr = ss.accept()    

        thread.start_new_thread(loop,(cs,s_port))    

def manager(l_port):    
    global start,s_list    

    ss = socket.socket()    
    ss.bind(('0.0.0.0',l_port))    
    ss.listen(10)    

    while True:    
        cs,addr = ss.accept()    
        cs.send("""trans server 1.0rntype 'help' to get helprn""")    
        buffer = ''    
        while True:    
            buf = cs.recv(10000)    
            if len(buf) == 0:    
                cs.close()    
                break   
            if buf[-1] not in ('r','n'):    
                buffer += buf    
                continue   
            buffer += buf    
            cmd = buffer.strip()    
            buffer = ''    
            if cmd == 'exit':    
                cs.close()    
                break   
            elif cmd == 'stop':    
                start = 0   
                cs.close()    
                sys.exit(0)    
            elif cmd == 'list':    
                b = ''    
                for l in s_list:    
                    b += '%4d %s:%drn' % l    

                if len(b) > 0:    
                    cs.send(b)    
            elif cmd in ('help','?'):    
                cs.send("""-------------------------------------------r  
exitr  
    exit telnetr  
start localport serverip:serverportr  
    start a new serverr  
listr  
    list all serverr  
-------------------------------------------r  
""")    
            else:    
                cmds = cmd.split(" ",1)    
                if len(cmds) > 1 and cmds[0] == 'start':    
                    args = cmds[1].strip().split(" ",1)    
                    if len(args) != 2:    
                        cs.send('start localport serverip:serverportrn')    
                        continue   
                    arg = args[1].split(":",1)    
                    if len(arg) != 2:    
                        cs.send('start localport serverip:serverportrn')    
                        continue   

                    try:    
                        l_port = int(args[0])    
                        s_ip = arg[0]    
                        s_port = int(arg[1])    
                    except:    
                        cs.send('start localport serverip:serverportrn')    
                        continue   

                    thread.start_new_thread(mainserver,(l_port,s_port))    
                    cs.send('start OK!rn')    
                else:    
                    cs.send('no command [%s]rn' % cmd)    
                    continue   

def main():    
    global start    

    if len(sys.argv) == 3:    
        try:    
            l_port = int(sys.argv[1])    
            s_ip,s_port = sys.argv[2].split(":")    
            s_port = int(s_port)    
            thread.start_new_thread(mainserver,s_port))    
        except:    
            pass   

    start = 1   

    thread.start_new_thread(manager,(9000,))    

    while start:    
        time.sleep(1)    

if __name__ == '__main__':    

    start = 0   

    main()

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读