我第一次尝试使用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 (如果你想不通-请不要联系我:)