如何抓取 Android 的網路封包

前言

最近工作上遇到需要抓封包分析才能釐清的問題。

以前開發 iOS 時,用 rvictl -s [UUID] 就能創建虛擬網卡,透過 Wireshark 抓封包超簡單。
但 Android 就沒那麼直觀了,研究後成功抓到封包,這篇紀錄分享希望對你也有幫助🙂


事前準備

你會需要:

  1. 一台 root 過的 Android 裝置
  2. tcpdump 可執行檔
  3. Wireshark
WARNING

如果沒有 root 權限,也能用 tPacketCapture,但它會以 VPN 方式攔截封包,我實測會有封包漏掉問題,不建議依賴。


將 tcpdump 放入 Android 裝置

adb push tcpdump /data/local/tcpdump

如果出現 can't execute: Permission denied 錯誤,可先取得 root 權限再上傳:

adb root
adb push tcpdump /data/local/tcpdump
adb unroot

執行 tcpdump 抓封包

  1. 進入裝置 shell 並切換目錄:
adb shell
su
cd /data/local
  1. 修改 tcpdump 權限為可執行:
chmod a+x tcpdump
  1. 開始抓封包,輸出為 .pcap 檔:
./tcpdump -i any -p -s 0 -w /sdcard/capture.pcap

Control + C 結束後,封包就會被儲存在 SD 卡上。


將封包檔案匯出到電腦

adb pull /sdcard/capture.pcap

使用 Wireshark 開啟 .pcap 文件即可開始分析:


總結

封包分析是除錯中最有價值的技術之一。
不論是後端串接異常、網路斷線、第三方 library 無回應,都可能從封包中看出端倪。

舉例來說:

我曾遇到 iOS + FFMpeg 串 RTSP,1 分鐘後連線就自動斷開。
後來透過 Wireshark 抓到 FFMpeg 沒發送 GET_PARAMETER 保活封包,修改原始碼後問題迎刃而解!

TIP

當 log 看不到東西、console 沉默不語時,封包永遠會說實話。會抓封包,能讓你在 debug 上省下好幾倍時間。


參考資源




    Enjoy Reading This Article?

    Here are some more articles you might like to read next:

  • 💡 一台電腦操作多個 GitHub 帳號:最簡單快速的 SSH 設定方法
  • 🚀 如何使用 Excalidraw AI 快速生成專業級圖表,提升工作效率!
  • Setup Development Environment on a New macOS
  • Design Pattern (28) - Interpreter Pattern (解譯器模式)
  • Design Pattern (27) - Visitor Pattern (訪問者模式)