VPS安装mitmproxy用脚本实现Charles的Map Local功能

mitmproxy是基于python的抓包代理工具,支持https等协议。同时,依托python平台,可以外挂处理脚本(python编写),是非常合适的抓包、解包、改包工具。

一般来说,在桌面系统,有比较完善的、界面友好的抓包工具,比如Charles。一些测试都可以在本地完成,但如果需要长时间的外网访问,这些工具就显得不足了。

不过,我们可以通过VPS+mitmproxy+脚本(script)的方式实现Charles的功能。本次将会介绍VPS如何安装mitmproxy和用脚本(script)实现Charles的Map Local功能。

VPS安装mitmproxy

以ubuntu为例,安装python3和pip。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ sudo apt-get update
$ sudo apt-get install python3
$ sudo apt install python3-pip
$ sudo apt-get update $ sudo apt-get install python3 $ sudo apt install python3-pip
$ sudo apt-get update
$ sudo apt-get install python3
$ sudo apt install python3-pip

使用pip命令,安装mitmproxy。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo pip3 install mitmproxy
sudo pip3 install mitmproxy
sudo pip3 install mitmproxy

完成后,你就成功安装了mitmproxy。现在有三个命令可以使用:

mitmproxy
mitmproxy
mitmdump
mitmdump
mitmweb
mitmweb

简单来说,mitmproxy是命令行版本,mitmdump是信息简化版,mitmweb则是提供了一个网页版的后台。

对于我们来说可以直接使用如下命令启动代理监听:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# -p 监听端口
# --set block_global=false 允许外网连接到代理服务器
mitmdump -p 8888 --set block_global=false
# -p 监听端口 # --set block_global=false 允许外网连接到代理服务器 mitmdump -p 8888 --set block_global=false
# -p 监听端口
# --set block_global=false 允许外网连接到代理服务器
mitmdump -p 8888 --set block_global=false

用脚本实现Charles的Map Local功能

首先需要在本地对修改进行测试好,生成好需要map的本地文件(例如

Test.json
Test.json),并上传到服务器。

创建代理脚本文件

scrip.py
scrip.py,内容如下

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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
)
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 )
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
        )

更多说明请参阅官方文档

将启动命令中加入刚才创建好的脚本

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# -p 监听端口
# --set block_global=false 允许外网连接到代理服务器
# -s 脚本的绝对地址
mitmdump -p 8888 --set block_global=false -s /root/mitm/script.py
# -p 监听端口 # --set block_global=false 允许外网连接到代理服务器 # -s 脚本的绝对地址 mitmdump -p 8888 --set block_global=false -s /root/mitm/script.py
# -p 监听端口
# --set block_global=false 允许外网连接到代理服务器
# -s 脚本的绝对地址
mitmdump -p 8888 --set block_global=false -s /root/mitm/script.py

至此,我们就完成了VPS安装mitmproxy,并用脚本(script)实现了Charles的Map Local功能。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注