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爬虫教程之爬取百度贴吧并下载的示例
Mar 07 Python
Python3读取zip文件信息的方法
May 22 Python
安装Python的教程-Windows
Jul 22 Python
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
Jul 24 Python
Numpy截取指定范围内的数据方法
Nov 14 Python
Python中安装easy_install的方法
Nov 18 Python
PyQt5固定窗口大小的方法
Jun 18 Python
Python递归实现打印多重列表代码
Feb 27 Python
django配置app中的静态文件步骤
Mar 27 Python
python 深度学习中的4种激活函数
Sep 18 Python
Python的logging模块基本用法
Dec 24 Python
基于python实现银行管理系统
Apr 20 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
一个数据采集类
2007/02/14 PHP
PHP STRING 陷阱原理说明
2010/07/24 PHP
yii操作cookie实例简介
2014/07/09 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
2015/04/15 PHP
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
2010/04/27 Javascript
js动态加载以及确定加载完成的代码
2011/07/31 Javascript
js弹出框轻量级插件jquery.boxy使用介绍
2013/01/15 Javascript
JS获取当前日期和时间的简单实例
2013/11/19 Javascript
jQuery实现的支持IE的html滑动条
2015/03/16 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
javascript实现可全选、反选及删除表格的方法
2015/05/15 Javascript
jquery 构造函数在表单提交过程中修改数据
2015/05/25 Javascript
详解JavaScript中的every()方法
2015/06/08 Javascript
JS+CSS实现仿雅虎另类滑动门切换效果
2015/10/13 Javascript
js简单判断flash是否加载完成的方法
2016/06/21 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
2016/08/31 Javascript
javascript中异常处理案例(推荐)
2016/10/03 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
JS操作input标签属性checkbox全选的实现代码
2017/03/02 Javascript
js实现产品缩略图效果
2017/03/10 Javascript
React通过父组件传递类名给子组件的实现方法
2017/11/13 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
2018/03/13 Javascript
小程序实现单选多选功能
2018/11/04 Javascript
jQuery+vue.js实现的多选下拉列表功能示例
2019/01/15 jQuery
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
vue 通过绑定事件获取当前行的id操作
2020/07/27 Javascript
Python的Django框架使用入门指引
2015/04/15 Python
对python 各种删除文件失败的处理方式分享
2018/04/24 Python
幼师自荐信
2013/10/26 职场文书
户外活动总结范文
2014/04/30 职场文书
社团活动总结报告
2014/06/27 职场文书
2014普法依法治理工作总结
2014/12/18 职场文书
辞职申请书范本
2019/05/20 职场文书
redis 限制内存使用大小的实现
2021/05/08 Redis
微软团队与 NASA 科学家和惠普企业(HPE)的工程师合作
2022/04/21 数码科技