找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1472

积分

0

好友

191

主题
发表于 昨天 03:59 | 查看: 4| 回复: 0

mitmproxy 是一个强大的“中间人代理工具”,其核心功能在于拦截、查看并可能修改设备的网络请求与响应数据。对于想要理解数据流动或进行数据采集的开发者来说,它是一把利器。

它常被用来:

  • 找到 App 或网页背后的真实接口。
  • 观察请求参数、头部信息以及返回的原始数据。
  • 为后续的爬虫开发或自动化脚本获取关键信息做准备。

1. 安装 mitmproxy(任选一种方式)

方法 A:Python pip 安装(推荐,跨平台)

这是最通用便捷的方式,前提是你的系统已安装 Python 和 pip。

python -m pip install -U mitmproxy

方法 B:macOS Homebrew

如果你使用 macOS,可以通过 Homebrew 安装。

brew install mitmproxy

方法 C:Windows Chocolatey

Windows 用户可以通过 Chocolatey 包管理器进行安装。

choco install mitmproxy

安装验证

安装完成后,可以通过以下命令验证是否成功。

mitmproxy --version

2. 基础启动与界面说明

mitmproxy 提供了三种常用模式以适应不同场景:

  • mitmproxy:基于终端的交互式界面,功能强大,适合熟悉命令行的用户。
  • mitmweb:基于 Web 的可视化界面,操作直观,对新手非常友好。
  • mitmdump:纯命令行模式,适合用于脚本化、批量化的抓包任务。

对于初学者,强烈建议从 mitmweb 开始,它提供了一个更直观的浏览器操作界面。

mitmweb

执行后,默认会在 127.0.0.1:8080 地址上启动代理服务,并自动打开 Web 管理页面。

3. 设置代理(让设备流量经过 mitmproxy)

要让 mitmproxy 捕获到网络流量,关键一步是配置设备使用它作为代理服务器。

3.1 电脑自身抓包

如果你想抓取本机浏览器或应用的数据,只需将系统网络代理设置为:

  • 代理地址:127.0.0.1
  • 端口:8080

3.2 手机抓包(常见场景)

抓取手机 App 的流量是更常见的需求,步骤如下:

  1. 确保手机和运行 mitmproxy 的电脑连接在同一个 Wi-Fi 网络下。
  2. 在电脑上查看本机在局域网内的 IP 地址,例如 192.168.1.100
  3. 在手机的 Wi-Fi 设置中,找到代理配置项,选择“手动”:
    • 服务器:192.168.1.100 (即你的电脑 IP)
    • 端口:8080

3.3 允许外部设备连接

当你尝试从手机等外部设备连接时,可能需要启动 mitmproxy 时添加参数,以允许非本地连接:

mitmweb --set block_global=false

4. 安装 HTTPS 证书(必须,否则只能看到 HTTP)

现代应用和网站普遍使用 HTTPS 加密通信。为了解密并查看这些内容,必须在客户端(手机或电脑)上安装 mitmproxy 提供的 CA 证书。

操作很简单:在已设置代理的设备上,用浏览器访问 http://mitm.it
页面会根据你的设备类型(iOS, Android, Windows 等)提供对应的证书下载和安装指引。请务必完成安装并信任该证书(特别是在 iOS 和 Android 上需要手动在系统设置中启用完全信任),之后才能正常看到 HTTPS 请求和响应的具体内容。

5. 第一次抓包实战(看接口)

现在可以进行一次完整的抓包体验了。

5.1 开启 mitmweb

使用允许外部连接的命令启动:

mitmweb --set block_global=false

5.2 打开 App 或网页

保持 mitmproxy 运行,在手机或电脑上正常使用 App 或访问网页。此时,所有网络请求都会经过代理,并在 mitmweb 的页面列表中实时显示。

mitmweb 页面顶部的过滤器(Filter)输入框中,可以使用以下语法快速筛选请求:

  • 只看 URL 包含 “api” 的请求:~u api
  • 只看特定域名(如 api.example.com)的请求:~d api.example.com
  • 只看返回内容类型为 JSON 的请求:~t json

