Charles 一直是 iOS 與 Web 開發者的常用抓包工具:直觀、可視化、支持 HTTPS 解密,也可以修改請求與響應。然而,在真實項目中你一定遇到過下面這些情況:
- Charles 只有 CONNECT,完全看不到 HTTPS 內容
- 瀏覽器能抓,App 抓不到
- 某些接口能抓,某些接口抓不到
- 切換 Wi-Fi、4G 都沒有變化
- Charles 抓不到任何 TCP 流量
- 抓包界面“空空如也”
這些症狀並不是 Charles 的問題,而是網絡鏈路、TLS 證書、HTTP3 協議以及 App 本身的安全策略導致的。要真正解決 Charles 抓不到包的問題,需要“多工具協同”,而不是一味地調整代理設置。
一、Charles 抓不到包的核心原因(按出現頻率排序)
App 啓用了證書 Pinning(最常見)
表現:
- Safari 能抓
- App 完全抓不到
- Charles 面板沒有任何請求
原因:App 直接拒絕 Charles 的證書,HTTPS 流量無法被解密,也不會發往 Charles。
HTTPS 證書鏈未完全信任
表現:
- Charles 只能看到 CONNECT
- 沒有明文 HTTPS 內容
- App 提示 SSL 失敗或超時
可能原因:
- 中間證書缺失
- Wi-Fi 中間人注入證書
- ATS 拒絕不完整鏈路
目標接口使用 HTTP/3 / QUIC(UDP),繞過代理
QUIC 使用 UDP,而 Charles 只代理 TCP。
表現:
- 視頻、直播、社交類接口抓不到
- 換網絡後部分接口能抓
- 抓不到包但後端確實收到請求
應用使用自定義協議(TCP/UDP)或 WebSocket
這類協議不走系統 HTTP 代理,自然抓不到。
系統代理被覆蓋或未生效
場景包括:
- VPN 覆蓋默認代理
- 公司的 Wi-Fi 強制代理
- iOS 網絡配置衝突
二、Charles 抓不到包怎麼辦?完整排查流程(可直接複用)
步驟 ①:檢查 Charles 的 HTTPS 配置是否完整
包括:
- Enable SSL Proxying 是否已勾選
- 證書是否已安裝
- iOS 中是否“完全信任”證書
- 端口是否設置正確(一般是 8888)
如果 HTTPS 都沒有 → 繼續下一步。
步驟 ②:瀏覽器能抓,但 App 抓不到 → 證書 Pinning
當出現這個情況時,Charles 基本無法繼續處理 HTTPS。
此時無需繼續嘗試代理,應該切換到底層抓包方式。
步驟 ③:部分接口抓不到 → 檢查是否為 QUIC
驗證方法:
- 切換到 4G/5G
- 禁用 QUIC
- 查看流量是否是 UDP
如果目標是 HTTP/3,那麼 Charles 無法抓取是預期行為。
步驟 ④:判斷是否為自定義協議或 WebSocket
如果 App 使用的是自定義 TCP 協議,那麼:
- Charles 沒有請求
- Wireshark 可以看到 TCP 數據
- 代理類工具全部無效
此時只能使用底層抓包軟件。
步驟 ⑤:當 Charles 無論如何都抓不到 → 使用底層工具補抓
這一步是解決“代理抓不到包”的關鍵。
抓包大師(Sniffmaster)如何補充 Charles 的能力?
Sniffmaster 可以解決 Charles 無法覆蓋的場景:
- App 使用證書 Pinning
- HTTPS 無法被代理攔截
- QUIC(UDP)流量分析
- 抓取自定義 TCP/UDP 協議
- 系統代理被覆蓋
- 按 App / 域名過濾流量,避免干擾
核心功能包括:
- 捕獲 HTTPS / HTTP / TCP / UDP 全鏈路數據
- 自動識別常見協議(HTTPS、HTTP、mdns 等)
- 按 App / 域名過濾,減少噪音
- 支持查看 HEX / 文本數據流
- 可導出 Wireshark 可讀取的 pcap 文件
- JavaScript 攔截器可對請求/響應進行修改
這些功能使其適合用於 Charles 失敗、代理無法工作、或需要底層抓包的情況。
三、真實工程案例:Charles 完全抓不到 iOS App 流量
場景:
- Charles 代理設置正常
- 證書已安裝並“完全信任”
- Safari 可以抓包
- App 完全沒有數據
排查過程:
- Charles 設置正常 → 排除代理問題
- Safari 可抓 → 系統代理生效
- App 無流量 → 高度懷疑 pinning
- 使用 Sniffmaster 啓動底層數據流捕獲
- 導出 pcap 用 Wireshark 查看
- TLS 握手中出現 Alert
- 結論:App 中啓用了證書指紋校驗
最終:
- 代理工具無法使用
- 通過 Sniffmaster 補抓 + Wireshark 分析才找到根因
這是一個典型的 Charles 失敗案例。
解決“Charles 抓不到包”可以採用多工具協同方案
不是換一個代理工具,而是要建立完整抓包鏈路:
| 層級 | 工具 | 作用 |
|---|---|---|
| 代理層 | Charles / Proxyman / Fiddler | HTTPS 明文分析 |
| 協議層 | tcpdump / Wireshark | TLS 握手排查 |
| 自動化層 | mitmproxy scripting / pyshark | 批量分析 |
| 補抓層 | 抓包大師(Sniffmaster) | pinning / QUIC / 自定義協議等代理解決不了的場景 |
只有這樣,才能應對 iOS 上各種複雜的網絡問題。