A. 怎麼設置手機進行抓包
使用數據線將android手機連接到電腦端,打開windows命令提示符窗口。使用命令打開Android所在的文件夾,我的是在D盤根目錄下,因為我們要使用到Adb.exe,所以我們要一直打開到adb所在目錄。
將tcpmp程序至android手機(該命令前面那個目錄文件為本地地址,後面那個目錄為目的手機端地址)
修改tcpmp的許可權
(1)先輸入adb shell進入許可權修改,若是在4.0之後的系統,再輸入完adb shell 之後,我們還需要輸入su命令,在運行su指令後,手機終端桌面會出現相應提示信息以確認您對root操作的認可。
(2)當出現#後,輸入chmod 777 /data/local/tcpmp
運行tcpmp進行抓包
# /data/local/tcpmp -p -vv -s 0 -w /sdcard/capture.pcap
在手機端執行相應需要進行抓包分析的操作,執行完成後在命令提示符窗口執行Ctrl+C中斷抓包進程。
將抓包結果復制至本地(前面那個目錄為手機端地址,後面那個目錄為本地地址)
使用Wireshark等工具查看抓包文件capture.pcap
B. 網路抓包原理
本文以App作為例子,實際應用不限於App范圍。
大部分場合都可以通過程序調試來定位問題,但有些場景使用抓包來定位介面問題更准確、更方便,如以下場景:
要實現對App的網路數據抓包,需要監控App與伺服器交互之間的網路節點,監控其中任意一個網路節點(網卡),獲取所有經過網卡中的數據,對這些數據按照網路協議進行解析,這就是抓包的基本原理。
但是中間網路節點,不受我們控制,所以基本無法實現抓包的,只能在客戶端和服務端進行抓包。
通常我們監控本地網卡數據,如下圖:
本地網路 指的是WIFI的路由,如果直接抓路由器的包還是比較麻煩的,因此我們會在 手機 和 本地路由 之間加一層 代理服務 ,這樣只要抓代理服務的網路數據即可:
雖然在 手機 側也可實現抓包,但和 本地路由 一樣,抓包比較麻煩,如果不是沒有辦法,盡量還是不在手機側抓包。但是有一種情況必須在手機端抓包,那就是在4G網路情況下:
4G網路狀態下如何抓包,以及它的劣勢,我們後面章節再細講。
抓包實際上是分析網路協議的一種過程,盡管繁瑣的細節勞動都讓抓包工具做了,但我們還是需要了解下基礎的網路協議,好幫助我們更好的分析問題。
首先需要了解下經典的OSI七層網路模型,以及每層的作用,其次對TCP、HTTP協議簡單了解。
HTTPS是基於HTTP協議的一種改進,在 TCP之上 的會話層增加安全處理。對於應用層來說,HTTPS和HTTP沒有什麼不同,也就是說,HTTPS是保證網路傳輸的安全性,對業務數據無侵入。
簡化理解大概是這個樣子:
SSL和TLS是保證安全傳輸的協議,包括證書認證、加解密和數字簽名。
項目中HTTPS的鏈路:
因此,客戶端與後台,編寫網路介面時,不需要關心SSL或TLS,按照HTTP協議處理即可。
既然HTTPS在網路傳輸是經過加密的,那麼抓包抓到的數據就是密文,不經過解密是無法看到報文的。針對這個問題,如上圖WIFI環境下設置代理的方式可以解決,具體思路是:
所以整個網路鏈路依然是HTTPS在傳輸,但代理服務自己可以獲取到明文數據。
比較常用的抓包工具大概有4個,主要用作互補,配合使用基本所有平台、所有抓包需求都能滿足:
需要說明的是,tcpmp可將數據保存成文件,直接用wireShark打開分析,針對後台或手機抓包使用起來十分方便。
幾個工具間的使用關系:
為什麼要真機抓包?必定是沒有辦法設置代理服務了,如4G網路情況下直接和移動基站鏈接,沒法設置代理服務。凡是非4G網路狀態下,都不建議真機抓包。
iOS 5後,apple引入了RVI remote virtual interface的特性,它只需要將iOS設備使用USB數據線連接到mac上,然後使用rvictl工具以iOS設備的UDID為參數在Mac中建立一個虛擬網路介面rvi,就可以在mac設備上使用tcpmp,wireshark等工具對創建的介面進行抓包分析。
具體步驟:
android是linux系統,和後台一樣可以使用tcpmp命令來抓包,但是需要root許可權,因為一般手機系統不帶有抓包命令 tcpmp ,需要自行安裝。
安裝tcpmp:
使用tcpmp:
這是就已經進入抓包狀態,手機所有的網路請求都會被捕獲,並保存到capture文件中。
導出capture文件:
原文: 網路抓包
C. 應用抓包之tcpmp命令抓包
原料
1.預抓包的App一個(我們以app抓包為例)
2.已配置android sdk
3.分析軟體Wireshark(Windows版)
4.抓包命令:tcpmp
5.模擬器或真機(以模擬器為例,真機需root)
首先我們先配置下環境變數
1.先來個ANDROID_HOME:SDK的路徑,類似於JAVA_HOME。(一勞永逸,以後安裝到別的路徑,改變一下HOME路徑就行)
2.把sdk路徑下的platfrom-tools和tools添加到環境變數
配置好就可以用adb命令了
1.執行tcpmp命令
tcpmp可以將網路中傳送的數據包完全截獲下來提供分析。
以上命令將截獲的數據包保存到sdcard,capture.pcap抓取是數據包,pcap為Wireshark分析文件的後綴。
這時抓包就開始了,在手機上刷新幾下要抓取數據的app。
抓完之後按ctrl+c停止抓包
2.將抓取的數據導出到電腦上(從sdcard導出到電腦上分析)
退出android shell環境(命令行輸入兩次exit),回到Windows環境。
接著執行
導出剛才抓到的文件到電腦d盤。(如果導出失敗,自己手動把抓包數據復制到電腦上)
或者通過DDMS導出到電腦
3.Wireshark打開剛才獲取到的.pcap文件
過濾出http
點擊某一個抓到的http包,可以查看它的詳細信息(自己判斷一下可能是哪個域名)
我們可以看到是get請求
復制出來去請求一下(右鍵->復制->值)
去瀏覽器中請求
再結合app,看看是哪個界面的內容
4.新建個文本文件,保存抓到的借口。例如:
看看請求出來ip地址,順著ip找出所有的api借口
54開頭的就是我要抓的app。