天天看點

研發神器:一鍵網絡抓包1、簡介2、效果示範3、抓包原理4、方案選型5、方案對比6、方案演進(踩坑之旅)7、資料鍊路8、特别說明9、免費試用

1、簡介

網絡抓包(Packet Capture)就是将網絡傳輸發送與接收的資料包進行截獲、重發、編輯、轉存等操作。

在移動開發中,需要對手機的網絡行為進行監控測試,排查網絡、安全相關的問題。岩鼠平台上線了抓包功能,友善使用者快速的進行網絡監測,其中Android支援一鍵抓包,而iOS需要使用者自行手動設定代理來實作抓包。

本文主要介紹岩鼠平台在移動端的真機抓包方案。具有以下特點:

  • 一鍵開啟,無須任何配置(動态切換WIFI,設定代理,安裝證書)
  • 不需要依賴任何分析工具,支援線上實時檢視瀑布流
  • 支援多種協定:HTTP/ HTTP2/HTTPS/WebSocket/TCP等

2、效果示範

研發神器:一鍵網絡抓包1、簡介2、效果示範3、抓包原理4、方案選型5、方案對比6、方案演進(踩坑之旅)7、資料鍊路8、特别說明9、免費試用

3、抓包原理

要實作對App的網絡資料抓包,需要監控App與伺服器互動之間的網絡節點,監控其中任意一個網絡節點(網卡),擷取所有經過網卡中的資料,對這些資料按照網絡協定進行解析,這就是抓包的基本原理。但是中間網絡節點,不受我們控制,是以基本無法實作抓包的,隻能在用戶端和服務端進行抓包。通常我們監控本地網卡資料,如下圖:

研發神器:一鍵網絡抓包1、簡介2、效果示範3、抓包原理4、方案選型5、方案對比6、方案演進(踩坑之旅)7、資料鍊路8、特别說明9、免費試用

手機、本地網絡屬于用戶端側的抓包,接入裝置、伺服器屬于背景側的抓包,兩者本質上類似。本地網絡指的是WIFI的路由,如果直接抓路由器的包還是比較麻煩的,是以我們會在手機和本地路由之間加一層代理服務,這樣隻要抓代理服務的網絡資料即可,如下圖:

研發神器:一鍵網絡抓包1、簡介2、效果示範3、抓包原理4、方案選型5、方案對比6、方案演進(踩坑之旅)7、資料鍊路8、特别說明9、免費試用

4、方案選型

Android出于安全性的考慮,并不支援抓包。是以現在Android上的抓包方式五花八門,但是不外乎兩種,一種是通過android Linux的特點使用Tcpdump抓取資訊,Tcpdump在Linux上需要su使用者,在android上就需要root手機才能實作,而且Tcpdump是指令行工具,不便于分析結果。另一種方式是通過設定網絡通道的方法抓包,如網絡代理、AP、VPN等,這一類方法的優點是不需要手機Root,但是需要PC支援無線網絡。但由于Tcpdump方式不支援HTTPS,是以我們選型以第二種為主。

4.1、Fiddler

Fiddler原本是一個網頁調試工具,能夠監聽的HTTP協定,包括HTTPS。他的強大功能是允許你設定斷點,修改輸出資料,并且使用者界面友好,使用簡單,有對各種資料格式進行解析,友善檢視。Fiddler另外一個好處是通過設定代理,可以過濾其他程式的資訊。Fiddler基于微軟的.net平台編寫,是以目前隻支援Windos系統

4.2、Wireshark

Wireshark是目前最流行的抓包工具,支援的協定多達850種,從最基礎的IP協定和DHCP協定到進階的專用協定,如AppleTalk和BitTorrent等都能支援,是目前支援協定最多的抓包工具。由于Wireshark是開源軟體,每次更新都會增加一些新的協定支援。同時它是一個跨平台的軟體,可以在unix系列、linux、mac os、windows等多個平台上面進行網絡協定抓包工作,但是還沒有支援Android。Wireshark的前身叫Ethereal,2006年因為其創始人Gerald Combs的跳槽而改名為wireshark

