Python关于端口复用及线程操作方法,python复用,以下代码是Python关
Python关于端口复用及线程操作方法,python复用,以下代码是Python关
以下代码是Python关于端口复用及线程操作方法,适用于windows和linux系统。
思路是:
(1)判断是否是浏览器提交的数据如果是则将提交的数据转发至本地环回地址的80端口
(2)将服务器发送的数据发回客户端
(3)如果数据不是浏览器提交则将其转发至本地的22端口
(4)使用select函数进行非阻塞操作
#coding=utf-8import socketimport sysimport selectimport threadinghost='192.168.99.100'port=80#www.iplaypy.comclass Thread(threading.Thread): def __init__(self,buf,sockfd): threading.Thread.__init__(self) self.buf=buf self.sockfd=sockfd def run(self): if len(self.buf)!=0: if 'GET' in self.buf : #判断是否是浏览器提交的数据如果是则将提交的数据转发至本地环回地址的80端口 s2=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s2.connect(('127.0.0.1',80)) s2.send(self.buf) bufer='' while 1: recv_data=s2.recv(1024) bufer+=recv_data if len(recv_data)==0: break print bufer,len(bufer) if len(bufer)==0: pass self.sockfd.send(bufer) #将服务器发送的数据发回客户端 s2.close self.sockfd.close sys.exit() else: 'ps:connect to ssh' #如果数据不是浏览器提交则将其转发至本地的22端口 s2=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s2.connect(('127.0.0.1',22)) s2.send(self.buf) recv_data=s2.recv(4096) conn.send(recv_data) self.sockfd.close s2.close s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR, 1 ) #端口复用的关键点s.bind((host,port))s.listen(10)while 1: infds,outfds,errfds=select.select([s,],[],[],5) #使用select函数进行非阻塞操作 if len(infds)!=0: conn,(addr,port)=s.accept() print 'connected by',addr,port data=conn.recv(1024) t=Thread(data,conn) t.start()s.close
编橙之家文章,
相关内容
- 用python实现函数调用拦截,python函数拦截,写的这个关于
- ipv4与ipv6地址如何转换的python解决办法,ipv6python,ipv4与
- python将ios及android文件写成excel的小工具,iosandroid,用p
- Python内置方法实现访问权限控制,python权限控制,Pytho
- Python获取MP3文件id3信息的方法源码,pythonid3,Python获取
- Python socket方法获取接口IP地址,pythonsocket,Python socke
- Python代码片段之Django静态文件URL的配置,,首先要说明这
- 一个初学者对正则表达式学习的小问题,初学者正则表
- 读取目录文件并生成日志的python方法示例,python示例
- python统计文件中文字数量的方法,python统计,虽然pytho
评论关闭