Python實(shí)現(xiàn)端口復(fù)用實(shí)例代碼
更新時(shí)間:2014年07月03日 14:50:51 投稿:shichen2014
這篇文章主要介紹了Python實(shí)現(xiàn)端口復(fù)用實(shí)例代碼,需要的朋友可以參考下
本文介紹Python實(shí)現(xiàn)端口復(fù)用實(shí)例如下所示:
#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 : #判斷是否是瀏覽器提交的數(shù)據(jù)如果是則將提交的數(shù)據(jù)轉(zhuǎn)發(fā)至本地環(huán)回地址的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) #將服務(wù)器發(fā)送的數(shù)據(jù)發(fā)回客戶端
s2.close
self.sockfd.close
sys.exit()
else:
'ps:connect to ssh' #如果數(shù)據(jù)不是瀏覽器提交則將其轉(zhuǎn)發(fā)至本地的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 ) #端口復(fù)用的關(guān)鍵點(diǎn)
s.bind((host,port))
s.listen(10)
while 1:
infds,outfds,errfds=select.select([s,],[],[],5) #使用select函數(shù)進(jìn)行非阻塞操作
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 : #判斷是否是瀏覽器提交的數(shù)據(jù)如果是則將提交的數(shù)據(jù)轉(zhuǎn)發(fā)至本地環(huán)回地址的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) #將服務(wù)器發(fā)送的數(shù)據(jù)發(fā)回客戶端
s2.close
self.sockfd.close
sys.exit()
else:
'ps:connect to ssh' #如果數(shù)據(jù)不是瀏覽器提交則將其轉(zhuǎn)發(fā)至本地的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 ) #端口復(fù)用的關(guān)鍵點(diǎn)
s.bind((host,port))
s.listen(10)
while 1:
infds,outfds,errfds=select.select([s,],[],[],5) #使用select函數(shù)進(jìn)行非阻塞操作
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)
#在綁定前調(diào)用setsockopt讓套接字允許地址重用
tcp1.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
tcp2.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
#接下來兩個(gè)套接字都也可以綁定到同一個(gè)端口上
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)
#在綁定前調(diào)用setsockopt讓套接字允許地址重用
tcp1.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
tcp2.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
#接下來兩個(gè)套接字都也可以綁定到同一個(gè)端口上
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()
相關(guān)文章
Python實(shí)現(xiàn)把json格式轉(zhuǎn)換成文本或sql文件
這篇文章主要介紹了Python實(shí)現(xiàn)把json格式轉(zhuǎn)換成文本或sql文件,本文直接給出代碼實(shí)例,需要的朋友可以參考下2015-07-07
Python基于模塊Paramiko實(shí)現(xiàn)SSHv2協(xié)議
這篇文章主要介紹了Python基于模塊Paramiko實(shí)現(xiàn)SSHv2協(xié)議,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Python中的list.sort()方法和函數(shù)sorted(list)
這篇文章主要介紹了Python中的list.sort()方法和函數(shù)sorted(list),sort()是列表的方法,修改原列表使得它按照大小排序,沒有返回值,返回None2022-08-08
python+Tesseract OCR實(shí)現(xiàn)截屏識別文字
pytesseract Python常用pytesseract進(jìn)行圖片上的文字識別,本文主要介紹了python+Tesseract?OCR實(shí)現(xiàn)截屏識別文字,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
使用Python實(shí)現(xiàn)Exce格式化批處理工具
原始Excel數(shù)據(jù)常常存在格式不統(tǒng)一、空值、重復(fù)數(shù)據(jù)等問題,影響數(shù)據(jù)的準(zhǔn)確性和可用性,所以本文就來使用Python編寫一個(gè)Excel數(shù)據(jù)清洗工具,有需要的小伙伴可以參考一下2025-04-04

