MitmProxy使用:mitmproxy、mitmweb、mitmdump

 

介绍

mitmproxy是Python编写的一款功能完善的代理工具,mitmproxy是一款支持拦截HTTP和HTTPS请求和响应并即时修改它们的交互式中间人代理工具。同时它提供了Python API给开发者编写插件用来自定义对流量进行处理和修改。

为什么选择 mitmproxy

  • 相对于我们常用的 fiddle 代理工具,它是可以跨平台;
  • 相对于跨平台的 charles 代理工具,它是开源免费的;
  • 最重要的一点,也是为什么我们采用 mitmproxy 来进行做 Mock,它支持使用 Python 进行二次开发,这样就可以结合业务进行灵活拓展了。

mitmproxy 构成

  • mitmproxy:是一个控制台工具,允许交互式检查和修改 HTTP 流量;
  • mitmweb:mitmproxy 是基于 Web 的用户界面,它允许交互式检查和修改 HTTP 流量;
  • mitmdump:mitmproxy 的命令行版本。它提供了类似 tcpdump 的功能,可查看、记录和以编程方式转换 HTTP 流量。

安装

pip3 install mitmproxy

启动

mitmproxy
#或者指定端口
mitmproxy -p 8888

启动 mitmproxy 之后,默认开启8080端口, mitmproxy 命令不支持Windows平台,需要使用 mitmdump 或者 mitmweb 命令代替。Windows系统也可以在官网下载它的EXE文件进行安装。

快速部署

设置本地代理

export http_proxy="127.0.0.1:8080"

拉取mitmproxy镜像

docker pull mitmproxy/mitmproxy

运行镜像

docker run --rm -it -p 8080:8080 mitmproxy/mitmproxy mitmproxy

 

mitmproxy 控制台

快速测试

curl http://readtest.cn/

访问结果:

 

 

 注意:现在访问https无法劫持,需要访问http://mitm.it 来安装证书,选择匹配的平台,下载 HTTPS 证书。并按照对应的步骤进行安装

mitmproxy 快捷键

? 帮助文档  
q 返回/退出程序 
b 保存response body 
f 进入编辑模式,可在最下面输入过滤条件,ESCEnter退出编辑
  • !(~c 200) #显示所有返回不是200的请求
  • !(~c 200) & ~d safecode #显示域名包含safecode,返回不是200的请求
  • ~m post & ~u safe #显示请求的链接里面包含safe的post请
k 上
j 下
h 左
l 右
space 翻页
enter 进入接口详情
z 清屏
e 编辑
r 重新请求

mitmweb

$ mitmweb

启动 mitmweb 命令后,会有一个类似Chrome开发者工具的Web页面,功能上类似mitmroxy,一样可以查看每个请求的详情,包括请求、响应,还可以对请求和响应内容进行修改,包括过滤、重新发送请求等常用功能。

mitmdump

$ mitmdump -s script.py

mitmdump 命令最大的特点就是可以自定义脚本,你可以在脚本中对请求或者响应内容通过编程的方式来控制,实现数据的解析、修改、存储等工作

# script.py
from mitmproxy import http

def request(flow: http.HTTPFlow) -> None:
    # 将请求新增了一个查询参数
    flow.request.query["mitmproxy"] = "rocks"

def response(flow: http.HTTPFlow) -> None:
    # 将响应头中新增了一个自定义头字段
    flow.response.headers["newheader"] = "foo"
    print(flow.response.text)

官网: https://mitmproxy.org
文档:http://docs.mitmproxy.org/en/v0.18.2/introduction.html

 

posted @ 2020-11-06 22:18  -零  阅读(4076)  评论(0编辑  收藏  举报