在移動端開發、接口聯調、網絡調試過程中,“Charles 抓不到包” 是開發者遇到的最高頻問題之一。尤其是在 iOS 環境下,ATS、證書鏈校驗、App 內證書 Pinning、HTTP/2、HTTP/3(QUIC)等機制會導致代理抓包工具失效。開發者往往只看到 CONNECT、空白請求列表,或者部分 API 能抓、部分完全看不到。

很多人會誤以為是 Charles 配置錯誤,但實際上,大多數抓不到包的問題與 網絡協議本身的工作機制 相關,而不是工具本身的問題。

本文從工程角度系統分析 Charles 無法抓包的原因,並給出對應的分層解決方案。


一、Charles 抓不到包的常見原因(按出現頻率排序)

證書未被完全信任(iOS/macOS)

Charles 的 HTTPS 解密依賴“受信任的代理證書”。如果:

  • 未安裝證書
  • 未開啓“完全信任證書”
  • 中間證書不完整
  • 證書鏈被 Wi-Fi 或代理干擾

Charles 會只顯示 CONNECT,無法解密。


應用啓用了證書 Pinning

Pinning 會拒絕所有中間人代理證書,是 App 抓不到包的第一常見原因

表現:

  • Safari 可以抓
  • App 完全看不到請求
  • Charles 無流量
  • Wireshark 可看到 TLS Alert

在這種情況下,Charles 無法工作,需要使用底層抓包方案。


部分 API 抓不到 → HTTP/3(QUIC)導致

QUIC 使用 UDP,不走系統代理,因此 Charles/Proxyman/Fiddler 無法抓到任何 QUIC 請求

常見於:

  • 視頻類接口
  • 大流量實時場景
  • 內容流 / 推薦流
  • CDN 邊緣節點

此時只能通過底層抓取或關閉 QUIC 解決。


App 使用自定義協議(TCP/WebSocket)

許多 SDK 或業務數據走自定義二進制協議,不經過 HTTP 代理,因此:

  • Charles 看不到
  • 代理軟件無流量
  • tcpdump 或 Sniffmaster 才能看到真實數據流

系統代理被覆蓋(非常常見)

包括:

  • VPN
  • 安全管控軟件
  • MDM 企業策略
  • 多代理衝突
  • WireGuard/Clash 等覆蓋全局路由

導致 Charles 根本接收不到請求。


二、排查 Charles 抓不到包的正確流程

① 檢查證書鏈(HTTPS 解密失敗)

必查項目:

  • iOS “完全信任證書” 是否開啓
  • Charles 的證書是否最新
  • 是否存在 Wi-Fi 中間代理
  • ATS 是否拒絕中間人證書

如果只有 CONNECT 多半是證書問題。


② 瀏覽器能抓、App 抓不到 → 典型 Pinning

這是 70% 的開發者誤判為“Charles 配置錯誤”的場景。

解決方式: Charles 無法處理 需要底層抓包工具進一步分析 TLS 握手


③ 某些接口抓不到 → QUIC/UDP

驗證方式:

  • Wireshark 查看是否出現 UDP 443
  • Safari 刷不出數據,但 App 出現大量 UDP
  • Fiddler/Charles 只有部分接口顯示

QUIC 天生繞過代理,因此不能被 Charles 抓到。


④ 完全無流量 → 系統代理無效

需要檢查:

  • 網絡描述文件(MDM)
  • VPN 狀態
  • macOS 代理是否被覆蓋
  • iOS Wi-Fi 是否被企業代理修改

三、Charles 抓不到包時的底層補抓方法(關鍵環節)

當代理工具無法抓包時,必須使用支持 底層數據流捕獲 的工具,直接捕獲真實的:

  • HTTPS/TCP 數據流
  • TLS 握手
  • UDP/QUIC
  • 自定義協議數據
  • App 內網絡框架發送的所有數據

Sniffmaster 在 Charles 抓不到包場景中的作用)

Sniffmaster 能做什麼?

  • 抓取 HTTPS / TCP / UDP 真實數據流
  • 自動識別協議類型(HTTP、HTTPS、mdns 等)
  • 支持按 App / 域名過濾流量,減少噪音
  • 查看數據流文本、HEX、二進制內容
  • 用 JavaScript 攔截器改寫請求/響應(非 pinning 場景)
  • 導出 Wireshark 可讀取的 pcap
  • 跨平台支持 macOS / Windows / iOS

尤其適用於:

  • Charles 抓不到 HTTPS(pinning)
  • QUIC 流量抓不到
  • WebSocket 二進制協議
  • 自定義 TCP 協議
  • 系統代理失效

它不是替代 Charles,而是 Charles 的補充工具。


四、完整實戰:Charles 抓不到包的排查示例

現象:

  • iOS App 完全抓不到包
  • Charles 顯示 CONNECT
  • Safari 可抓
  • App 報網絡錯誤

排查步驟:

✔ 第一步:檢查證書

無異常。

✔ 第二步:檢查系統代理

可正常工作。

✔ 第三步:初步判斷為 pinning

代理工具失效。

✔ 第四步:使用 Sniffmaster 捕獲底層數據流

捕獲 TLS 握手失敗的記錄:

  • Wireshark 分析 pcap → 出現 unknown_ca
  • 表示 App 拒絕代理證書 → pinning 生效

最終定位到 App 內部 SDK 使用了證書指紋校驗。


Charles 抓不到包的解決方案可以“分層抓包”

層級 工具 作用
代理層 Charles / Proxyman / Fiddler 業務層 HTTPS 抓包
協議層 Wireshark / tcpdump 分析 TLS 握手、QUIC、TCP
補抓層 抓包大師(Sniffmaster) 捕獲 HTTPS/TCP/UDP 底層數據流、解決 pinning/QUIC

沒有任何工具能獨立覆蓋所有場景,但三個層級組合能應對全部複雜抓包需求。