我第一次尝试使用Tornado创建一个简单而出色的TCP代理

maprox的Python项目详细描述


ma`proxy是一个基于Tornado的简单tcp代理。

嗯,可能没那么简单,因为它支持:

  • TCP->;TCP
    简单反向代理。 无论数据输入,输出
  • TCP->;SSL
    用于加密传入数据的代理。 又名特技演员
  • ssl->;tcp
    用于解密传入数据的代理 a.k.a ssl终止器或ssl解密器
  • ssl->;ssl
    任何进入的内容都将被解密,然后再次加密
  • 每个ssl都可以与ssl证书一起使用。包括客户证书!!

示例:

//更新(2016年8月)// //google现在返回“http 304”(页面已移动), //因此,google示例不起作用。 //此外,这些示例不适用于检查“主机”标题的站点(因为当您在本地连接时,浏览器将发送主机:127.0.0.1)

让我们从最简单的例子开始-没有铃声和口哨声-一个简单的TCP代理:

#!/usr/bin/env python
import tornado.ioloop
import maproxy.proxyserver

# HTTP->HTTP: On your computer, browse to "http://127.0.0.1:81/" and you'll get http://www.google.com
server = maproxy.proxyserver.ProxyServer("www.google.com",80)
server.listen(81)
print("http://127.0.0.1:81 -> http://www.google.com")
tornado.ioloop.IOLoop.instance().start()

我们正在创建在端口81(0.0.0.0:81)上本地侦听的代理(更准确地说,是反向代理) 并将所有呼叫重定向到www.google.com(端口80)。 注意: 一。这不是http代理,因为它在较低的tcp层中运行。此代理与http无关 2.我们实际上在监听所有的IP地址,而不仅仅是127.0.0.1。

现在,假设您希望监听“清晰”(非加密)连接,但连接到SSL网站, 例如-创建代理http://127.0.0.1:82->;https://127.0.0.1:443,只需更新“服务器”行:

#!/usr/bin/env python
import tornado.ioloop
import maproxy.proxyserver

# HTTP->HTTP: On your computer, browse to "http://127.0.0.1:81/" and you'll get http://www.google.com
server = maproxy.proxyserver.ProxyServer("www.google.com",443,server_ssl_options=True)
server.listen(82)
print("http://127.0.0.1:82 -> https://www.google.com",)
tornado.ioloop.IOLoop.instance().start()

或者,您可以监听ssl端口并将连接重定向到明文服务器。 为了监听ssl端口,您需要将ssl服务器证书指定为“client_ssl_options”:

#!/usr/bin/env python
import tornado.ioloop
import maproxy.proxyserver

# HTTPS->HTTP
ssl_certs={     "certfile":  "./certificate.pem",
                "keyfile": "./privatekey.pem" }
# "client_ssl_options=ssl_certs" simply means "listen using SSL"
server = maproxy.proxyserver.ProxyServer("www.google.com",80,
                                         client_ssl_options=ssl_certs)
server.listen(83)
print("https://127.0.0.1:83 -> http://www.google.com")
tornado.ioloop.IOLoop.instance().start()

在源代码的“演示”部分,您还可以找到:

  • 如何使用SSL客户端证书进行连接
  • 如何继承“session”对象(我们内部使用) 并创建一个日志代理(记录所有内容的代理)。

安装:

pip install maproxy

源代码https://github.com/zferentz/maproxy

联系我:zvika d-o-t ferentz a-t gmail d,o,t com (如果你想不通-请不要联系我:)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java有没有工具可以将zephyr转换为velocity模板?   java在安卓 studio中从JSON响应中获取值   jvm如何在Java中设计一个好的permgen空间字符串?   java如何防止Rest webservice使用被盗令牌进行身份验证   java无法遍历列表JSTL   找不到用于ResourceServerTokenServices的java Bean SpringSecurityOauth2   java子字符串替换问题   爪哇玻璃鱼3。十、 以编程方式处理任意HTTPSession的终止   java如何检查输入是否为整数,并在最后添加一个命令来重新启动while循环?   引发java ical4j 1.0.6不可解析日期异常   Java等价于Delphi的DBCtrlGrid?   如果发生错误,java将查找下一个预期标记ANTLR 3   java自打开应用程序(创建锁屏)   java为什么netty有自己的ConcurrentHashMap?   Gradle任务中的java拉取和运行依赖项   继承与Java继承的混淆   java使用shell脚本中的版本执行jar   java我无法让Sqlite数据库与带有Maven的JavaFX应用程序IDE Eclipse包正确通信   java控制台日志未通过org打印。阿帕奇。hadoop。mapreduce。作业的waitForCompletion(true)方法   JAVAlang.NoSuchMethodError:apachestorm螺栓中的spring getrequest