我第一次尝试使用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我可以在J2EE1.4中使用JAXR吗   YouTube数据API超出了未经验证的java每日使用限制   java RED5 RTMPConnManager未设置applicationContext局部变量。这会导致NullPointerException   java多部分/formdata,加载图像(安卓)   java Struts 2<s:select>填充表单中的其他字段   java Eclipse在迁移后不会将邮件属性传递给Spring Boot   java如何检查请求的TLS版本   java如何从包中导入相同的类   如何在java中将BLOB字符串转换为人类可读的格式字符串   java使用Play映射特定的文件路径!框架   java Eclipse重构   在子字符串上使用“预定义字符类”的java   java如何在SeleniumWebDriver中选择li中的锚定标记?   jspjava。木卫一。FileNotFoundException:系统找不到指定的路径   java Hi,在启动cmd\design javafx\cmd eclipse时,我的文件不是删除的,也不是复制的   java Selenium Web驱动程序异常“找不到:taskkill的可执行文件”   java如何获得数组的迭代器?