Python 简单的代理服务器

具备简单的管理功能,运行后 telnet localhost 9000 端口可以进行管理主要功能就是做包转发,如果有一个桥服务器,可以用来外网访问内网用,还是很管用的

#/bin/env python
002#coding:utf-8
003
004 import socket,select,sys,time
005 import thread
006
007 s_list =[]
008
009 def loop(cs,addr,s_ip,s_port):
010 print'%s %d connected.' % addr
011 ts= socket.socket()
012
013 try:
014 ts.connect((s_ip,s_port))
015 except:
016 cs.close()
017 print'%s %d closed.' %addr
018 sys.exit(0)
019
020 whileTrue:
021
022 rl,wl,xl= select.select([cs.fileno(),ts.fileno()],[],[cs.fileno(),ts.fileno()])
023
024 iflen(xl) > 0:
025 cs.close()
026 ts.close()
027 print'%s %d closed.' %addr
028 sys.exit(0)
029
030 iflen(rl) > 0:
031 ifrl[0]==cs.fileno():
032 rs= ts
033 ws= cs
034 else:
035 rs= cs
036 ws= ts
037
038 try:
039 buffer= ws.recv(10000)
040 iflen(buffer)==0:
041 raise
042 rs.send(buffer)
043 except:
044 rs.close()
045 ts.close()
046 print'%s %d closed.' %addr
047 sys.exit(0)
048
049 def mainserver(l_port,s_ip,s_port):
050 globals_list
051 try:
052 ss= socket.socket()
053 ss.bind(('0.0.0.0',l_port))
054 ss.listen(10)
055 s_list.append((l_port,s_ip,s_port))
056 except:
057 sys.exit(0)
058
059 whileTrue:
060 cs,addr= ss.accept()
061
062 thread.start_new_thread(loop,(cs,addr,s_ip,s_port))
063
064 def manager(l_port):
065 globalstart,s_list
066
067 ss= socket.socket()
068 ss.bind(('0.0.0.0',l_port))
069 ss.listen(10)
070
071 whileTrue:
072 cs,addr= ss.accept()
073 cs.send("""trans server 1.0\r\ntype 'help' to get help\r\n""")
074 buffer= ''
075 whileTrue:
076 buf= cs.recv(10000)
077 iflen(buf) == 0:
078 cs.close()
079 break
080 ifbuf[-1]not in('\r','\n'):
081 buffer+= buf
082 continue
083 buffer+= buf
084 cmd= buffer.strip()
085 buffer= ''
086 ifcmd =='exit':
087 cs.close()
088 break
089 elifcmd =='stop':
090 start= 0
091 cs.close()
092 sys.exit(0)
093 elifcmd =='list':
094 b= ''
095 forl in s_list:
096 b+='%4d %s:%d\r\n' %l
097
098 iflen(b) > 0:
099 cs.send(b)
100 elifcmd in ('help','?'):
101 cs.send("""-------------------------------------------\r
102exit\r
103 exit telnet\r
104start localport serverip:serverport\r
105 start a new server\r
106list\r
107 list all server\r
108-------------------------------------------\r
109 """)
110 else:
111 cmds= cmd.split(" ",1)
112 iflen(cmds) > 1 and cmds[0] == 'start':
113 args= cmds[1].strip().split(" ",1)
114 iflen(args) !=2:
115 cs.send('start localport serverip:serverport\r\n')
116 continue
117 arg= args[1].split(":",1)
118 iflen(arg) !=2:
119 cs.send('start localport serverip:serverport\r\n')
120 continue
121
122 try:
123 l_port= int(args[0])
124 s_ip= arg[0]
125 s_port= int(arg[1])
126 except:
127 cs.send('start localport serverip:serverport\r\n')
128 continue
129
130 thread.start_new_thread(mainserver,(l_port,s_ip,s_port))
131 cs.send('start OK!\r\n')
132 else:
133 cs.send('no command [%s]\r\n'% cmd)
134 continue
135
136 def main():
137 globalstart
138
139 iflen(sys.argv) == 3:
140 try:
141 l_port= int(sys.argv[1])
142 s_ip,s_port= sys.argv[2].split(":")
143 s_port= int(s_port)
144 thread.start_new_thread(mainserver,(l_port,s_ip,s_port))
145 except:
146 pass
147
148 start= 1
149
150 thread.start_new_thread(manager,(9000,))
151
152 whilestart:
153 time.sleep(1)
154
155 if __name__ =='__main__':
156
157 start= 0
158
159 main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值