当前位置: 首页 > news >正文

Mac安装mitmproxy及操作对监控的请求

在 macOS 上安装和配置 mitmproxy 是一个相对简单的过程,可以使用常见的包管理工具如 Homebrew 或直接通过 Python 的包管理工具 pip。以下是详细的安装步骤:

方法一:使用 Homebrew 安装
Homebrew 是 macOS 上流行的包管理工具。它可以快速安装 mitmproxy。

安装过程:
1、更新 Homebrew
运行以下命令以确保 Homebrew 是最新的:

brew update

2、安装 mitmproxy
使用 Homebrew 安装 mitmproxy:

brew install mitmproxy

3、验证安装
安装完成后,可以通过以下命令验证版本:

mitmproxy --version

4、输出版本信息即表示安装成功。
启动 mitmproxy 或 mitmweb
启动 mitmproxy:

mitmproxy --listen-host 0.0.0.0 --listen-port 8080

启动 mitmweb(显示 GUI):

mitmweb --listen-host 0.0.0.0 --listen-port 8080

方法二:使用 Python 的 pip 安装
如果没有使用 Homebrew,也可以通过 Python 的包管理工具 pip 安装 mitmproxy,因为它是用 Python 编写的。

安装过程:
1、确保 macOS 上已安装 Python 3
检查 Python 版本,运行以下命令:

python3 --version

如果尚未安装,可以通过 Homebrew 安装:

brew install python

2、升级 pip
在安装 mitmproxy 之前,建议确保 pip 已更新:

python3 -m pip install --upgrade pip

3、安装 mitmproxy
使用 pip 安装 mitmproxy:

python3 -m pip install mitmproxy

4、验证安装
检查 mitmproxy 版本确认安装是否成功:

mitmproxy --version

启动 mitmproxy 或 mitmweb

启动 mitmproxy:

mitmproxy --listen-host 0.0.0.0 --listen-port 8080

启动 mitmweb(显示 GUI):

mitmweb --listen-host 0.0.0.0 --listen-port 8080

配置 mitmproxy
配置代理
1、设置代理:
在 macOS 的系统设置中,进入 Wi-Fi > 网络设置 > 高级选项 > 代理。
配置 HTTP/HTTPS 代理地址为 127.0.0.1:8080 或运行 mitmproxy 的本地 IP 和端口号。
2、配置证书信任(确保可以抓 HTTPS 流量)
mitmproxy 默认会拦截 HTTPS 流量,但需要用户设备信任其自签名证书。以下是设置证书信任的步骤:
1、安装证书:
在设备浏览器中访问 http://mitm.it,并按照提示下载 mitmproxy 的证书。
下载后会生成一个 *.pem 文件。
2、将证书导入 macOS 的钥匙串中:
双击 .pem 文件,系统会自动导入到钥匙串工具中。
在 钥匙串访问 中找到导入的证书。
右击证书,选择 信息,然后设置为 始终信任。
3、验证证书是否生效:
再次运行 mitmproxy 或 mitmweb,进行流量捕获测试。

常见问题和解决方法

  1. mitmproxy 未显示流量
    解决办法:
    确保代理端口设置正确,应用是否连接到 127.0.0.1:8080。
    配置证书信任,确保 HTTPS 请求能够被解密。
  2. Python 版本不兼容
    如果系统自带的 Python 版本较低(如 2.x),建议安装最新版 Python:
brew install python
  1. GUI (mitmweb) 不显示流量
    流量过多时可能存在延迟,增加资源限制:
mitmweb --set connection_strategy=eager

检查过滤器是否存在:
清空过滤器规则,显示所有流量。

mitmproxy 提供了扩展 API,允许编写 Python 脚本对流量进行操作,如捕获、过滤和处理 HTTP 请求。

以下是一个 Python 脚本,能够捕获 HTTP 请求并存储到集合中:

