最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Python实现端口复用实例代码

来源:动视网 责编:小采 时间:2020-11-27 14:30:29
文档

Python实现端口复用实例代码

Python实现端口复用实例代码:本文介绍Python实现端口复用实例如下所示: #coding=utf-8 import socket import sys import select import threading host='192.168.99.100' port=80 class Thread(threading.Thread): def __init__(
推荐度:
导读Python实现端口复用实例代码:本文介绍Python实现端口复用实例如下所示: #coding=utf-8 import socket import sys import select import threading host='192.168.99.100' port=80 class Thread(threading.Thread): def __init__(


本文介绍Python实现端口复用实例如下所示:

#coding=utf-8
import socket
import sys
import select
import threading
host='192.168.99.100'
port=80
class 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
#coding=utf-8
import socket
import sys
import select
import threading
host='192.168.99.100'
port=80
class 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

例子2

import socket
tcp1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#在绑定前调用setsockopt让套接字允许地址重用
tcp1.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
tcp2.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
 #接下来两个套接字都也可以绑定到同一个端口上
tcp1.bind(('0.0.0.0', 12345))
tcp2.bind(('0.0.0.0', 12345))
import socket
tcp1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#在绑定前调用setsockopt让套接字允许地址重用
tcp1.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
tcp2.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
 #接下来两个套接字都也可以绑定到同一个端口上
tcp1.bind(('0.0.0.0', 12345))
tcp2.bind(('0.0.0.0', 12345))

例子3

重定向

import socket,os
bufLen = 4*1024
sock1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock1.bind(('192.168.168.100', 8000)) 
sock1.listen(5) 
sock2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock2.connect(('192.168.168.100', 12345)) 
while True:
 connection,address = sock1.accept() 
 buf = connection.recv(bufLen) 
 #print buf 
 sock2.send(buf) 
 connection.send(sock2.recv(bufLen))
 connection.close()
import socket,os
bufLen = 4*1024
sock1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock1.bind(('192.168.168.100', 8000)) 
sock1.listen(5) 
sock2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock2.connect(('192.168.168.100', 12345)) 
while True:
 connection,address = sock1.accept() 
 buf = connection.recv(bufLen) 
 #print buf 
 sock2.send(buf) 
 connection.send(sock2.recv(bufLen))
 connection.close()

文档

Python实现端口复用实例代码

Python实现端口复用实例代码:本文介绍Python实现端口复用实例如下所示: #coding=utf-8 import socket import sys import select import threading host='192.168.99.100' port=80 class Thread(threading.Thread): def __init__(
推荐度:
标签: 实现 实例 python
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top