开发同学应该都遇到过这种情况:想知道某个 App 到底请求了哪些地址------自己做的 App 排查接口,或者分析一个没文档的 App 在调什么后端。传统抓包要先配代理、装证书,碰上证书固定直接抓不到,折腾半天可能只得到一个"抓不到"的结果。我见过不少同事在这个需求上绕远路:为了看一眼地址,搭了整套代理环境,最后发现目标 App 做了证书固定,白忙一场。这个需求本身很轻,不该背那么重的工具链。iOS App 请求地址查看其实有一条更轻的路,不装证书、不设代理,几分钟出结果。下面把步骤过一遍。
常见的三种场景:
- 确认自家 App 在调哪些接口地址、请求头对不对------上线前核对,地址写错、环境指错是最常见的发布事故
- 分析第三方 App 的后端结构(对接、合规检查)------对方不给文档时,从请求地址反推后端结构
- 排查某个地址连不上------请求发出去了吗、发到了哪个地址,这一条信息能砍掉一半排查分支
先讲原理:这条路走的是系统诊断通道。macOS/iOS 的系统诊断日志会记录 HTTP(S) 事务------请求方法、完整 URL(HTTPS 也是明文地址)、状态码、请求头响应头。TraceEagle 从这个通道读取,不是中间人,所以不碰证书、不用设代理,App 的证书绑定也拦不到这一层。
为什么 HTTPS 地址也能明文看到?系统诊断日志记录的是连接建立后的 HTTP 事务,地址这一层对系统可见;这也是它不需要证书的原因------中间人方案要解密内容才看得到地址,诊断通道直接读日志。作为对照,代理路线的地址可见性依赖证书信任,证书固定一出现就断,诊断通道没有这个问题。
代价是能看到的内容受系统日志限制:普通 App 看地址和头,重签过的 App 才能看 Body。
第一步:连接设备
数据线把 iPhone 连上电脑,设备上点信任。信任弹窗不点,设备连不上,这是最常见的卡点;连接后设备出现在设备列表里,状态正常再继续。较新的 iOS(含 17 及以上)换用了新的设备通道,工具适配后照常连接;老系统走旧通道,工具按设备自动选择,界面里能看到的只有"已连接"。同一台设备同时出现在 USB 和网络列表里时,按连接方式选对应那条。
第二步:安装诊断描述文件
系统级抓包的前提是一次性的设备诊断描述文件。装一次,之后所有会话复用,重连设备不需要重复装。安装走设备上的引导流程,扫码或链接进入安装页,装完在设置 → 通用 → VPN 与设备管理里确认状态。换了一台新 iPhone 的话,新设备要重新装一份。
第三步:开系统级抓包
在 TraceEagle 里新建会话,选"本机系统级抓包"(iPhone 场景下对应系统级抓包入口),连接状态正常后开始。不需要任何证书配置------这也是它和代理路线最直观的区别:代理要装根证书,这条不用。会话支持多开:系统级抓包和代理抓包可以同时跑,各自独立页签互不干扰;刚上手的人一个会话就够,别一上来开好几个。
第四步:查看请求列表
让 App 产生一次联网操作,列表里实时出现 HTTP(S) 事务:请求方法、完整 URL、状态码、请求头和响应头。HTTPS 请求的地址也是明文显示的------想看 App 调了哪些接口,这一屏就够了。列表支持按主机、方法过滤,几十条请求混在一起时先按域名收窄;点开任意一条看完整请求头,响应头、状态码在一屏内对照。地址、端口、路径都是明文,不用解包。
第五步:验证与排查
确认通道正常:触发一次联网,列表出现记录,方法、URL、状态码齐全。状态码分布扫一眼能看出大部分问题:4xx 是请求本身的问题,5xx 是服务端;地址对不上预期,回 App 里找设置项确认环境切换(测试/生产)。常见排查:列表空------App 没联网或选错了设备通道,先触发操作再回来看;想看 Body------普通 App 在系统级抓包里看不到,对目标 App 用开发证书重签名后再看(重签后系统级抓包能看到完整请求响应体),或者直接升级到应用层抓包,两种都在同一工具里。
边界提醒:系统级抓包能看到的是"地址和头"这一层,Body 需要重签 App;描述文件作用范围是系统诊断日志本身,别把它当成能看一切的口子。
iOS App 请求地址查看,最轻的需求用最轻的路径:诊断通道免证书免代理,几分钟拿到地址清单。
顺带一提,看地址只是第一步:TraceEagle 里需要完整明文时切应用层抓包(重签后含 Body),要改包重放时走代理抓包,三种抓法在同一界面切换,不需要换工具。