前言

之前受一个博主推荐,就关注这个 python 的抓包工具。最近有个需求,才想起拿来用一下。

概念

是什么?

MITM 代表 Man-in-the-Middle(中间人攻击),是一种网络攻击形式,在这种攻击中,攻击者能够拦截和截取双方之间的通信。MITM 攻击通常发生在受害者与目标之间的通信路径中,并允许攻击者窃听、篡改或伪造通信。

安装 mitmproxy

相关文档:https://docs.mitmproxy.org/stable/overview/installation/

venv/bin/pip install -e ".[dev]"

支持 https 请求

  • mitmproxy CA 证书在首次启动 mitmproxy 时生成后位于~/.mitmproxy 中。cat ~/.mitmproxy/mitmproxy-ca-cert.pem
  • 只需要 mitmproxy 配置正确的证书就行。客户端(如 curl、requests)不需指定证书。
  • 如果 mitmproxy 未自动生成证书。可以将 mitmproxy 证书安装到系统信任存储中,你主要需要使用 .crt 或 .pem 格式的证书文件。具体来说:
# 1. 复制 mitmproxy-ca-cert.pem 到证书目录
sudo cp ~/.mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy-ca-cert.crt

# 2. 更新系统证书存储
sudo update-ca-certificates
  • 其中 mitmproxy-ca-cert.pem 是主要需要的文件,包含 PEM 格式的 CA 证书。

案例:抓取 requests 请求

  • 必须使用 verify 去信任 mitmproxy 使用的证书
import os
import requests
# 设置代理配置
proxies = {
    'http': 'http://127.0.0.1:8080',
    'https': 'http://127.0.0.1:8080'
}
# 方式 1: 在 requests 中直接使用代理
response = requests.get('https://baidu.com', proxies=proxies,verify='/home/news_yu/.mitmproxy/mitmproxy-ca-cert.pem')

案例:mitmproxy 抓微信公众号

  • 安装 mitmproxy
  • 使用 mitmweb 命令启动 web 服务
  • 设置系统代理
  • 引导下载 CA 证书
  • 安装 CA 证书到 windows 系统中
  • 在微信桌面端打开微信公众号文章
  • 在 mitmweb 页面查看抓包数据

按理说我啥都可以抓取到了,包含微信视频号的视频。 因为公众号有web端,是基于浏览器的,对代理证书要求不高。相对的一些桌面应用(如微信)并不信任mitmproxy的代理证书,就会导致无法抓取。。。

抓取浏览器包

使用mitmweb命令启动web界面 配置电脑代理,这里的端口要与mitmweb监听的一致。 默认8080为代理端口,8081为web客户端端口

只能抓取http,无对https请求进行抓取

安装mitproxy证书

安装mitproxy证书是提示 If you can see this, traffic is not passing through mitmproxy.

异常描述
当浏览器访问http://mitm.it/出现If you can see this, traffic is not passing through mitmproxy. 时证明它没有检测到当前操作经过了mitmproxy。

可能因为以下原因:
1、未启动mitmproxy 直接在命令行输入mitmproxy启动代理
2、没有配置系统或浏览器的代理,mitmproxy和fiddler有所区别,不能在不配置代理的情况下完成监听
3、端口冲突。使用mitmproxy -p 端口号启用指定端口的监听
4、可能因为一些杂七杂八的浏览器配置所影响,使用无痕模式试试(本次就出现了这情况,研究半天发现无痕模式和Safari可正常访问)
5、可以装一个SwitchyOmega插件,省事一键使用系统代理或选择自己配置的浏览器代理

window安装代理证书

windows 系统安装说明:

  • 1.双击下载的文件,开始导入证书

  • 2.选择一个证书文件存储位置(本地计算机),然后下一步

  • 3.输入密码界面,直接留空白,下一步

  • 4.选择“将所有证书放置在以下存储”,然后单击“浏览”,然后选择“受信任的根证书颁发机构”。下一步

  • 5.点完成

  • 6.导入成功点确定

爬取小程序

PC 微信抓包 SSL Pinning 记录

在用 mitmproxy 抓 PC 微信时,HTTPS 请求无法被解析。日志显示多次 TLS 握手失败,如 Certificate verify failed,连接随即断开。分析原因,微信客户端启用了 SSL Pinning,即内部校验服务器证书指纹。mitmproxy 替换证书后,指纹不匹配,客户端主动断开连接。结果是代理虽能接管连接,但无法解密 HTTPS 流量,也看不到具体 HTTP 请求。 结论:遇到 TLS 快速断开且无 HTTP 内容,几乎可以确定是 SSL Pinning 导致抓包失败。后续分析需考虑绕过该机制或从小程序、网页接口入手。

mitmproxy 适用于抓取和调试 HTTP/HTTPS 接口,如浏览器请求、API 调试、爬虫分析等场景。它通过中间人代理解析流量,支持修改请求与响应。但其前提是流量必须经过代理且客户端信任代理证书;若程序绕过系统代理、使用 HTTP/3 或启用 SSL Pinning,则可能无法抓取或解密流量。

目前没有找到合适的方法

资料