抓包工具: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。