mitmproxy 有 3 个核心工具:

  • mitmproxy - 控制台模式,提供一个控制台界面,可以实时查看发生的请求,并通过命令过滤请求,查看请求数据
  • mitmdump - 命令行模式,提供了类似 tcpdump 的功能,可查看、记录和已编程的方式转换 HTTP 流量
  • mitmweb - Web 模式,提供一个 Web 界面,可实时查看发生的请求,并通过 GUI 交互过滤请求、查看请求数据

这里只介绍 mitmproxy 工具的使用,其他 2 个工具使用方式类似。

运行 mitmproxy 工具

  1. ./mitmproxy --listen-host=0.0.0.0 -p 8080

其他的配置参数使用 ./mitmproxy --help 查看。

用户界面

客户端配置好代理后访问网站或使用 App,就可以在 mitmproxy 中拦截捕获请求了。
为了实验方便我们使用命令行来完成此次的实验。

首先开启另一个终端,输入以下命令:

  1. $ curl --proxy http://127.0.0.1:8080 http://wttr.in
  2. $ curl --proxy http://127.0.0.1:8080 https://m.huanyuliren.cn -k

curl-proxy-testing
在 mimtproxy 控制台界面中可以观察到浏览记录:
mitmproxy-console
一些常用的键位:

  • 可更换流。
  • ENTER 可查看流的详细信息,详细信息有 3 个窗口:请求、响应和详细信息。
  • 可切换窗口查看信息。
  • q 可退出当前视图。
  • z 可清屏。
  • O 可查看或修改配置。
  • o 可进行排序。

其他的键位可以按 ? 查看。

最常用的键位为 : 可打开命令提示符,输入命令后按 ENTER 可执行命令。
先初步了解下命令模式的使用。
打开命令提示符输入 console.view.flow @focus 指令可打开目标流的详细信息视图。

想查看所有指令可使用 mitmproxy 工具加上 --commands 查看:

  1. $ ./mitmproxy --commands
  2. # Start an isolated instance of Chrome that points to the currently
  3. # running proxy.
  4. browser.start
  5. commands.history.add command
  6. commands.history.clear
  7. commands.history.filter prefix
  8. # Get the entire command history.
  9. commands.history.get -> str[]
  10. commands.history.next -> str
  11. commands.history.prev -> str
  12. # Spawn an external viewer for a flow request or response body based
  13. # on the detected MIME type. We use the mailcap system to find the
  14. # correct viewier, and fall back to the programs in $PAGER or $EDITOR
  15. # if necessary.
  16. console.bodyview flow part
  17. # Possible parts for console.bodyview.
  18. console.bodyview.options -> str[]
  19. ...

拦截请求