最近老板让我做一个关于统计分析安卓手机 app 应用流量统计的问题。
我的具体做法就是:
1.手机端打开应用软件 youtube,运行 1 小时
想要得到的结果是,在这 1 个小时里面,手机只在运行 youtube,但后台可能有其他 app 开启并且消耗流量。
如何根据 pcap 包和利用 wireshark 分析区别出主应用 youtube 和后台应用各自消耗了多少流量数据?
这个问题查了网上好多内容,基本没有找到合适的思路.....都说 tcpdump 得到的包很难做出这么细节的分析,求大家给点建议
主要是 Wireshark 好像不能通过 pcap 包区别出不同的 appname,并给出流量数据。
利用会话统计能得到手机端不断发出的请求,但是根本没办法判断出这些每个请求是什么 app 下的
如下图
100.98.222.250 应该是手机端发起的,如果单纯直接将这一列求和的出来的流量只是 tcpdump 下手机整个系统的流量消耗,区分不出不同的后台应用。
另外如果看 TCP 流的话,如下
从发送方能看出里面包含字段 com.google.andriod.youtube..............但是这只是其中一个 TCP 流并且根本无法将全部的 TCP 流统计起来,将含有 com.google.andriod.youtube 字段的选出来算出流量.认为这是只用 youtube 的消耗流量。
所以现在有点苦恼,到底应该怎么做才能达到本来的目的呢......
我记得安卓自身或者一些第三方流量监控软件都可以实现?
但是那些好像不是特别准确,我知道有
$ cat /proc/uid_stat/uid/tcp_rcv
$ cat /proc/uid_stat/uid/tcp_snd
这样的命令可以看某个已经 uid 应用的流量,但是我不知道后台都有哪些应用在消耗流量。如果只是统计 youtube 和整个系统的流量的话,我可以用 wireshark 得到整个系统的流量和用上面的 2 个命令得到 youtube 的流量消耗,但是不知道的其他应用就没法统计了
另外我发现可以用这样的筛选器来得到一些有用的信息:
添加筛选器:tcp.flags.syn==1 然后如下图
红色方框里面内容:很显然的可以发现是 appname,是不是就可以根据这一点来得到不同 appname 的流量
更发现,如果表格里的协议是 TCP,则红色方框内不显示 appname,如果是 TLSv1.2 协议,则红色方框内显示 appname,这到底是为什么?到底哪个才是正在消耗的流量呢?为什么 TCP 协议反而不产生流量
是不是 youtube 在观看视频的时候,使用的 TLSv1.2 这样的安全传输协议?
但是当使用上述筛选器的时候又发现一个问题,就是用筛选器再次打开会话或者端点统计时,发现 TCP 栏下的数据包以及数据流量大小非常的少:
难道不能用这样的方式得到流量结果么?
如果我直接根据 tcp 流来看的话:我是不是可以从 1 开始不断看每个 TCP 流下的右下角是不是能出现 appname,然后分别加起来,但这样也太花时间了
app 与后台通信用的就是 TCP,无关 TLSv1.2。
目前一次性详细到查询具体哪个 app 消耗多少流量应该很困难,建议还是用 tcpdump+Wireshark,并禁用其他 app 流量。
或许可以试一下使用安卓自身提供的 TCP 收发长度统计功能,这个不需要禁用其他 app 流量
楼主是想统计手机里所有正在运行的应用各自消耗的流量么。。
想到的思路有用脚本获取所有正在运行的应用的 uid,然后用 $ cat /proc/uid_stat/uid/tcp_rcv 和 $ cat /proc/uid_stat/uid/tcp_snd 获取各自的流量。因为后台运行的系统应用太多了太复杂了,不太可能使用人工去统计吧
所以还是分析 TCPdump 所获得的 pcap 包更加方便么?我现在正准备放弃 Wireshark 用 Python 的 dpkt 库来解析 pcap 包了,感觉 Wireshark 并不能得到这么详细的信息
我就是用的 tcpdump+Wireshark......现在感觉 Wireshark 处理 pcap 包并不能详细的得到我想要的各个 appname 以及所要的流量,所以打算用 Python 的 dpkt 库来解析 pcap 包,根据 SYN 得到 appname
我感觉是。至于 pcap 包中要用哪些数据就没研究过了,查了一下 pcap 包里面还挺多东西。如果 dpkt 库能获取到 appname 的话那还是很方便的。
dpkt 库也不能一下就能得到 appname,而且网上关于 dpkt 库的详解使用方面的实在太少了,大部分都得自己看源码来慢慢实现。我还在研究源码......
tcpdump,wireshark 是否可以 只筛选 youtube 对应的目标 ip。
tcpdump -i eth0 dst host hostname
tcpdump tcp port 23 and host 210.27.48.1
port23 和 hos210.27.48.1 分别代表什么?
手机看 youtube 的时候手机 ip 应该是固定的,但是 youtube 的 ip 应该是不固定的吧,还有只要监听 hostname,抓住的流量就都是 youtube 产生的么
监听 端口为 23 ,ip 为 210.27.48.1 ,youtube 每次出去的 ip 应该是同一个。如果有多个 ip 可以使用 or 加 ip。这块使用方法挺多的。