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

驗證方法:

  1. 切換到 4G/5G
  2. 禁用 QUIC
  3. 查看流量是否是 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 完全沒有數據

排查過程:

  1. Charles 設置正常 → 排除代理問題
  2. Safari 可抓 → 系統代理生效
  3. App 無流量 → 高度懷疑 pinning
  4. 使用 Sniffmaster 啓動底層數據流捕獲
  5. 導出 pcap 用 Wireshark 查看
  6. TLS 握手中出現 Alert
  7. 結論:App 中啓用了證書指紋校驗

最終:

  • 代理工具無法使用
  • 通過 Sniffmaster 補抓 + Wireshark 分析才找到根因

這是一個典型的 Charles 失敗案例。


解決“Charles 抓不到包”可以採用多工具協同方案

不是換一個代理工具,而是要建立完整抓包鏈路:

層級 工具 作用
代理層 Charles / Proxyman / Fiddler HTTPS 明文分析
協議層 tcpdump / Wireshark TLS 握手排查
自動化層 mitmproxy scripting / pyshark 批量分析
補抓層 抓包大師(Sniffmaster) pinning / QUIC / 自定義協議等代理解決不了的場景

只有這樣,才能應對 iOS 上各種複雜的網絡問題。