Python实现TCP/IP协议下的端口转发及重定向示例


Posted in Python onJune 14, 2016

首先,我们用webpy写一个简单的网站,监听8080端口,返回“Hello, EverET.org”的页面。

然后我们使用我们的forwarding.py,在80端口和8080端口中间建立两条通信管道用于双向通信。

此时,我们通过80端口访问我们的服务器。

浏览器得到:

Python实现TCP/IP协议下的端口转发及重定向示例

然后,我们在forwarding.py的输出结果中可以看到浏览器和webpy之间的通信内容。

Python实现TCP/IP协议下的端口转发及重定向示例

代码:

#!/usr/bin/env python
import sys, socket, time, threading

loglock = threading.Lock()
def log(msg):
  loglock.acquire()
  try:
    print '[%s]: \n%s\n' % (time.ctime(), msg.strip())
    sys.stdout.flush()
  finally:
    loglock.release()

class PipeThread(threading.Thread):
  def __init__(self, source, target):
    threading.Thread.__init__(self)
    self.source = source
    self.target = target

  def run(self):
    while True:
      try:
        data = self.source.recv(1024)
        log(data)
        if not data: break
        self.target.send(data)
      except:
        break
    log('PipeThread done')

class Forwarding(threading.Thread):
  def __init__(self, port, targethost, targetport):
    threading.Thread.__init__(self)
    self.targethost = targethost
    self.targetport = targetport
    self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    self.sock.bind(('0.0.0.0', port))
    self.sock.listen(10)
  def run(self):
    while True:
      client_fd, client_addr = self.sock.accept()
      target_fd = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      target_fd.connect((self.targethost, self.targetport))
      log('new connect')
      # two direct pipe
      PipeThread(target_fd, client_fd).start()
      PipeThread(client_fd, target_fd).start()


if __name__ == '__main__':
  print 'Starting'
  import sys
  try:
    port = int(sys.argv[1])
    targethost = sys.argv[2]
    try: targetport = int(sys.argv[3])
    except IndexError: targetport = port
  except (ValueError, IndexError):
    print 'Usage: %s port targethost [targetport]' % sys.argv[0]
    sys.exit(1)

  #sys.stdout = open('forwaring.log', 'w')
  Forwarding(port, targethost, targetport).start()
Python 相关文章推荐
Python删除指定目录下过期文件的2个脚本分享
Apr 10 Python
在Linux系统上安装Python的Scrapy框架的教程
Jun 11 Python
Python实现将绝对URL替换成相对URL的方法
Jun 28 Python
Python实现包含min函数的栈
Apr 29 Python
Python如何实现文本转语音
Aug 08 Python
对python xlrd读取datetime类型数据的方法详解
Dec 26 Python
在Python 字典中一键对应多个值的实例
Feb 03 Python
python Django中models进行模糊查询的示例
Jul 18 Python
Django之路由层的实现
Sep 09 Python
python实现把两个二维array叠加成三维array示例
Nov 29 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
Python答题卡识别并给出分数的实现代码
Jun 22 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
Jun 14 #Python
浅谈python新手中常见的疑惑及解答
Jun 14 #Python
Python中死锁的形成示例及死锁情况的防止
Jun 14 #Python
实例探究Python以并发方式编写高性能端口扫描器的方法
Jun 14 #Python
Python使用dis模块把Python反编译为字节码的用法详解
Jun 14 #Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
Jun 14 #Python
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
Jun 14 #Python
You might like
做一个有下拉功能的留言版
2006/10/09 PHP
php学习笔记之 函数声明
2011/06/09 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
js 操作css实现代码
2009/06/11 Javascript
JavaScript 面向对象编程(2) 定义类
2010/05/18 Javascript
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
基于jQuery实现的菜单切换效果
2015/10/16 Javascript
jQuery自制提示框tooltip改进版
2016/08/01 Javascript
JS绘制微信小程序画布时钟
2016/12/24 Javascript
jQuery zTree树插件简单使用教程
2017/01/10 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
webstorm中vue语法的支持详解
2018/05/09 Javascript
使用vue打包时vendor文件过大或者是app.js文件很大的问题
2018/06/29 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
2020/04/10 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
[06:45]DOTA2卡尔工作室 英雄介绍幻影长矛手篇
2013/07/12 DOTA
实例讲解python函数式编程
2014/06/09 Python
Python中的多重装饰器
2015/04/11 Python
Python实现PS图像调整之对比度调整功能示例
2018/01/26 Python
python 删除列表里所有空格项的方法总结
2018/04/18 Python
python random从集合中随机选择元素的方法
2019/01/23 Python
Python集成开发工具Pycharm的安装和使用详解
2020/03/18 Python
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
Groupon荷兰官方网站:高达70%的折扣
2019/11/01 全球购物
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
某公司部分笔试题
2013/11/05 面试题
农药学硕士毕业生自荐信
2013/09/25 职场文书
机械机修工岗位职责
2014/08/03 职场文书
学校师德师风整改方案
2014/10/28 职场文书
小学英语复习计划
2015/01/19 职场文书
区域经理岗位职责
2015/02/02 职场文书
普希金的诗歌赏析(3首)
2019/08/20 职场文书
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS