mitmproxy是基于python的抓包代理工具,支持https等协议。同时,依托python平台,可以外挂处理脚本(python编写),是非常合适的抓包、解包、改包工具。
一般来说,在桌面系统,有比较完善的、界面友好的抓包工具,比如Charles。一些测试都可以在本地完成,但如果需要长时间的外网访问,这些工具就显得不足了。
不过,我们可以通过VPS+mitmproxy+脚本(script)的方式实现Charles的功能。本次将会介绍VPS如何安装mitmproxy和用脚本(script)实现Charles的Map Local功能。
VPS安装mitmproxy
以ubuntu为例,安装python3和pip。
$ sudo apt-get update $ sudo apt-get install python3 $ sudo apt install python3-pip
使用pip命令,安装mitmproxy。
sudo pip3 install mitmproxy
完成后,你就成功安装了mitmproxy。现在有三个命令可以使用:mitmproxy
、mitmdump
和mitmweb
。
简单来说,mitmproxy是命令行版本,mitmdump是信息简化版,mitmweb则是提供了一个网页版的后台。
对于我们来说可以直接使用如下命令启动代理监听:
# -p 监听端口 # --set block_global=false 允许外网连接到代理服务器 mitmdump -p 8888 --set block_global=false
用脚本实现Charles的Map Local功能
首先需要在本地对修改进行测试好,生成好需要map的本地文件(例如Test.json
),并上传到服务器。
创建代理脚本文件 scrip.py
,内容如下
from mitmproxy import http def request(flow: http.HTTPFlow) -> None: if flow.request.pretty_url == "https://example.com/test/Test_online.json": # 需要map的请求 with open('/www/mitm/Test.json', 'r') as f: # 输入本地map文件的绝对路径 content = f.read() flow.response = http.HTTPResponse.make( 200, # (optional) status code content, # (optional) content {"Content-Type": "text/plain"} # (optional) headers )
更多说明请参阅官方文档。
将启动命令中加入刚才创建好的脚本
# -p 监听端口 # --set block_global=false 允许外网连接到代理服务器 # -s 脚本的绝对地址 mitmdump -p 8888 --set block_global=false -s /root/mitm/script.py
至此,我们就完成了VPS安装mitmproxy,并用脚本(script)实现了Charles的Map Local功能。