答案1
尝试米特普罗西。
mitmproxy 是一个支持 SSL 的 HTTP 中间人代理。它提供了一个控制台界面,允许动态检查和编辑流量。
mitmdump 是 mitmproxy 的命令行版本,具有相同的功能,但没有用户界面。想想 HTTP 的 tcpdump。
特征
- 拦截 HTTP 请求和响应并即时修改它们。
- 保存完整的 HTTP 对话以供以后重播和分析。
- 重放 HTTP 会话的客户端。
- 重播先前记录的服务器的 HTTP 响应。
- 反向代理模式将流量转发到指定服务器。
- 使用 Python 对 HTTP 流量进行脚本化更改。
- 用于拦截的 SSL 证书是动态生成的。
截屏
例子
我设置了一个例子杰基尔引导程序应用程序正在我的本地主机上侦听端口 4000。为了拦截它的流量,我会执行以下操作:
% mitmproxy --mode reverse:http://localhost:4000 -p 4001
然后从我的 Web 浏览器 ( ) 连接到端口 4001 上的 mitmproxy http://localhost:4001
,结果是 mitmproxy:
然后,您可以选择任何结果GET
来查看与其关联的标题信息GET
:
参考
答案2
mitmproxy
/mitmdump
相当于tcpdump
HTTPS 的是mitmdump
。步骤如下:
- 安装
mitmproxy
包(macOSbrew install mitmproxy
:)。 安装mitmproxy CA 证书通过以下命令:
$ mitmdump --mode reverse:http://mitm.it/ -p 8080 $ wget --content-disposition http://localhost:8080/cert/pem $ open mitmproxy-ca-cert.pem # Open, install and mark the certificate as trusted.
现在,这是如何测试反向代理的简单测试:
- 跑步:
mitmdump --mode reverse:https://example.com/ -p 4433
。 在另一个 shell 中,运行
curl https://localhost:4433
:现在,您应该看到页面源代码和
mitmdump
命令应该产生如下输出:Proxy server listening at http://*:4433 [::1]:49446: clientconnect [::1]:49446: GET https://example.com/ HTTP/2.0 << 200 1.24k [::1]:49446: clientdisconnect
对于所有流量,只需运行:mitmdump
或mitmproxy
。
看:mitmproxy
文档页面更多细节。
查尔斯·普罗克斯
如果您使用的是 macOS,还有查尔斯·普罗克斯应用程序 (GUI),允许查看主机之间的所有 HTTP 和 SSL/HTTPS 流量。
答案3
在某些情况下,您可以使用接受传入 HTTP 请求并发出传出 HTTPS 请求的代理。举个例子,我想捕获git
github.com 之间的流量。我用了米特普罗西:
mitmproxy -s httpser.py
哪里httpser.py
:
def request(context, flow):
flow.request.scheme = 'https'
flow.request.port = 443
然后我git
像这样跑:
export http_proxy="http://127.0.0.1:8080/"
git clone http://github.com/oxplot/difftr
现在使用wireshark
Listen on localhost
,可以捕获普通流量。如果没有代理,github 将重定向git
以使用 HTTPS。