4.3、Mitmproxy

Mitmproxy是一個基于Python的中間人代理的開源架構。同時 MitmProxy 還有兩個關聯元件,一個是 MitmDump,它是 MitmProxy 的指令行接口,利用它我們可以對接 Python 腳本,用 Python 實作監聽後的處理。另一個是 MitmWeb,它是一個 Web 程式,通過它我們可以清楚地觀察到 MitmProxy 捕獲的請求。

4.4、Anyproxy

Anyproxy是阿裡巴巴開源的一個基于nodejs開發的中間人代理架構,支援HTTP/HTPS的解析,提供WEB界面

5、方案對比

研發神器:一鍵網絡抓包1、簡介2、效果示範3、抓包原理4、方案選型5、方案對比6、方案演進(踩坑之旅)7、資料鍊路8、特别說明9、免費試用

最終我們是選擇了mitmproxy作為代理服務

6、方案演進(踩坑之旅)

從大體确定方案,到最終的方案落地,過程中踩了不少坑,方案也做了多次調整

方案1、PC + USB無線網卡開熱點 + 手機設定代理 + Mitmproxy

方案可行,存在問題:linux驅動無線網卡困難;無線網卡開熱點非常不穩定,經常會自己關閉

方案2、PC + USB無線網卡開熱點 + iptables NAT + Mitmproxy

方案可行,存在問題:linux驅動無線網卡困難;無線網卡開熱點非常不穩定,經常會自己關閉;NAT隻配置過來透傳TCP,UDP配置非常麻煩

方案3、VPN + Mitmproxy

方案不可行, 存在問題:VPN和Mitmproxy的雙證書問題,除非自己開發VPN

方案4、PC + 雙有線網卡 + 無線路由+ iptables NAT + Mitmproxy

方案可行,存在問題:無線路由需要使用電腦的有線網絡作為出口上網,路由器下方開啟的無線網絡接入的手機,在Mitmproxy隻能擷取到無線路由器的IP,無法擷取到具體的手機IP,需要擴充Mitmproxy

方案5、伺服器 + 有線網卡 + 公共熱點(連接配接該熱點的裝置和伺服器之間網絡互通) + 手機設定代理 + Mitmproxy

最終,方案5在岩鼠平台落地

7、資料鍊路

研發神器:一鍵網絡抓包1、簡介2、效果示範3、抓包原理4、方案選型5、方案對比6、方案演進(踩坑之旅)7、資料鍊路8、特别說明9、免費試用

流程說明:

1、使用者在真機使用界面點選【開啟】按鈕開啟抓包功能

2、UI層通過websocket方式将啟動抓包指令發送給WEB層

3、WEB層接受到開啟抓包指令後,擷取websocket中的消息内容,安裝雲真機後端約定的協定,将消息推送到消息隊列中

4、雲真機後端訂閱了消息隊列中的指定消息,當收到消息後,會調用手機上預先安裝好的APP的接口進行切換網絡和設定代理的操作(雲真機後端伺服器和手機之間通過USB連接配接,手機預先安裝的APP會啟動一個端口供雲真機後端調用)

5、手機上面的APP接收請求後,調用安卓系統API進行網絡切換和代理設定

6、手機網絡設定成功後,手機上面的APP能接收到消息,通過原來連結将切換成功的消息逐個子產品傳回,最終傳回到UI

7、UI收到消息後,會調用抓包服務接口,啟動抓包服務

8、抓包服務收到消息,會為每台手機動态配置設定一個端口,并将線上檢視瀑布流的URL傳回給UI

9、UI接收到響應結果後,通過iframe方式嵌入線上檢視瀑布流頁面,使用者可以檢視到實時的請求資料

8、特别說明

Android 7.0+由于系統的限制,預設無法抓取APP https網絡包。如果需要抓取指定APP的https網絡包,需要APP開啟網絡安全配置,詳見

https://developer.android.com/training/articles/security-config.html

9、免費試用

免費試用岩鼠雲真機,體驗下一鍵網絡抓包的吧!

點選通路岩鼠雲裝置平台