mitmproxy 是 man-in-the-middle proxy 的简称,译为中间人代理工具,能够用来拦截、修改、保存 HTTP/HTTPS 请求。以命令行终端形式呈现,操做上相似于Vim,同时提供了 mitmweb 插件,是相似于 Chrome 浏览器开发者模式的可视化工具。html
它是基于Python开发的开源工具,最重要的是它提供了Python API,你彻底能够经过Python代码来控制请求和响应,这是其它工具所不能作到的,这点也是我喜欢这个工具的缘由之一。python
sudo pip3 install mitmproxy
复制代码
mitmproxy
#或者指定端口
mitmproxy -p 8888
复制代码
启动 mitmproxy 以后,默认开启8080端口, mitmproxy 命令不支持Windows平台,须要使用 mitmdump 或者 mitmweb 命令代替。Windows系统也能够在官网下载它的EXE文件进行安装。git
手机或者浏览器设置好代理以后,就能够进行抓包分析了,打开浏览器访问某个网址,mitmproxy 看到的效果是:github
当前一共有136个请求,当前选择的是第16个请求,请求方法是 GET, 返回的状态码是200,代理的端口是8080,经过 J、K 键可上下切换到不一样的请求,回车能够看到当前选中的请求详情,包括三部分,Request和Response还有 Detailweb
mitmproxy 快捷键编程
? 帮助文档
q 返回/退出程序
b 保存response body
f 输入过滤条件
k 上
j 下
h 左
l 右
space 翻页
enter 进入接口详情
z 清屏
e 编辑
r 从新请求
复制代码
对于HTTPS请求,为了能正常抓到请求,须要先安装证书。没安装证书的请求看到的效果是这样的。浏览器
打开网址 mitm.it , 选择匹配的平台,下载 HTTPS 证书。并按照对应的步骤进行安装bash
$ mitmweb
复制代码
启动 mitmweb 命令后,会有一个相似Chrome开发者工具的Web页面,功能上相似mitmroxy,同样能够查看每一个请求的详情,包括请求、响应,还能够对请求和响应内容进行修改,包括过滤、从新发送请求等经常使用功能。工具
$ mitmdump -s script.py
复制代码
mitmdump 命令最大的特色就是能够自定义脚本,你能够在脚本中对请求或者响应内容经过编程的方式来控制,实现数据的解析、修改、存储等工做spa
# 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)
复制代码
当你在浏览器请求 httpbin.org/get ,看到的效果:
你还能够参考这些连接:
同步发表博客:foofish.net