做 iOS 调试时,我尝试了 5 款抓包工具
日常做开发的人,特别是和客户端接口打交道的同学,应该对“抓包”这件事不陌生。
调试登录流程、分析接口格式、排查错误返回、分析网络性能、甚至研究第三方 App 的数据通信……说到底,都绕不开“抓 HTTPS 包”这一步。
而这一步,正变得越来越难。
抓包为什么越来越难?
早几年,抓包是一件相对轻松的事。安装个 Charles、Fiddler,或者开个 mitmproxy,设好代理、装下证书就能抓个痛快。
但现在,各种防护机制一层套一层:
- App 开启了证书校验,连不上代理就拒绝联网
- 有些还上了 HTTPS 双向验证(Mutual TLS),客户端必须验证服务端证书外还要给服务器提供自己的一套证书
- 少数 App 甚至硬编码了 Pinning,不信任系统证书
Charles、Fiddler、mitmproxy 全部失灵。
于是我找遍了几乎能找到的所有工具。
工具盘点:每种都有一类适配人群
1. Charles
经典老牌,不多介绍。HTTP 抓得稳,HTTPS 要绕 Pin 就麻烦了。对 mac 用户友好,对 iOS 支持一般,证书注入限制多。
2. Fiddler
Windows 上用得多,功能强,但配置复杂。要设置代理、安装证书,有时连抓安卓包都觉得麻烦。
3. Wireshark
底层抓包利器,但不解密 HTTPS 意义不大。更多用在网络层调试,做协议分析不错。
4. mitmproxy
命令行党福音,Python 可编程。但对于图形化用户门槛高,部署中间人代理还是会遇到 Pin 限制。
5. Sniffmaster 抓包大师(一个偶然发现的小众工具)
某次调试一个 iOS 上的企业应用,客户反馈某个操作频繁失败,服务端日志里没有任何记录。
我一边抓 Charles,一边开 Fiddler,发现都抓不到这个 App 的 HTTPS 请求。
最后在一个讨论组里看到有人提到 Sniffmaster 这个跨平台的小工具,说插上线就能抓,没多想就试了下。
结果让我很惊讶:
- 插上 iPhone 设备,几秒内在软件界面看到所有请求
- 请求完整无缺,而且已经自动解密
- 双向 HTTPS 的请求也能看到内容
翻了下工具介绍,Sniffmaster 居然支持脚本编写,可以实时修改请求响应内容,有点像 mitmproxy + Charles 的结合。
实战体验:调试带 Pin 的 iOS HTTPS 接口
说个具体例子,我调试的是一个医疗 App,它对安全性要求极高:
- 强制 HTTPS,所有 HTTP 请求会直接被中间件拒绝
- 接口全量启用双向认证
- APP 内置了 SSL Pinning,如果不是特定证书链直接断联
传统代理全废。
而 Sniffmaster,因为是用设备连接的方式,绕过了系统信任链,可以无视 Pinning 行为直接拦截 TCP 流。
打开“拦截器”,我写了一段 JavaScript 修改接口返回数据,秒变测试环境状态。
同时它还能用来分析网络性能,显示请求链路耗时、TLS 握手时长、请求体大小等,UI 简单但很实用。
抓包工具没必要“一刀切”
每款工具都有其适配人群和场景:
- Charles、Fiddler 更适合日常 Web 调试
- mitmproxy 拿来写自动脚本抓分析包很合适
- Wireshark 用来排查底层 TCP 问题很专业
但像 iOS HTTPS + 双向认证这种“毒瘤场景”,只能靠专门的工具处理。
我不想说哪款工具一定最好,但 Sniffmaster 抓包大师确实在我最无助时解决了问题。
也许,有时候解决问题的关键不是“全能”,而是“刚刚好”。
如果你也在调试 iOS HTTPS 接口时卡住了,不妨多试试不同的方式。
不是每个工具都能解决所有问题,但合适的工具 + 合理的方式,可以让你少熬很多夜。
相关文章:
做 iOS 调试时,我尝试了 5 款抓包工具
日常做开发的人,特别是和客户端接口打交道的同学,应该对“抓包”这件事不陌生。 调试登录流程、分析接口格式、排查错误返回、分析网络性能、甚至研究第三方 App 的数据通信……说到底,都绕不开“抓 HTTPS 包”这一步。 而这一步࿰…...
html css js网页制作成品——HTML+CSS珠海网页设计网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
FID和IS的区别
📊 生成模型评估:你选 IS 还是 FID? 在评估 GAN、Diffusion 等图像生成模型时,两个最常被提到的指标是: 🔹IS (Inception Score) 🔹FID (Frchet Inception Distance) 🧠 Inception…...
前端三大件--HTML
引言 在互联网的世界里,每一个绚丽多彩的网页背后,都离不开 HTML 的支撑。HTML(Hyper Text Markup Language,超文本标记语言)作为网页开发的基础语言,就像是搭建高楼大厦的砖块,是所有 Web 开发…...
Node.js 的 child_process 模块详解
Node.js 的 child_process 模块提供了创建子进程的能力,使 Node.js 应用能够执行系统命令、运行其他程序或脚本。这个模块非常强大,可以帮助我们实现很多复杂的功能。 1. exec - 执行 shell 命令 exec 方法用于执行 shell 命令,并缓冲任何产生的输出。 特点 创建 shell 来…...
日常知识点之随手问题整理(虚函数 虚函数表 继承的使用场景)
新来的同事提到一个虚函数解耦头文件的问题,就想起来对虚函数进行一些回顾。 他的问题是,通过纯虚函数,如何实现不包含头文件即可真正调用到子类的实际接口。 》这里肯定是不合理的,需要一个中间管理类,对纯虚函数和相…...
【软件设计师:数据结构】2.数据结构基础(二)
一、树 树是n(n≥0)个结点的有限集合,n=0时称为空树,在任一非空树中 ● 有且仅有一个称为根的结点。 ● 其余的结点可分为m(m≥0)个互不相交的子集T1,T2…,Tm,其中每个子集本身又是一棵树,并称其为根结点的子树。 1、树的基本概念 ● 双亲和孩子 ● 兄弟:具有相同双…...
Python训练营打卡——DAY18(2025.5.7)
目录 一、基于聚类进一步推断类型 1. 聚类分析 2. 簇的总结与定义 二、作业 1. 聚类分析 2. 簇的总结与定义 3. 模型效果提升 一、基于聚类进一步推断类型 选用昨天kmeans得到的效果进行聚类,进而推断出每个簇的实际含义。 1. 聚类分析 # 先运行之前预处理…...
初学Python爬虫
文章目录 前言一、 爬虫的初识1.1 什么是爬虫1.2 爬虫的核心1.3 爬虫的用途1.4 爬虫分类1.5 爬虫带来的风险1.6. 反爬手段1.7 爬虫网络请求1.8 爬虫基本流程 二、urllib库初识2.1 http和https协议2.2 编码解码的使用2.3 urllib的基本使用2.4 一个类型六个方法2.5 下载网页数据2…...
【CSS】Grid 的 auto-fill 和 auto-fit 内容自适应
CSS Grid 的 auto-fill 和 auto-fit /* 父元素 */ .grid {display: grid;/* 定义「网格容器」里有多少列,以及每列的宽度 *//* repeat 是个「重复函数」,表示后面的模式会被重复多次 *//* auto-fit 是一个特殊值,自动根据容器宽度ÿ…...
绕线机的制作与研究
绕线机的制作与研究 摘要 本文详细阐述了绕线机的制作过程,涵盖从设计规划到实际制作的各个环节。通过对绕线机工作原理的深入分析,确定了关键技术参数,并依此完成机械结构与控制系统的设计。在制作阶段,运用多种加工工艺完成零件制造与设备组装。经测试,自制绕线机性能…...
引用的使用
引用的语法 作用:起别名 引用的本质是指针常量 数据类型 &别名原名; 引用必须要初始化 引用一旦初始化,不能修改 不能返回局部变量的引用 引用做形参 #include<iostream> #include<string> using namespace std; //通过引用…...
css animation 动画属性
animation // 要绑定的关键帧规则名称 animation-name: slidein;// 定义动画完成一个周期所需的时间,秒或毫秒 animation-duration: 3s;// 定义动画速度曲线 animation-timing-function: ease;// 定义动画开始前的延迟时间 animation-delay: 1s;// 定义动画播放次数…...
Nacos源码—Nacos集群高可用分析(二)
4.集群节点的健康状态变动时的数据同步 (1)Nacos后台管理的集群管理模块介绍 在集群管理模块下,可以看到每个节点的状态和元数据。节点IP就是节点的IP地址以及端口,节点状态就是标识当前节点是否可用,节点元数据就是相关的Raft信息。 其中节点…...
SRAM详解
一、SRAM基础原理 定义与结构 SRAM(Static Random-Access Memory,静态随机存取存储器)是一种基于触发器(Flip-Flop)结构的易失性内存,通过交叉耦合的反相器(6晶体管,6T单元ÿ…...
JavaWeb:MySQL进阶
多表设计 一对多(多对一) 外键 一对一 多对多 多表查询 内连接 外连接 子查询 -- 查询员工表 select * from emp;-- 查询部门表 select * from dept;-- 查询员工和部门 select * from emp, dept; -- 笛卡尔积select * from emp, dept where emp.dept_i…...
Golang 接口 vs Rust Trait:一场关于抽象的哲学对话
一、引言 在现代编程语言中,接口(Interface) 和 Trait 是实现多态和抽象行为的关键机制。它们允许我们定义行为契约,让不同的类型共享相同的语义接口,从而提升代码的复用性和扩展性。 Go 和 Rust 分别代表了两种截然…...
智算中心的搭建标准
智算中心的搭建标准主要涉及以下几个方面: 开放标准: 硬件与软件开放:从硬件到软件、从芯片到架构,都应采用开放、标准的技术。例如,硬件支持如 OCP、ODCC、Open19 等开放社区标准,软件采用如 OpenStack、K…...
商汤科技前端面试题及参考答案
有没有配置过 webpack,讲一下 webpack 热更新原理,能否自己实现一些插件? Webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具。在实际项目中,经常会对其进行配置,以满足项目的各种需求,比如处理不同类型的文件、优化代码、配置开发服务器等。 Webpack 热更…...
windows下docker的使用
找了个docker教程 Windows Docker 安装 | 菜鸟教程Windows Docker 安装 Docker 并非是一个通用的容器工具,它依赖于已存在并运行的 Linux 内核环境。Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的…...
AI日报 · 2025年5月07日|谷歌发布 Gemini 2.5 Pro 预览版 (I/O 版本),大幅提升编码与视频理解能力
1、谷歌发布 Gemini 2.5 Pro 预览版 (I/O 版本),大幅提升编码与视频理解能力 谷歌于5月6日提前发布 Gemini 2.5 Pro 预览版 (I/O 版本),为开发者带来更强编码能力,尤其优化了前端与UI开发、代码转换及智能体工作流构建,并在WebDe…...
Redis 8.0 正式版发布,新特性很强!
就在前两天,Redis 8.0 正式版 (GA) 来了!这并不是一次简单的更新,Redis 8.0 不仅带来了性能上的进一步提升,还带来一些实用的新特性与功能增强。并且,最重要的是拥抱 AGPLv3 重归开源! 下面,简单…...
MySQL核心机制:日志系统、锁机制与事务管理的深度剖析
一.介绍 MySQL作为世界上最流行的开源关系型数据库之一,其强大的事务处理能力和高并发支持使其在各种复杂应用场景中得到广泛应用。MySQL的核心机制包括日志系统、锁机制和事务管理,这些机制共同确保了数据库的ACID特性,为应用程序提供了可靠…...
Mybatis标签使用 -association 绑定对象,collection 绑定集合
注意 association标签中的 select , column 属性使用 collection 标签中的 ofType 属性使用 Data public class Tours implements Serializable {private static final long serialVersionUID 1L;private Integer touId;private String tourName;private Integer guideId;pri…...
IBM BAW(原BPM升级版)使用教程Toolkit介绍
本部分为“IBM BAW(原BPM升级版)使用教程系列”内容的补充。 一、系统Toolkit 在 IBM Business Automation Workflow (BAW) 中,System Toolkit 是一组预先定义和配置好的工具、功能和组件,旨在帮助流程设计者和开发人员快速构建…...
排列组合算法:解锁数据世界的魔法钥匙
在 C 算法的奇幻世界里,排列和组合算法就像是两把神奇的魔法钥匙,能够帮我们解锁数据世界中各种复杂问题的大门。今天,作为 C 算法小白的我,就带大家一起走进排列和组合算法的奇妙天地。 排列算法:创造所有可能的顺序…...
LVGL -meter的应用
1 meter介绍 lv_meter 是 LVGL v8 引入的一种图形控件,用于创建仪表盘样式的用户界面元素,它可以模拟像速度表、电压表、温度表这类模拟表盘。它通过可视化刻度、指针、颜色弧线等来展示数值信息,是一种非常直观的数据展示控件。 1.1 核心特…...
MCP学习
一、MCP基础理论与核心概念 1.1 协议定义与设计目标 MCP(Model Context Protocol)是Anthropic公司于2024年11月开源的标准化协议,旨在解决大型语言模型(LLM)与外部工具、数据源之间的动态交互问题。其核心目标包括&…...
软件工程(三):模块的内聚模型
模块内聚的7种类型(从低到高) 等级类型描述示例1️⃣ 最低偶然性内聚(Coincidental Cohesion)模块内部的各功能毫无关系,随机拼凑一个模块中既有文件读写,又有图像压缩、还处理用户登录2️⃣逻辑性内聚&am…...
Java中字符转数字的原理解析 - 为什么char x - ‘0‘能得到对应数字
前言 在Java编程中,我们经常需要将字符形式的数字转换为实际的数值。有很多方法可以实现这一转换,比如使用Integer.parseInt()或Character.getNumericValue()等方法。但有一种简便且高效的方式是直接使用char - 0运算,本文将详细解析这种方法…...
View的事件分发机制
(一)为什么要有事件分发机制 安卓界面上面的View的层级结构是树形的,可能出现多个View重叠在一起的现象(如下图),当我们点击的地方为多个View重叠的区域时,这个点击事件应该给谁呢?为…...
【C++】类和对象【下】
目录 一、再探构造函数1、测试题 二、类型转换三、static成员1. 静态成员变量2. 静态成员函数 四、友元五、内部类六、匿名对象七、对象拷贝时的编译器优化 个人主页<—请点击 C专栏<—请点击 一、再探构造函数 之前我们实现构造函数时,初始化成员变量主要使…...
【JS逆向基础】并发爬虫
前言:所谓并发编程是指在一台处理器上“同时”处理多个任务。并发是在同一实体上的多个事件。强调多个事件在同一时间间隔发生。 1,进程、线程以及协程 【1】进程概念 我们都知道计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算…...
Android组件化 -> 基础组件进行Application,Activity生命周期分发
在lib_common基础组件模块创建上下文持有类,生命周期派发类 object AppContextProvider {private lateinit var application: Applicationprivate var currentActivityRef: WeakReference<Activity>? null// 应用生命周期监听器列表private val appLifecyc…...
42. PCB防静电环设计
PCB防静电环的作用 1. PCB防静电环的作用2. 防静电环设计技术点 1. PCB防静电环的作用 防静电环主要用于生产、运输、售后等环节人体会直接接触电路板的场景。 防静电环只在顶层和底层设计即可。 2. 防静电环设计技术点...
深入理解Java反射机制
java反射是java语言中一个强大而灵活的特性,它允许程序在运行时检查和操作类、接口、字段和方法。 为了方便理解下文,我先给出Cat对象 public class Cat implements jump,Run {private int age;public String name;protected String color;double he…...
嵌入式音视频通话EasyRTC基于WebRTC技术驱动智能带屏音箱:开启智能交互新体验
一、引言 随着智能家居市场的蓬勃发展,智能带屏音箱作为家庭智能交互中心的重要组成部分,其功能需求日益丰富。EasyRTC凭借其低延迟、高稳定性的特点,为智能带屏音箱带来了全新的交互体验,能满足用户在视频通话、远程监控、在线…...
1987-2023年各省进出口总额数据整理(含进口和出口)(无缺失)
1987-2023年各省进出口总额数据整理(含进口和出口)(无缺失) 1、时间:1987-2023年 2、来源:各省年鉴、统计公报 3、指标:进出口总额(万美元)、进口总额(万美…...
paddle ocr 或 rapid ocr umi ocr 只识别了图片的下部分内容 解决方案
如上图,识别的准确率其实很高,但是只识别了下半部分的内容,上半部分的内容就没有识别到,其实是程序设置有点问题,程序设置的解决方案如下: 如上图,识别的准确率其实很高,但是只识别了下半部分的内容,上半部分的内容就没有识别到,其实是程序设置有点问题,程序设置的…...
【深度学习-Day 7】精通Pandas:从Series、DataFrame入门到数据清洗实战
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
如何测试 esp-webrtc-solution_solutions_doorbell_demo 例程?
软件准备 esp-webrtc-solution/solutions/doorbell_demo 例程 此例程集成了 WebSocket 传输视频流的应用 硬件准备 ESP32P4-Function-Ev-Board 环境搭建 推荐基于 esp-idf v5.4.1 版本的环境来编译此例程 若编译时出现依赖的组件报错,可进行如下修改ÿ…...
default和delete final和override
1.default和delete default 1.生成默认成员函数 2.仅适用于特殊成员函数(如构造函数、析构函数、拷贝/移动操作等) delete 1.删除函数 2.可应用于任何函数(不限于特殊成员函数) 2.final 和override final 用于类:…...
Nvidia Orin 安装onnxruntime-gpu
在用英伟达边缘设备Nvidia Orin 安装onnxruntime-gpu环境时, 通常会遇到很多问题。 在正常的Nvidia 服务器上安装onnxruntime-gpu 是非常简单的, 直接pip install onnxruntime-gpu即可, 但是在边缘设备上就没有这么简单了。 直接pip install…...
C++ CRTP技术(奇异递归模版模式)
C 的CRTP技术 最近了解到C的CRTP技术,通过博客来这里记录一下。 我们首先可以了解一下什么是CRTP技术。CRTP是C的一种高级模版变成模式。 他主要的用途有以下的几点: 编译时实现多态(静态多态):通过CRTP技术…...
验证es启动成功
1. 查看命令行输出信息 在启动 Elasticsearch 时,命令行窗口会输出一系列日志信息。若启动成功,日志里通常会有类似下面的信息: plaintext [2025-05-06T13:20:00,000][INFO ][o.e.n.Node ] [node_name] started其中 [node_na…...
AI工场全面激活电商创意链
在当今科技飞速发展的时代,北京先智先行科技有限公司凭借其卓越的创新能力,推出了“先知大模型”、“先行AI商学院”以及“先知AIGC超级工场”这三款旗舰产品,在市场上掀起了不小的波澜。 传统电商设计流程,从需求确认到营销策…...
数 学 函数
gcd int gcd(int a,int b){while(a%b){int ca%b;ab;bc;}return b; } 错位排列 typedef long long ll; ll d(int n){if(n1) return 0;if(n2) return 1;return (n-1)*(d(n-1)d(n-2)); } 快速幂 //注意看是否有mod的需求 int q_pow(int a,int b){int ans1,tempa;while(b){if(…...
springboot集成langchain4j记忆对话
流式输出 LLM 一次生成一个标记(token),因此许多 LLM 提供商提供了一种方式,可以逐个标记地流式传输响应,而不是等待整个文本生成完毕。 这显著改善了用户体验,因为用户不需要等待未知的时间,几…...
C语言初阶:数组
目录 0.数组要讲的知识点 1.一维数组的创建和初始化 1.1 数组的创建: 1.2数组实例: 1.3 数组的初识化: 例子: 2.一维数组的使用 例子: 总结: 3.一维数组在内存中的存储 4.二维数组的创建和初始化 4.…...
案例分享 | 攻克ADAS开发测试难题,实现单元动态测试新突破
汽车行业中的代码动态测试:守护智能汽车的安全与质量 在当今汽车行业,智能网联汽车的快速发展让软件成为了汽车的核心竞争力之一。从自动驾驶辅助系统到车载信息娱乐系统,汽车中的软件数量和复杂度都在不断增加。然而,软件的复杂…...