前言
最近公司有個項目需要驗證APP應用在一段時間內消耗的流量統(tǒng)計,與后臺數據平臺以及APP自身打印的log日志進行核對對比分析。具體分以下幾步執(zhí)行:
在Android系統(tǒng)中安裝系統(tǒng)數據埋點采集的APP-->運行設備一段時間-->設備關機重啟:
1.在后臺數據平臺通過數據庫指令查看并統(tǒng)計這段時間內系統(tǒng)應用所消耗的流量數據
2.在系統(tǒng)日志log中查看系統(tǒng)應用消耗的流量統(tǒng)計(以包名:bytes格式輸出打印)
3.通過Android自身的TCP收發(fā)長度統(tǒng)計功能進行分析
4.通過tcpdump+wireshark工具進行抓包統(tǒng)計分析系統(tǒng)應用消耗的流量(此步驟比較難實現(xiàn),需要兩個腳本進行復制抓取和分析【tcpdump和busybox】)
---tcpdump需根據設備的CPU型號或平臺型號(MTK、高通)進行下載,否則執(zhí)行抓取指令的時候會報錯,數據是錯誤或者為空。
---busybox一個通過包名來確認某個包在讀取系統(tǒng)內存IP(服務器端)地址,以此來通過wireshark工具進行分析統(tǒng)計
本篇只講解第3和第4點數據分析過程
一、通過Android自身的TCP收發(fā)長度統(tǒng)計功能進行分析
首先,設備進行root(具體root自行百度),開啟USB調試模式,進入系統(tǒng)(adb shell ps)查看存在包名
其次,進入系統(tǒng)的/proc/uid_stat/ 目錄,查看并獲取到應用的uid號;
最后,通過指定的UID號以及操作當前應用來查看當前應用的tcp_sed和tcp_rcv(兩者之和就是該應用消耗總流量);
二、通過tcpdump+wireshark工具進行抓包統(tǒng)計分析系統(tǒng)應用消耗的流量
>詳細操作步驟如下:
抓包準備
1. Android手機需要先獲得root權限。一種是否獲得root權限的檢驗方法:安裝并打開終端模擬器(可通過安卓市場等渠道獲得)。在終端模擬器界面輸入su并回車,若報錯則說明未root,若命令提示符從$變#則為rooted;因使用的是車鏡產品,通過wifi方式連接,故直接輸入以下步驟即可,
adb connect x.x.x.x ---> adb root? --->??adb connect x.x.x.x --->adb remount --->adb connect x.x.x.x?
2. 如果Android手機尚未root,可通過superoneclick或其它方法進行root處理(需要先安裝Microsoft .NET Framework)。Superoneclick刷root權限教程:(http://soft.shouji.com.cn/news/501.shtml)
3. 需要先獲得 Android SDK
4. 需要獲得tcpdump軟件,獲取地址(https://pan.baidu.com/s/1HNKlP81WB6Ir6sA1EMPfBw)
5.需要獲得buysbox,獲取地址(https://pan.baidu.com/s/1hTYnZYGBe3T13fPIcMAZOw)
抓包步驟
1. 將Android手機與電腦USB相連(或WiFi連接),打開windows命令提示符窗口
2. 將tcpdump程序copy至android手機(該命令前面那個目錄文件為本地地址,后面那個目錄為目的手機端地址)
C:\android-sdk-windows\platform-tools>adb push c:/tcpdump /data/local/tcpdump
3. 修改tcpdump的權限
C:\android-sdk-windows\platform-tools>adb shell
#chmod 777 /data/local/tcpdump
4. 進入root權限
C:\android-sdk-windows\platform-tools>adb shell
$ su
在運行su指令后,手機終端桌面會出現(xiàn)相應提示信息以確認您對root操作的認可。
5. 運行tcpdump,輸入以下命令啟動抓包(指令相關參數請自行百度)。
cmd窗口實時打印指令:/data/local/tcpdump -p -vv -s 0 -C 100 -w /sdcard/capture.pcap??
通過cmd窗口運行后臺指令:/data/local/tcpdump -p -vv -s 0 -C 100 -w /sdcard/capture.pcap? &
殺掉tcpdump后臺運行指令:ps(查看tcpdump的PID號)--->kill? PID
6. 在手機端執(zhí)行相應需要進行抓包分析的操作,執(zhí)行完成后在命令提示符窗口執(zhí)行Ctrl+C中斷抓包進程
7. 將抓包結果復制至本地(前面那個目錄為手機端地址,后面那個目錄為本地地址),或通過拷貝的方式進行粘貼復制到電腦端
C:\android-sdk-windows\platform-tools>adb pull /sdcard/capture.pcap c:/
8. 使用Wireshark工具查看抓包文件capture.pcap
合并多個文件
由于通過tcpdump抓取的數據量過多,文件有很多,需要合并文件后才好進行用工具分析,所以這里要合并下抓取的文件,具體合并方式見(https://blog.csdn.net/qq_20480611/article/details/50774686)
獲取應用的服務器IP地址
1.把busybox腳本放置設備的某個路徑下,通過buysbox腳本獲得nxosdata包名的IP地址為x.x.x.x
使用Wireshark工具分析
1.經tcpdump腳本抓取的數據,通過wireshark工具分析,并通過過濾IP地址(指令為:ip.src==x.x.x.x[src為發(fā)送;dst為接收]),統(tǒng)計得出xx應用所消耗的流量為xxxBytes
2.軟件下載安裝,見度娘
3.通過過濾條件進行過濾
點擊wireshark工具的“Statistics”-->“EndPoint”,勾選“Limit to display filter”選項,如下圖所示
點擊“Statistics”-->“IO Graphs”,顯示I/O圖表
點擊“Statistics”-->“TCP Scream Graph” -->“Throughput”,顯示TCP流吞吐量圖形
點擊“統(tǒng)計”-->“已解析的地址”,查看已解析的地址和域名
點擊“統(tǒng)計”-->“conversatioss”,查看IP地址包的流量消耗大小bytes
IP地址和域名對應消耗流量大小對比
總結:
1、此次在原計劃抓包采集流量數據是在物聯(lián)網卡(SIM卡)的基礎上執(zhí)行,但因抓取的數據在wireshark工具上分析是空白(局域網的數據),故放棄此方法
2、采用WiFi熱點的方式進行抓包采集流量數據,操作步驟見下圖
參考資料:
1.http://blog.51cto.com/fangxin/735178
2.https://blog.csdn.net/zhuyunier/article/details/79043833