前言
最近公司有個(gè)項(xiàng)目需要驗(yàn)證APP應(yīng)用在一段時(shí)間內(nèi)消耗的流量統(tǒng)計(jì),與后臺(tái)數(shù)據(jù)平臺(tái)以及APP自身打印的log日志進(jìn)行核對(duì)對(duì)比分析。具體分以下幾步執(zhí)行:
在Android系統(tǒng)中安裝系統(tǒng)數(shù)據(jù)埋點(diǎn)采集的APP-->運(yùn)行設(shè)備一段時(shí)間-->設(shè)備關(guān)機(jī)重啟:
1.在后臺(tái)數(shù)據(jù)平臺(tái)通過(guò)數(shù)據(jù)庫(kù)指令查看并統(tǒng)計(jì)這段時(shí)間內(nèi)系統(tǒng)應(yīng)用所消耗的流量數(shù)據(jù)
2.在系統(tǒng)日志log中查看系統(tǒng)應(yīng)用消耗的流量統(tǒng)計(jì)(以包名:bytes格式輸出打?。?/p>
3.通過(guò)Android自身的TCP收發(fā)長(zhǎng)度統(tǒng)計(jì)功能進(jìn)行分析
4.通過(guò)tcpdump+wireshark工具進(jìn)行抓包統(tǒng)計(jì)分析系統(tǒng)應(yīng)用消耗的流量(此步驟比較難實(shí)現(xiàn),需要兩個(gè)腳本進(jìn)行復(fù)制抓取和分析【tcpdump和busybox】)
---tcpdump需根據(jù)設(shè)備的CPU型號(hào)或平臺(tái)型號(hào)(MTK、高通)進(jìn)行下載,否則執(zhí)行抓取指令的時(shí)候會(huì)報(bào)錯(cuò),數(shù)據(jù)是錯(cuò)誤或者為空。
---busybox一個(gè)通過(guò)包名來(lái)確認(rèn)某個(gè)包在讀取系統(tǒng)內(nèi)存IP(服務(wù)器端)地址,以此來(lái)通過(guò)wireshark工具進(jìn)行分析統(tǒng)計(jì)
本篇只講解第3和第4點(diǎn)數(shù)據(jù)分析過(guò)程
一、通過(guò)Android自身的TCP收發(fā)長(zhǎng)度統(tǒng)計(jì)功能進(jìn)行分析
首先,設(shè)備進(jìn)行root(具體root自行百度),開(kāi)啟USB調(diào)試模式,進(jìn)入系統(tǒng)(adb shell ps)查看存在包名

其次,進(jìn)入系統(tǒng)的/proc/uid_stat/ 目錄,查看并獲取到應(yīng)用的uid號(hào);
最后,通過(guò)指定的UID號(hào)以及操作當(dāng)前應(yīng)用來(lái)查看當(dāng)前應(yīng)用的tcp_sed和tcp_rcv(兩者之和就是該應(yīng)用消耗總流量);

二、通過(guò)tcpdump+wireshark工具進(jìn)行抓包統(tǒng)計(jì)分析系統(tǒng)應(yīng)用消耗的流量
>詳細(xì)操作步驟如下:
抓包準(zhǔn)備
1. Android手機(jī)需要先獲得root權(quán)限。一種是否獲得root權(quán)限的檢驗(yàn)方法:安裝并打開(kāi)終端模擬器(可通過(guò)安卓市場(chǎng)等渠道獲得)。在終端模擬器界面輸入su并回車,若報(bào)錯(cuò)則說(shuō)明未root,若命令提示符從$變#則為rooted;因使用的是車鏡產(chǎn)品,通過(guò)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手機(jī)尚未root,可通過(guò)superoneclick或其它方法進(jìn)行root處理(需要先安裝Microsoft .NET Framework)。Superoneclick刷root權(quán)限教程:(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手機(jī)與電腦USB相連(或WiFi連接),打開(kāi)windows命令提示符窗口
2. 將tcpdump程序copy至android手機(jī)(該命令前面那個(gè)目錄文件為本地地址,后面那個(gè)目錄為目的手機(jī)端地址)
C:\android-sdk-windows\platform-tools>adb push c:/tcpdump /data/local/tcpdump
3. 修改tcpdump的權(quán)限
C:\android-sdk-windows\platform-tools>adb shell
#chmod 777 /data/local/tcpdump
4. 進(jìn)入root權(quán)限
C:\android-sdk-windows\platform-tools>adb shell
$ su
在運(yùn)行su指令后,手機(jī)終端桌面會(huì)出現(xiàn)相應(yīng)提示信息以確認(rèn)您對(duì)root操作的認(rèn)可。
5. 運(yùn)行tcpdump,輸入以下命令啟動(dòng)抓包(指令相關(guān)參數(shù)請(qǐng)自行百度)。
cmd窗口實(shí)時(shí)打印指令:/data/local/tcpdump -p -vv -s 0 -C 100 -w /sdcard/capture.pcap??
通過(guò)cmd窗口運(yùn)行后臺(tái)指令:/data/local/tcpdump -p -vv -s 0 -C 100 -w /sdcard/capture.pcap? &
殺掉tcpdump后臺(tái)運(yùn)行指令:ps(查看tcpdump的PID號(hào))--->kill? PID
6. 在手機(jī)端執(zhí)行相應(yīng)需要進(jìn)行抓包分析的操作,執(zhí)行完成后在命令提示符窗口執(zhí)行Ctrl+C中斷抓包進(jìn)程
7. 將抓包結(jié)果復(fù)制至本地(前面那個(gè)目錄為手機(jī)端地址,后面那個(gè)目錄為本地地址),或通過(guò)拷貝的方式進(jìn)行粘貼復(fù)制到電腦端
C:\android-sdk-windows\platform-tools>adb pull /sdcard/capture.pcap c:/
8. 使用Wireshark工具查看抓包文件capture.pcap
合并多個(gè)文件
由于通過(guò)tcpdump抓取的數(shù)據(jù)量過(guò)多,文件有很多,需要合并文件后才好進(jìn)行用工具分析,所以這里要合并下抓取的文件,具體合并方式見(jiàn)(https://blog.csdn.net/qq_20480611/article/details/50774686)
獲取應(yīng)用的服務(wù)器IP地址
1.把busybox腳本放置設(shè)備的某個(gè)路徑下,通過(guò)buysbox腳本獲得nxosdata包名的IP地址為x.x.x.x

使用Wireshark工具分析
1.經(jīng)tcpdump腳本抓取的數(shù)據(jù),通過(guò)wireshark工具分析,并通過(guò)過(guò)濾IP地址(指令為:ip.src==x.x.x.x[src為發(fā)送;dst為接收]),統(tǒng)計(jì)得出xx應(yīng)用所消耗的流量為xxxBytes
2.軟件下載安裝,見(jiàn)度娘
3.通過(guò)過(guò)濾條件進(jìn)行過(guò)濾
點(diǎn)擊wireshark工具的“Statistics”-->“EndPoint”,勾選“Limit to display filter”選項(xiàng),如下圖所示

點(diǎn)擊“Statistics”-->“IO Graphs”,顯示I/O圖表

點(diǎn)擊“Statistics”-->“TCP Scream Graph” -->“Throughput”,顯示TCP流吞吐量圖形

點(diǎn)擊“統(tǒng)計(jì)”-->“已解析的地址”,查看已解析的地址和域名

點(diǎn)擊“統(tǒng)計(jì)”-->“conversatioss”,查看IP地址包的流量消耗大小bytes

IP地址和域名對(duì)應(yīng)消耗流量大小對(duì)比

總結(jié):
1、此次在原計(jì)劃抓包采集流量數(shù)據(jù)是在物聯(lián)網(wǎng)卡(SIM卡)的基礎(chǔ)上執(zhí)行,但因抓取的數(shù)據(jù)在wireshark工具上分析是空白(局域網(wǎng)的數(shù)據(jù)),故放棄此方法
2、采用WiFi熱點(diǎn)的方式進(jìn)行抓包采集流量數(shù)據(jù),操作步驟見(jiàn)下圖

參考資料:
1.http://blog.51cto.com/fangxin/735178
2.https://blog.csdn.net/zhuyunier/article/details/79043833