from mitmproxy import http
import json# 全局请求列表
http_requests = []
def read_json(file_path):"""读取 JSON 文件数据"""try:with open(file_path, 'r', encoding='utf-8') as file:data = json.load(file)  # 加载 JSON 数据为 Python 对象return dataexcept FileNotFoundError:print(f"{file_path} 不存在,将创建新文件。")return {}  # 如果文件不存在,返回一个空字典except json.JSONDecodeError:print(f"无法解析 {file_path},请确保文件内容是合法的 JSON。")return {}def request(flow: http.HTTPFlow) -> None:"""每次捕获 HTTP 请求时执行此回调函数"""global http_requests# 提取请求的基本信息url = flow.request.urlmethod = flow.request.methodheaders = dict(flow.request.headers)content = flow.request.text# 将请求信息存入集合request_data = {"url": url,"method": method,"headers": headers,"content": content,}http_requests.append(request_data)print(f"捕获请求: {url}")def response(flow: http.HTTPFlow) -> None:"""每次捕获 HTTP 响应时执行此回调函数"""global http_requestsurl = flow.request.urlprint(f"完成响应: {url}")def done():"""在 mitmproxy 运行结束时保存请求集合的数据"""global http_requests# 将捕获的请求保存到文件with open("http_requests.json", "w", encoding="utf-8") as f:json.dump(http_requests, f, indent=4)print(f"捕获了 {len(http_requests)} 个 HTTP 请求,已保存到 'http_requests.json'")

如何使用以上脚本

  1. 保存脚本文件
    将上述代码保存到文件中,例如 capture_requests.py。

  2. 启动 mitmproxy 并加载脚本
    通过 mitmproxy 或 mitmdump 加载脚本。例如:

mitmproxy -s capture_requests.py

或者使用 mitmdump(无界面模式):

mitmdump -s capture_requests.py
  1. 捕获流量
    确保目标设备正确配置代理到运行 mitmproxy 的机器,同时安装并信任 CA 证书。完成流量操作后,脚本会自动将请求数据保存到 http_requests.json。
http://www.xdnf.cn/news/1367335.html

相关文章:

  • Android Glide常见问题解决方案:从图片加载到内存优化
  • 使用 Docker、Jenkins、Harbor 和 GitLab 构建 CI/CD 流水线
  • Linux文件系统深入解析:从原理到实践
  • 通义灵码插件——AI 重构表单开发!半小时搭建可视化拖拽系统,效率碾压传统模式
  • 面试:Spring
  • MySQL 面试题系列(三)
  • week5-[循环结构]听歌
  • cuda编程笔记(16)--使用 cuDNN 实现卷积、激活、池化等反向操作
  • 淘宝/天猫商品详情API数据解析【附代码】
  • AP8105 PFM升压芯片数据手册
  • 支持向量机(SVM)学习笔记
  • 如何安装 VS2019 和 .NET Core SDK 2.2.301(winx64)?完整操作步骤(附安装包下载)
  • Ubuntu22.04安装OBS
  • 【软考论文】论自动化测试方法及其应用
  • 办公无纸化的关键:cpolar让Paperless-ngx远程扫描更便捷
  • 【Elasticsearch】k-NN 搜索深度解析:参数优化与分数过滤实践
  • 【SystemUI】锁屏来通知默认亮屏Wake模式
  • 32.Ansible平台搭建
  • 1424. 对角线遍历 II
  • 2024年Engineering SCI2区,面向工程管理的无人机巡检路径与调度,深度解析+性能实测
  • 计算机毕业设计 java 药店药品信息管理系统 基于 Java 的药店药品管理平台Java 开发的药品信息系统
  • 设计模式:原型模式(Prototype Pattern)
  • 如何通过虚函数实现多态?
  • 实现自己的AI视频监控系统-第二章-AI分析模块2
  • 【git使用场景】本地仓库与远程仓库存在独立历史
  • ​Visual Studio + UE5 进行游戏开发的常见故障问题解决
  • 系统开发 Day4
  • 音视频学习(五十六):单RTP包模式和FU-A分片模式
  • Linux驱动开发笔记(七)——并发与竞争(上)——原子操作
  • 深度学习-----《PyTorch深度学习核心应用解析:从环境搭建到模型优化的完整实践指南》