什么是 mitmproxy
mitmproxy是一款支持HTTP(S)的中间人代理工具。不同于Fiddler2,burpsuite等类似功能工具,mitmproxy可在终端下运行。mitmproxy使用Python开发,是辅助web开发&测试,移动端调试,渗透测试的工具。
安装
mac 安装
brew install mitmproxy
或
pip3 install mitmproxy
说明
mitmproxy 提供了3个命令 :
- mitmdump :纯命令行界面,类似 tcpdump
- mitmproxy :命令行模式,类似 vim
- mitmweb :带 web 界面的
mitmproxy
直接执行 mitmproxy 会打开本机的8080端口
然后手机开启http 代理,设置完代理后访问 mitm.it
点击对应的图标安装证书并使系统信任该证书,安装证书是为了当请求 HTTPS 页面的内容也可以看到具体的请求头和响应头信息,然后访问页面 PC 端就会出现对应的请求信息了
按方向键上下键进入对应的 URL 内查看请求 响应等字段,按左右键切换,按 q 键返回主界面。
在请求列表界面按 i,在左下角会显示 Intercept filter:,要求输入过滤表达式,用于指示拦截哪些请求,此处的过滤表达式的语法同请求列表过滤表达式相同。
比如输入 baidu.com,则当请求到百度时候请求会被拦截并以橙色标识(颜色根据终端设置不一样会显示不一样)
请求拦截后可以编辑重新发送,也可以直接放行,比如进入到该请求的响应里面按 e 键设置一些参数
自定义端口和 IP 和端口
mitmproxy --listen-host 0.0.0.0 -p 8888
mitmweb
执行 mitmweb 后会打开浏览器
出现如图所示的对话框,当有请求时候则都会显示在这里
mitmdump
默认执行 mitmdump
三个命令具体的参数都可以看帮助
--help
API
from mitmproxy import http
def request(flow: http.HTTPFlow):
# redirect to different host
if flow.request.pretty_host == "example.com":
flow.request.host = "mitmproxy.org"
# answer from proxy
elif flow.request.path.endswith("/brew"):
flow.response = http.HTTPResponse.make(
418, b"I'm a teapot",
)
python 的相关 exmaples 可以查看 GitHub 源码
比如说将所有请求头的 server 都改成 nginx
from mitmproxy import http
def response(flow: http.HTTPFlow) -> None:
flow.response.headers["newheader"] = "foo"
保存为 Python 文档后执行
mitmproxy -s xxx.py