抓包工具:Mitmproxy
Mitmproxy 是一组工具,它们为 HTTP/1、 HTTP/2 和 WebSocket 提供交互式、支持 SSL/TLS 的拦截代理。
特性
- 拦截 HTTP 和 HTTPS 请求和响应并动态修改它们。
- 保存完整的 HTTP 对话,以便以后重放和分析。
- 重放 HTTP 会话的客户端。
- 重放以前记录的服务器的 HTTP 响应。
- 反向代理模式将流量转发到指定的服务器。
- MacOS 和 Linux 上的透明代理模式。
- 使用 Python 脚本对 HTTP 流量进行更改。
- 用于拦截动态生成的 SSL/TLS 证书。
- 更多特性,请参考:Mitmproxy 官方文档。
三个强大的核心工具
Mitmproxy 项目是一组展示通用的底层功能的前端工具。当谈论“mitmproxy”时,通常指的是这三个工具中的任何一个——它们只是同一个核心代理的不同前端。
- mitmproxy 是一个交互式的、支持 SSL/TLS 的拦截代理,用于 HTTP/1、 HTTP/2 和 WebSocket 的控制台接口。
- mitmweb 是 mitmproxy 的一个基于Web的接口。
- mitmdump 是 mitmproxy 的命令行版本。用户 HTTP 的 tcpdump。
在 Mitmproxy 官网 可以找到发行的软件包。开发信息和源代码可以在 GitHub 存储库中找到。
mitmproxy
mitmproxy 是一个控制台工具,允许交互式检查和修改 HTTP 流量。它与 mitmdump 的不同之处在于,所有流都保存在内存中,这意味着它用于获取和操作小型样本。在 mitmproxy 窗口中使用 ? 快捷键查看上下文文档。
mitmweb
mitmweb 是 mitmproxy 的基于 web 的用户界面,允许交互式检查和修改 HTTP 流量。与 mitmproxy 一样,它与 mitmdump 的不同之处在于所有流都保存在内存中,这意味着它用于获取和操作小型样本。
Mitmweb 目前处于测试阶段。它对于当前暴露在 UI 中的所有特性都是稳定的,但是它仍然遗漏了很多 mitmproxy 的特性。
mitmdump
mitmdump 是 mitmproxy 的命令行伙伴。它提供了类似 tcpdump 的功能,允许查看、记录和以编程方式转换 HTTP 流量。命令添加 –help 标识查看输出的完整文档。
示例:保存流量
1 | mitmdump -w outfile |
在代理模式下启动 mitmdump,并将所有流量写入 outfile。
过滤保存的流量
1 | mitmdump -nr infile -w outfile "~m post" |
启动 mitmdump 而不绑定到代理端口(-n),从 infile 中读取所有流,应用指定的筛选器表达式(只匹配 POST),并写入 outfile。
客户端重放
1 | mitmdump -nC outfile |
启动 mitmdump 而不绑定到代理端口(-n),然后重放来自 outfile (-C filename)的所有请求。标识以显而易见的方式组合在一起,因此可以重放来自一个文件的请求,并将结果流写入另一个文件:
1 | mitmdump -nC srcfile -w dstfile |
更多信息请参见 client-side replay。
运行脚本
1 | mitmdump -s examples/simple/add_header.py |
这将运行 add_header.py 示例脚本,该脚本只是向所有响应添加一个新的头。
脚本数据转换
1 | mitmdump -ns examples/simple/add_header.py -r srcfile -w dstfile |
此命令从 srcfile 加载流,根据指定的脚本对其进行转换,然后将其写回 dstfile。