• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > python实现端口转发器的方法

python实现端口转发器的方法

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了python实现端口镜像,python实现端口扫描,用python实现端口扫描,python 端口扫描,python 监听端口等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了python实现端口转发器的方法。分享给大家供大家参考。具体如下:

下面的python代码实现端口转发器,支持udp端口转发

由于工作需要用到一个端口转发器,并且要求支持TCP和UDP协议。在网上找了蛮久,但没有中意的。于是就自己写了一个。这个转发器是基于python cookbook的一个示例改写的,原先的这个示例只支持TCP协议,我这里增加了UDP协议的支持,程序写的不怎么好,不过它确实能用!

portmap.py代码如下:
'''
Created on 2012-5-8
@author: qh
'''
import time,socket,threading
def log(strLog):
    strs=time.strftime("%Y-%m-%d %H:%M:%S")
    print strs+"->"+strLog
class pipethread(threading.Thread):
    '''
    classdocs
    '''
    def __init__(self,source,sink):
        '''
        Constructor
        '''
        threading.Thread.__init__(self)
        self.source=source
        self.sink=sink
        log("New Pipe create:%s->%s" % (self.source.getpeername(),self.sink.getpeername()))
    def run(self):
        while True:
            try:
                data=self.source.recv(1024)
                if not data: break
                self.sink.send(data)
            except Exception ,ex:
                log("redirect error:"+str(ex))
                break
        self.source.close()
        self.sink.close()
class portmap(threading.Thread):
    def __init__(self,port,newhost,newport,local_ip=''):
        threading.Thread.__init__(self)
        self.newhost=newhost
        self.newport=newport
        self.port=port
        self.local_ip=local_ip
        self.sock=None
        self.sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        self.sock.bind((self.local_ip,port))
        self.sock.listen(5)
        log("start listen protocol:%s,port:%d " % ('tcp',port))
    def run(self):
        while True:
            fwd=None
            newsock=None
            newsock,address=self.sock.accept()
            log("new connection->protocol:%s,local port:%d,remote address:%s" % ('tcp',self.port,address[0]))
            fwd=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
            try:
                fwd.connect((self.newhost,self.newport))
            except Exception ,ex:
                log("connet newhost error:"+str(ex))
                break
            p1=pipethread(newsock,fwd,self.protocol)
            p1.start()
            p2=pipethread(fwd,newsock,self.protocol)
            p2.start()
class pipethreadUDP(threading.Thread):
    def __init__(self,connection,connectionTable,table_lock):
        threading.Thread.__init__(self)
        self.connection=connection
        self.connectionTable=connectionTable
        self.table_lock=table_lock
        log('new thread for new connction')
    def run(self):
        while True:
            try:
                data,addr=self.connection['socket'].recvfrom(4096)
                #log('recv from addr"%s' % str(addr))
            except Exception ,ex:
                log("recvfrom error:"+str(ex))
                break
            try:
                self.connection['lock'].acquire()
                self.connection['Serversocket'].sendto(data,self.connection['address'])
                #log('sendto address:%s' % str(self.connection['address']))
            except Exception ,ex:
                log("sendto error:"+str(ex))
                break
            finally:self.connection['lock'].release()
            self.connection['time']=time.time()
        self.connection['socket'].close()
        log("thread exit for: %s" % str(self.connection['address']))
        self.table_lock.acquire()
        self.connectionTable.pop(self.connection['address'])

您可能想查找下面的文章:

  • python实现端口转发器的方法
  • python实现超简单端口转发的方法
  • python实现端口转发器的方法
  • python实现超简单端口转发的方法
  • Python实现端口复用实例代码
  • python判断端口是否打开的实现代码

相关文章

  • 使用Python来编写HTTP服务器的超级指南
  • 利用Python中的mock库对Python代码进行模拟测试
  • python如何在终端里面显示一张图片
  • Python selenium 父子、兄弟、相邻节点定位方式详解
  • Flask的图形化管理界面搭建框架Flask-Admin的使用教程
  • Python 'takes exactly 1 argument (2 given)' Python error
  • python 将字符串转换成字典dict
  • python基于xml parse实现解析cdatasection数据
  • Python的设计模式编程入门指南
  • Python中Continue语句的用法的举例详解

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • python通过ssh-powershell监控windows的方法
    • python求素数示例分享
    • Python实现压缩与解压gzip大文件的方法
    • 在RedHat系Linux上部署Python的Celery框架的教程
    • 利用python实现数据分析
    • 玩转python爬虫之URLError异常处理
    • 简单掌握Python中glob模块查找文件路径的用法
    • Python制作Windows系统服务
    • python获取Linux下文件版本信息、公司名和产品名的方法
    • python同时给两个收件人发送邮件的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有