最近老板让我做一个关于统计分析安卓手机 app 应用流量统计的问题。
我的具体做法就是:
1.手机端打开应用软件 youtube,运行 1 小时
想要得到的结果是,在这 1 个小时里面,手机只在运行 youtube,但后台可能有其他 app 开启并且消耗流量。
如何根据 pcap 包和利用 wireshark 分析区别出主应用 youtube 和后台应用各自消耗了多少流量数据?
这个问题查了网上好多内容,基本没有找到合适的思路.....都说 tcpdump 得到的包很难做出这么细节的分析,求大家给点建议
我记得安卓自身或者一些第三方流量监控软件都可以实现?
但是那些好像不是特别准确,我知道有
$ cat /proc/uid_stat/uid/tcp_rcv
$ cat /proc/uid_stat/uid/tcp_snd
这样的命令可以看某个已经 uid 应用的流量,但是我不知道后台都有哪些应用在消耗流量。如果只是统计 youtube 和整个系统的流量的话,我可以用 wireshark 得到整个系统的流量和用上面的 2 个命令得到 youtube 的流量消耗,但是不知道的其他应用就没法统计了
是不是 youtube 在观看视频的时候,使用的 TLSv1.2 这样的安全传输协议?
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。这块使用方法挺多的。