移动性能测试 [tcpdump+Wireshark] 求解一个网上基本上搜不到的问题,希望大家能给点建议.

Yang · 2018年10月08日 · 最后由 rywu 回复于 2018年10月11日 · 687 次阅读

最近老板让我做一个关于统计分析安卓手机app应用流量统计的问题。

我的具体做法就是:

1.手机端打开应用软件youtube,运行1小时

  1. linux端用tcpdump 捕获手机数据包,存成pcap文件,然后保存到win下,然后用wireshark分析

想要得到的结果是,在这1个小时里面,手机只在运行youtube,但后台可能有其他app开启并且消耗流量。
如何根据pcap包和利用wireshark分析区别出主应用youtube和后台应用各自消耗了多少流量数据?

这个问题查了网上好多内容,基本没有找到合适的思路.....都说tcpdump得到的包很难做出这么细节的分析,求大家给点建议

共收到 18 条回复 时间 点赞
Yang #1 · 2018年10月08日 作者

主要是Wireshark好像不能通过pcap包区别出不同的appname,并给出流量数据。
利用会话统计能得到手机端不断发出的请求,但是根本没办法判断出这些每个请求是什么app下的
如下图
100.98.222.250应该是手机端发起的,如果单纯直接将这一列求和的出来的流量只是tcpdump下手机整个系统的流量消耗,区分不出不同的后台应用。

Yang #2 · 2018年10月08日 作者

另外如果看TCP流的话,如下

从发送方能看出里面包含字段com.google.andriod.youtube..............但是这只是其中一个TCP流并且根本无法将全部的TCP流统计起来,将含有com.google.andriod.youtube字段的选出来算出流量.认为这是只用youtube的消耗流量。

所以现在有点苦恼,到底应该怎么做才能达到本来的目的呢......

我记得安卓自身或者一些第三方流量监控软件都可以实现?

Yang #4 · 2018年10月08日 作者
hellcat 回复

但是那些好像不是特别准确,我知道有
$ cat /proc/uid_stat/uid/tcp_rcv

$ cat /proc/uid_stat/uid/tcp_snd

这样的命令可以看某个已经uid应用的流量,但是我不知道后台都有哪些应用在消耗流量。如果只是统计youtube和整个系统的流量的话,我可以用wireshark得到整个系统的流量和用上面的2个命令得到youtube的流量消耗,但是不知道的其他应用就没法统计了

Yang #5 · 2018年10月08日 作者

另外我发现可以用这样的筛选器来得到一些有用的信息:
添加筛选器:tcp.flags.syn==1 然后如下图

红色方框里面内容:很显然的可以发现是appname,是不是就可以根据这一点来得到不同appname的流量
更发现,如果表格里的协议是TCP,则红色方框内不显示appname,如果是TLSv1.2协议,则红色方框内显示appname,这到底是为什么?到底哪个才是正在消耗的流量呢?为什么TCP协议反而不产生流量

Yang #6 · 2018年10月08日 作者

是不是youtube在观看视频的时候,使用的TLSv1.2这样的安全传输协议?

Yang #7 · 2018年10月08日 作者

但是当使用上述筛选器的时候又发现一个问题,就是用筛选器再次打开会话或者端点统计时,发现TCP栏下的数据包以及数据流量大小非常的少:

难道不能用这样的方式得到流量结果么?

Yang #8 · 2018年10月08日 作者

如果我直接根据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获取各自的流量。因为后台运行的系统应用太多了太复杂了,不太可能使用人工去统计吧

Yang #11 · 2018年10月09日 作者
Ribosome 回复

所以还是分析TCPdump所获得的pcap包更加方便么?我现在正准备放弃Wireshark 用Python的dpkt库来解析pcap包了,感觉Wireshark并不能得到这么详细的信息

Yang #12 · 2018年10月09日 作者
Root_123 回复

我就是用的tcpdump+Wireshark......现在感觉Wireshark处理pcap包并不能详细的得到我想要的各个appname以及所要的流量,所以打算用Python的dpkt库来解析pcap包,根据SYN得到appname

Yang 回复

我感觉是。至于pcap包中要用哪些数据就没研究过了,查了一下pcap包里面还挺多东西。如果dpkt库能获取到appname的话那还是很方便的。

Yang #14 · 2018年10月09日 作者
Ribosome 回复

dpkt库也不能一下就能得到appname,而且网上关于dpkt库的详解使用方面的实在太少了,大部分都得自己看源码来慢慢实现。我还在研究源码......

tcpdump,wireshark是否可以 只筛选 youtube对应的目标ip。

tcpdump -i eth0 dst host hostname

tcpdump tcp port 23 and host 210.27.48.1

Yang #16 · 2018年10月11日 作者
rywu 回复

port23 和 hos210.27.48.1分别代表什么?

手机看youtube的时候手机ip应该是固定的,但是youtube的ip应该是不固定的吧,还有只要监听hostname,抓住的流量就都是youtube产生的么

Yang 回复

监听 端口为23 ,ip为210.27.48.1 ,youtube每次出去的ip应该是同一个。如果有多个ip可以使用or 加ip。这块使用方法挺多的。

Yang 回复

你搜索下 tcpdump 用法就有了

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册