6. 用脚本自动保存接口数据(爬虫的第一步)

手动查看很棒,但自动化才是效率的关键。mitmdump 模式允许我们通过 Python 脚本处理每一条流过的请求/响应。

新建一个名为 save_json.py 的脚本文件,写入以下内容:

from mitmproxy import http
import os
import time

def response(flow: http.HTTPFlow):
    # 只抓取 JSON 接口
    ctype = flow.response.headers.get("content-type", "")
    if "application/json" not in ctype:
        return

    # 只抓取你关心的域名,例如 api.example.com
    if "api.example.com" not in flow.request.pretty_host:
        return

    os.makedirs("captures", exist_ok=True)
    ts = time.strftime("%Y%m%d_%H%M%S")
    path = f"captures/{ts}.json"

    with open(path, "wb") as f:
        f.write(flow.response.content)

    print(f"saved: {path}")

这个脚本实现了自动化抓包逻辑:它检查每个响应的内容类型和请求域名,如果匹配预设条件(例如来自 api.example.com 的 JSON 数据),就将其以时间戳为文件名保存到 captures 文件夹中。

使用 mitmdump 加载并运行这个脚本:

mitmdump -s save_json.py --set block_global=false

之后,你在设备上的任何操作,只要触发了目标接口,数据就会自动保存下来。这为后续的数据分析或 Python 爬虫开发提供了原材料。

7. 从抓包到“爬虫”:复现请求

抓到接口并分析其请求参数后,下一步就是用 Python 脚本模拟这个请求,实现自动化的数据获取。

以下是一个使用 requests 库复现 GET 请求的简单示例:

import requests

url = "https://api.example.com/list"
headers = {
    "User-Agent": "Mozilla/5.0",
    "Authorization": "Bearer your_token_here"
}

r = requests.get(url, headers=headers, timeout=10)
print(r.json())

在实际操作中,你需要从 mitmproxy 捕获的请求中仔细复制所需的 URL、请求头(Headers)、Cookie 或 Token、以及请求体(Body)参数,才能成功模拟客户端行为。掌握 HTTP/HTTPS 协议细节在此环节至关重要。

8. 常见问题排查

8.1 HTTPS 看不到内容

  • 证书未安装或未完全信任:这是最常见的原因。请确保在客户端设备上访问 mitm.it 下载并安装了证书,并在系统设置中完成了信任操作(尤其是移动设备)。
  • App 启用证书锁定(SSL Pinning):部分 App 会校验服务器证书,不信任用户安装的 CA 证书。对于新手,建议先从网页或未启用此功能的 App 开始练习。

8.2 手机抓不到包

  • 启动命令错误:忘记添加 --set block_global=false 参数。
  • 网络不通:手机和电脑不在同一局域网段,或防火墙阻止了连接。请检查 IP 地址和网络设置。

8.3 特定App请求缺失

  • 绕过系统代理:一些 App 可能直接使用原生 Socket 或不经过系统代理设置。可尝试使用 VPN 模式或透明代理等高级配置,但这需要更多 逆向分析 知识。

9. 安全与合规提示(务必阅读)

技术是把双刃剑,使用 mitmproxy 时必须遵守道德与法律底线:

  • 仅用于授权测试:只对你拥有合法权限访问的网站、应用或接口进行分析。
  • 保护隐私:切勿抓取、保存或传播他人的个人隐私和敏感数据。
  • 遵守协议:尊重目标网站的服务条款和 robots.txt 协议,避免对服务器造成过大压力。

通过本文,你已掌握了 mitmproxy 从安装配置到自动化抓包的核心流程。它不仅是爬虫数据采集的“望远镜”,更是理解网络通信、进行安全测试的利器。建议从简单的网页抓包开始实践,逐步尝试编写更复杂的处理脚本。如果你想与更多开发者交流此类工具的使用心得,欢迎访问 云栈社区 的相关板块探讨。




上一篇:C++ const_cast 误用导致生产环境服务反复崩溃的排查实录
下一篇:AI模型上下文(Context)详解:从4K到128K窗口大小如何影响性能
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-18 18:12 , Processed in 0.339733 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表