研發神器:一鍵網絡抓包

一、簡介

網絡抓包(Packet Capture)就是將網絡傳輸發送與接收的數據包進行截獲、重發、編輯、轉存等操做。html

在移動開發中,須要對手機的網絡行爲進行監控測試,排查網絡、安全相關的問題。巖鼠平臺上線了抓包功能,方便用戶快速的進行網絡監測,其中Android支持一鍵抓包,而iOS須要用戶自行手動設置代理來實現抓包。node

本文主要介紹巖鼠平臺在移動端的真機抓包方案。具備如下特色:linux

  • 一鍵開啓,無須任何配置(動態切換WIFI,設置代理,安裝證書)android

  • 不須要依賴任何分析工具,支持在線實時查看瀑布流web

  • 支持多種協議:HTTP/ HTTP2/HTTPS/WebSocket/TCP等windows

二、效果演示

image.png

三、抓包原理

要實現對App的網絡數據抓包,須要監控App與服務器交互之間的網絡節點,監控其中任意一個網絡節點(網卡),獲取全部通過網卡中的數據,對這些數據按照網絡協議進行解析,這就是抓包的基本原理。可是中間網絡節點,不受咱們控制,因此基本沒法實現抓包的,只能在客戶端和服務端進行抓包。一般咱們監控本地網卡數據,以下圖:後端

image.png

手機、本地網絡屬於客戶端側的抓包,接入設備、服務器屬於後臺側的抓包,二者本質上相似。本地網絡指的是WIFI的路由,若是直接抓路由器的包仍是比較麻煩的,所以咱們會在手機和本地路由之間加一層代理服務,這樣只要抓代理服務的網絡數據便可,以下圖: 安全

image.png

四、方案選型

Android出於安全性的考慮,並不支持抓包。因此如今Android上的抓包方式五花八門,可是不外乎兩種,一種是經過android Linux的特色使用Tcpdump抓取信息,Tcpdump在Linux上須要su用戶,在android上就須要root手機才能實現,並且Tcpdump是命令行工具,不便於分析結果。另外一種方式是經過設置網絡通道的方法抓包,如網絡代理、AP等,這一類方法的優勢是不須要手機Root,可是須要PC支持無線網絡。但因爲Tcpdump方式不支持HTTPS,所以咱們選型以第二種爲主。服務器

4.一、Fiddler

Fiddler本來是一個網頁調試工具,可以監聽的HTTP協議,包括HTTPS。他的強大功能是容許你設置斷點,修改輸出數據,而且用戶界面友好,使用簡單,有對各類數據格式進行解析,方便查看。Fiddler另一個好處是經過設置代理,能夠過濾其餘程序的信息。Fiddler基於微軟的.net平臺編寫,因此目前只支持Windos系統websocket

4.二、Wireshark

Wireshark是目前最流行的抓包工具,支持的協議多達850種,從最基礎的IP協議和DHCP協議到高級的專用協議,如AppleTalk和BitTorrent等都能支持,是目前支持協議最多的抓包工具。因爲Wireshark是開源軟件,每次更新都會增長一些新的協議支持。同時它是一個跨平臺的軟件,能夠在unix系列、linux、mac os、windows等多個平臺上面進行網絡協議抓包工做,可是尚未支持Android。Wireshark的前身叫Ethereal,2006年由於其創始人Gerald Combs的跳槽而更名爲wireshark

4.三、Mitmproxy

Mitmproxy是一個基於Python的中間人代理的開源框架。同時 MitmProxy 還有兩個關聯組件,一個是 MitmDump,它是 MitmProxy 的命令行接口,利用它咱們能夠對接 Python 腳本,用 Python 實現監聽後的處理。另外一個是 MitmWeb,它是一個 Web 程序,經過它咱們能夠清楚地觀察到 MitmProxy 捕獲的請求。

4.四、Anyproxy

Anyproxy是阿里巴巴開源的一個基於nodejs開發的中間人代理框架,支持HTTP/HTPS的解析,提供WEB界面

五、方案對比

image.png

最終咱們是選擇了mitmproxy做爲代理服務

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

從大致肯定方案,到最終的方案落地,過程當中踩了很多坑,方案也作了屢次調整

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

方案可行,存在問題:linux驅動無線網卡困難;無線網卡開熱點很是不穩定,常常會本身關閉

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

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

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

方案可行,存在問題:無線路由須要使用電腦的有線網絡做爲出口上網,路由器下方開啓的無線網絡接入的手機,在Mitmproxy只能獲取到無線路由器的IP,沒法獲取到具體的手機IP,須要擴展Mitmproxy

方案四、服務器 + 有線網卡 + 公共熱點(鏈接該熱點的設備和服務器之間網絡互通) + 手機設置代理 + Mitmproxy

最終,方案4在巖鼠平臺落地

七、數據鏈路

image.png

流程說明:

一、用戶在真機使用界面點擊【開啓】按鈕開啓抓包功能

二、UI層經過websocket方式將啓動抓包指令發送給WEB層

三、WEB層接受到開啓抓包指令後,獲取websocket中的消息內容,安裝雲真機後端約定的協議,將消息推送到消息隊列中

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

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

六、手機網絡設置成功後,手機上面的APP能接收到消息,經過原來連接將切換成功的消息逐個模塊返回,最終返回到UI

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

八、抓包服務收到消息,會爲每臺手機動態分配一個端口,並將在線查看瀑布流的URL返回給UI

九、UI接收到響應結果後,經過iframe方式嵌入在線查看瀑布流頁面,用戶能夠查看到實時的請求數據

八、特別說明

Android 7.0+因爲系統的限制,默認沒法抓取APP https網絡包。若是須要抓取指定APP的https網絡包,須要APP開啓網絡安全配置,詳見

developer.android.com/training/ar…

九、免費試用 免費試用巖鼠雲真機,體驗下一鍵網絡抓包的吧! 點擊訪問巖鼠雲設備平臺

相關文章
相關標籤/搜索