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在linux中输出带颜色的文字的方法
Jun 19 Python
python numpy格式化打印的实例
May 14 Python
python3读取excel文件只提取某些行某些列的值方法
Jul 10 Python
对Python定时任务的启动和停止方法详解
Feb 19 Python
Python判断有效的数独算法示例
Feb 23 Python
解决Python正则表达式匹配反斜杠''\''问题
Jul 17 Python
详解Matplotlib绘图之属性设置
Aug 23 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
Feb 27 Python
使用Keras实现Tensor的相乘和相加代码
Jun 18 Python
基于opencv的selenium滑动验证码的实现
Jul 24 Python
Python代码覆盖率统计工具coverage.py用法详解
Nov 25 Python
使用numpngw和matplotlib生成png动画的示例代码
Jan 24 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
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
php实现按天数、星期、月份查询的搜索框
2016/05/02 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
php从数据库中读取特定的行(实例)
2017/06/02 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
最简单的js图片切换效果实现代码
2011/09/24 Javascript
javascript四舍五入函数代码分享(保留后几位)
2013/12/10 Javascript
JS实现的通用表单验证插件完整实例
2015/08/20 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
BootStrap按钮标签及基本样式
2016/11/23 Javascript
Bootstrap源码解读网格系统(3)
2016/12/22 Javascript
loading动画特效小结
2017/01/22 Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
2017/01/23 Javascript
Bootstrap警告框(Alert)插件使用方法
2017/03/21 Javascript
带你了解session和cookie作用原理区别和用法
2017/08/14 Javascript
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
layui表格分页 记录勾选的实例
2019/09/02 Javascript
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
jquery实现商品sku多属性选择功能(商品详情页)
2019/12/20 jQuery
js 解析 JSON 数据简单示例
2020/04/21 Javascript
python 基础教程之Map使用方法
2017/01/17 Python
pyenv命令管理多个Python版本
2017/03/26 Python
浅谈python numpy中nonzero()的用法
2018/04/02 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
python 读取鼠标点击坐标的实例
2018/12/29 Python
Win10+GPU版Pytorch1.1安装的安装步骤
2019/09/27 Python
html5 canvas移动浏览器上实现图片压缩上传
2016/03/11 HTML / CSS
奥斯汀独木舟和皮划艇:Austin Canoe & Kayak
2018/05/22 全球购物
个人总结与自我评价
2015/02/14 职场文书
因个人原因离职的辞职信范文
2015/05/12 职场文书
仰望星空观后感
2015/06/10 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书
SQL优化老出错,那是你没弄明白MySQL解释计划用法
2021/11/27 MySQL
flex弹性布局详解
2022/03/20 HTML / CSS