前言
在处理功耗问题时,经常会遇到回到一些应用在后台使用网络或在待机时候使用网络,导致功耗过高。这时候需要使用到tcpdump和wireshark,可以帮忙我们找到哪些有用在后台偷跑流量、哪些应用上行数据。
需要使用到的工具
tcpdump
一般已经集成在手机里可直接使用,没有的可以从网站(https://www.androidtcpdump.com/android-tcpdump/downloads)下载。
wireshark
从网站(https://www.wireshark.org/download.html)下载按照即可。
ss
ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
log抓取
tcpdump抓取有两种方法
1、平台自带的log工具可以直接抓取,比如mtklog Tool→net log;
2、使用tcpdump 指令抓取
tcpdump -p -vv -s 0 -C 100 -w /data/capture.pcap
adb pull /data/capture.pcap .
socket统计信息抓取
同步抓取socket统计信息,使用ss指令抓取,如下:
while true; echo \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-; do ss -p; sleep 5; done > /data/ss.log
wireshark 分析
使用wireshark打开抓取的tcpdump log,然后在状态栏点击 统计->endpoints选项,获取到如下界面:
从上图中可以看到,本机与远程IP 收发的总字节数为86M和packets 个数为66569,以及与每个远程IP的进行收发的字节数和packets数量,但无法知道是哪个app在进行网络传输,所以要与抓取的ss log对照去看。
比如想要知道IP:125.89.169.119 是哪个APP在进行访问,可以在抓取的ss log中搜索,如下所示:
就可以看到是包名为:d.article.video的app,也就是西瓜视频。
wireshark其他对功耗分析有用的功能
查看packets的时间分布,在状态栏 统计→I/O Graphs
当没有抓到ss log时,可以从 统计->HTTP->负载分布 中看到一些信息:
以及在 统计->已解析的地址 中找到一些信息:
eof