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__(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实现端口复用实例代码 的全部内容, 来源链接: utcz.com/z/330590.html

回到顶部