我第一次尝试使用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 xpath解析无法正确解析   java为什么这个JComponent不能正确绘制?   javajavax。加密。BadPaddingException:错误:1e06b065:密码函数:EVP_DecryptFinal_ex:BAD_DECRYPT异常   如何使用Java将数据设置为Selenium Chrome驱动程序的ChromeOptions?   java计算在论坛上回复答案所需的时间   java在循环链表和迭代器API中缺乏确定性   JAVAutil。扫描器使用Java扫描器类,如何获取特定字符串后面的最新数字?   转换Java。util。使用Jersey和JAXBElement映射到JSON对象   java查找Android库包名称和版本   通过ProcessBuilder的java(阻塞)交互式shell   java捕获异常和错误   java组织。springframework。奥姆。冬眠3。HibernateSystemException:未知实体   矩阵乘法/加法中的java并发性   java计算网络的连接计数   java代码没有按它应该做的那样做?   JavaCXFSOAPWS客户端存根。pfx证书认证   Java剥离/删除字符串中的多个单词   nutch教程“根目录下文档中的标记必须格式良好”之后的java“致命错误”