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程序设计入门(5)类的使用简介
Jun 16 Python
Python中的字符串替换操作示例
Jun 27 Python
Python中%r和%s的详解及区别
Mar 16 Python
Python下使用Scrapy爬取网页内容的实例
May 21 Python
PowerBI和Python关于数据分析的对比
Jul 11 Python
python小项目之五子棋游戏
Dec 26 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
Mar 30 Python
python中for in的用法详解
Apr 17 Python
Pandas之read_csv()读取文件跳过报错行的解决
Apr 21 Python
Python小白垃圾回收机制入门
Jun 09 Python
python IP地址转整数
Nov 20 Python
python库Tsmoothie模块数据平滑化异常点抓取
Jun 10 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
德生BCL3000的电路分析和打磨
2021/03/02 无线电
cmd下运行php脚本
2008/11/25 PHP
PHP的加密方式及原理
2012/06/14 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
PHP遍历XML文档所有节点的方法
2015/03/12 PHP
Docker配置PHP开发环境教程
2016/12/21 PHP
使用laravel指定日志文件记录任意日志
2019/10/17 PHP
jQuery中的bind绑定事件与文本框改变事件的临时解决方法
2010/08/13 Javascript
引用 js在IE与FF之间的区别详细解析
2013/11/20 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
jQuery简单实现网页选项卡特效
2014/11/24 Javascript
CodeMirror js代码加亮使用总结
2017/03/25 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
Javascript格式化并高亮xml字符串的方法及注意事项
2018/08/13 Javascript
解决vue移动端适配问题
2018/12/12 Javascript
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
Django中模版的子目录与include标签的使用方法
2015/07/16 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
python导入库的具体方法
2020/06/18 Python
Python pip安装第三方库实现过程解析
2020/07/09 Python
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
【HTML5】3D模型--百行代码实现旋转立体魔方实例
2016/12/16 HTML / CSS
匡威比利时官网:Converse Belgium
2017/04/13 全球购物
网站域名和主机:Domain.com
2019/04/01 全球购物
新闻学专业大学生职业生涯规划范文
2014/03/02 职场文书
经典洗发水广告词
2014/03/13 职场文书
给校长的建议书100字
2014/05/16 职场文书
植树造林的宣传标语
2014/06/23 职场文书
生物工程专业求职信
2014/09/03 职场文书
交通事故赔偿协议书
2014/10/16 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
优秀党员申报材料
2014/12/18 职场文书
格列夫游记读书笔记
2015/07/01 职场文书
安全教育培训制度
2015/08/06 职场文书
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL