在移動應用開發、接口聯調、性能分析以及網絡異常排查中,移動端抓包是最重要也是最常用的技術手段之一。無論是 iOS 還是 Android,移動端網絡協議正在變得越來越複雜:HTTPS 全面普及、HTTP/2/HTTP/3 使用增多、證書 Pinning 成為常態、App 內部自定義協議不斷出現。這些變化導致開發者常遇到一個問題:
“為什麼移動端抓包這麼難?代理明明開了,卻抓不到包。”
這不是工具的問題,而是移動端網絡本身的特性決定的。 要解決移動端抓包難題,一定需要 分層工具協同:代理 + 協議分析 + 底層補抓,而不是依賴某一種軟件。
一、為什麼移動端抓包比 PC 抓包更困難?
移動端抓包之所以困難,主要因為網絡鏈路複雜、協議多樣、安全策略嚴格。
HTTPS 證書鏈嚴格,只要鏈不完整就無法解密
表現:
- Charles 看到 CONNECT
- 明文 HTTPS 看不到
- App 報 SSL 錯誤
iOS/Android 都對證書鏈極其敏感。
App 普遍使用證書 Pinning(最高頻原因)
特徵:
- 瀏覽器能抓
- App 完全抓不到
- 代理工具界面乾乾淨淨
Pinning 直接拒絕代理證書,所有代理類抓包工具統統失效。
HTTP/3 / QUIC(UDP)繞過所有代理工具
移動端大量接口開始使用 QUIC。
代理工具抓不到的常見原因:
- QUIC 流量天然不走 TCP
- 視頻 / 動態流媒體 / 熱點 API 常用 QUIC
- Wireshark 可以看到 UDP,但代理工具沒有請求
App 可能使用 WebSocket 或自定義 TCP 協議
大量 SDK 和業務邏輯採用自定義協議,絕不會走系統 HTTP 代理,因此:
- Charles / Fiddler 全部無效
- tcpdump 能看到二進制流
- 流量分析需要底層工具
系統代理容易被覆蓋
包括:
- VPN
- 安全軟件
- MDM 網絡策略
- Wi-Fi 企業代理
代理失效,自然抓不到包。
二、移動端抓包軟件的分類(按分工,而不是誰好誰壞)
只有分層使用才能覆蓋所有網絡場景。
① 代理類抓包工具(第一層)
常見:
- Charles
- Proxyman
- Fiddler
- mitmproxy
適用於:
- 解密 HTTPS
- 調試接口
- 修改請求與響應
不適用於:
- Pinning
- QUIC
- 自定義協議
② 協議層抓包工具(第二層)
包括:
- Wireshark
- tcpdump
用途:
- 分析 TLS 握手
- 判斷丟包重傳
- 查看是否走 UDP/QUIC
- 判斷是否發起請求
疑難網絡問題必須回到協議層。
③ 自動化抓包工具(第三層)
如:
- pyshark
- scapy
- mitmproxy scripting
適用於實驗室和 CI 環境。
④ 底層補抓工具(關鍵的第四層)
當代理工具完全失效時,需要“非代理”抓包方式。
抓包大師(Sniffmaster)在移動端抓包體系中的作用
Sniffmaster 的實際功能:
- 捕獲 HTTPS / HTTP / TCP / UDP
- 自動分析協議類型(mdns、HTTPS、HTTP 等)
- 按 App / 域名過濾,解決“噪音太大”的問題
- 查看數據流的多種格式(HEX / 文本 / 二進制)
- 提供 JavaScript 攔截器,可修改請求/響應
- 支持導出 Wireshark 可讀取的 pcap 文件
- 跨平台支持 macOS / Windows / iOS
能夠覆蓋代理軟件抓不到的場景:
- App 啓用 pinning
- QUIC / HTTP3
- 自定義 TCP 協議
- 系統代理失效
- HTTPS 握手異常排查(配合 Wireshark)
它不是替代 Charles,而是成為移動端抓包體系中不可或缺的“底層補抓層”。
三、移動端抓包完整流程(適合直接寫進團隊 Wiki)
① 首先使用代理工具抓包(能抓就繼續)
包括 Charles / Proxyman / Fiddler。
如果可以看到 HTTPS 明文 → 説明代理正常。
② 如果只有 CONNECT → 證書鏈問題
檢查:
- 證書是否被完全信任
- Wi-Fi 是否插入中間證書
- ATS 是否拒絕證書
③ Safari 能抓 App 抓不到 → 證書 Pinning
這是代理抓不到包的最典型場景。
④ 某些接口抓不到 → QUIC / HTTP3
驗證:
- 禁用 QUIC
- 切換網絡
- Wireshark 查看是否走 UDP
⑤ 代理完全無效 → 用 Sniffmaster 抓底層流量
補抓步驟:
- 在 Sniffmaster 選擇 App 或域名過濾
- 捕獲 HTTPS/TCP/UDP 原始數據流
- 導出 pcap 文件
- 在 Wireshark 分析 TLS 握手、協議類型、錯誤碼
- 確定根因:Pinning?QUIC?自定義協議?鏈路異常?
- 若需要,繼續使用代理工具做業務調試
這是解決移動端抓包疑難問題最有效的方式。
四、工程案例:移動端 App 一直抓不到包
表現:
- Charles 無流量
- 證書已信任
- Wi-Fi 切換無變化
排查步驟:
- Charles 設置無問題
- Safari 可抓 → proxy 有效
- App 無流量 → 懷疑 pinning
- 使用 Sniffmaster 攔截流量
- Wireshark 發現 TLS Alert: unknown_ca
- 後端日誌無對應請求
- 最終確認:App 啓用了證書指紋校驗
只有通過底層抓包才找到真正原因。
移動端抓包可以採用多工具組合
| 抓包層級 | 工具 | 作用 |
|---|---|---|
| 代理層 | Charles / Fiddler / Proxyman | 常規 HTTPS 抓包 |
| 協議層 | tcpdump / Wireshark | TLS、QUIC、TCP 問題定位 |
| 自動化層 | pyshark / scapy | 自動化測試與統計 |
| 補抓層 | 抓包大師(Sniffmaster) | pinning / QUIC / 自定義協議 |
單一軟件永遠無法覆蓋移動端所有場景,多工具協同是唯一解決方案。