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实现把utf-8格式的文件转换成gbk格式的文件
Jan 22 Python
老生常谈python的私有公有属性(必看篇)
Jun 09 Python
python实现批量图片格式转换
Jun 16 Python
基于Python开发chrome插件的方法分析
Jul 07 Python
python实现微信小程序自动回复
Sep 10 Python
django与小程序实现登录验证功能的示例代码
Feb 19 Python
Python Django给admin添加Action的方法实例详解
Apr 29 Python
对Python函数设计规范详解
Jul 19 Python
Python箱型图处理离群点的例子
Dec 09 Python
Python3中的tuple函数知识点讲解
Jan 03 Python
详解python字符串驻留技术
May 21 Python
Python Flask实现进度条
May 11 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
咖啡产品发展的三大浪潮
2021/03/04 咖啡文化
不要轻信 PHP_SELF的安全问题
2009/09/05 PHP
判断是否为指定长度内字符串的php函数
2010/02/16 PHP
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
PHP常用数组函数介绍
2014/07/28 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
PHP join()函数用法与实例讲解
2019/03/11 PHP
Javascript string 扩展库代码
2010/04/09 Javascript
js 获取坐标 通过JS得到当前焦点(鼠标)的坐标属性
2013/01/04 Javascript
js实现图片点击左右轮播
2015/07/08 Javascript
Angular2 环境配置详细介绍
2016/09/21 Javascript
DropDownList实现可输入可选择(两种版本可选)
2016/12/07 Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
2017/07/16 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
2018/01/03 Javascript
Vue实现搜索 和新闻列表功能简单范例
2018/03/16 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
Vue 进阶之路(三)
2019/04/18 Javascript
Vue.js下拉菜单组件使用方法详解
2019/10/19 Javascript
实用的 vue tags 创建缓存导航的过程实现
2020/12/03 Vue.js
[02:27]2014DOTA2国际邀请赛 VG赛后采访:更大的挑战在等着我们
2014/07/13 DOTA
python利用elaphe制作二维条形码实现代码
2012/05/25 Python
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
python tensorflow基于cnn实现手写数字识别
2018/01/01 Python
Python3.6实现连接mysql或mariadb的方法分析
2018/05/18 Python
Centos下实现安装Python3.6和Python2共存
2018/08/15 Python
python aiohttp的使用详解
2019/06/20 Python
python是否适合网页编程详解
2019/10/04 Python
Python调用接口合并Excel表代码实例
2020/03/31 Python
Python批量获取并保存手机号归属地和运营商的示例
2020/10/09 Python
HTML5 canvas基本绘图之文字渲染
2016/06/27 HTML / CSS
世界领先的在线地板和建筑材料批发商:BuildDirect
2017/02/26 全球购物
施华洛世奇中国官网:SWAROVSKI中国
2020/06/16 全球购物
高三自我评价
2014/02/01 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
音乐会主持人开场白
2015/05/28 职场文书
Python中字符串对象语法分享
2022/02/24 Python