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使用ctypes模块调用windowsapi获取系统版本示例
Apr 17 Python
剖析Python的Twisted框架的核心特性
May 25 Python
深入理解Python对Json的解析
Feb 14 Python
python使用Apriori算法进行关联性解析
Dec 21 Python
使用pycharm生成代码模板的实例
May 23 Python
python3解析库pyquery的深入讲解
Jun 26 Python
python事件驱动event实现详解
Nov 21 Python
python进阶之自定义可迭代的类
Aug 20 Python
python3 selenium自动化 frame表单嵌套的切换方法
Aug 23 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
Apr 20 Python
Django前后端分离csrf token获取方式
Dec 25 Python
Matlab如何实现矩阵复制扩充
Jun 02 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开发者的编程指南 第一部分降低复杂程度
2016/01/18 PHP
php用户名的密码加密更安全的方法
2019/06/21 PHP
用js查找法实现当前栏目的高亮显示的代码
2007/11/24 Javascript
Exjs 入门篇
2010/04/07 Javascript
解决遍历时Array.indexOf产生的性能问题
2012/07/03 Javascript
js批量设置样式的三种方法不推荐使用with
2013/02/25 Javascript
jQuery中has()方法用法实例
2015/01/06 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
jQuery实现html表格动态添加新行的方法
2015/05/28 Javascript
简介JavaScript中search()方法的使用
2015/06/06 Javascript
JS正则替换掉小括号及内容的方法
2016/11/29 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
vue之封装多个组件调用同一接口的案例
2020/08/11 Javascript
[01:35:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第一场 1月18日
2021/03/11 DOTA
python快速查找算法应用实例
2014/09/26 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
2018/03/20 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
如何利用python读取micaps文件详解
2020/10/18 Python
Python爬取豆瓣数据实现过程解析
2020/10/27 Python
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
Luxplus荷兰:以会员价购买美容产品等,独家优惠
2019/08/30 全球购物
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
石油大学毕业生自荐信
2014/01/28 职场文书
面试自我介绍演讲稿
2014/04/29 职场文书
啤酒节策划方案
2014/05/28 职场文书
师范类求职信
2014/06/21 职场文书
支部书记四风对照材料
2014/08/28 职场文书
化工实习心得体会
2014/09/09 职场文书
抄袭同学作业检讨书1000字
2014/11/20 职场文书
颐和园英文导游词
2015/01/30 职场文书
催款函范本大全
2015/06/24 职场文书
少儿励志名言(80句)
2019/08/14 职场文书
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
2021/05/25 Python
Redis实现一个账号只能登录一个设备
2022/04/19 Redis