Android移动网络如何抓取数据包

本文章转载于搜狗测试

搜狗输入法8.6版本有这样一个需求:原有的反作弊SDK报活日志发送规则为7天发送一次,使得信息收集滞后,反作弊效果受到影响,现更改为每天一次。看似很简单的一个需求,对于初来乍到的我来说,却有这样一个疑问:如何保证移动网络下更改后的报活日志发送规则生效呢?现将学习到的Android移动网络下抓取数据包的方法分享给大家。

1)下载tcpdump工具

tcpdump(dump the traffic on a network)是Linux中强大的网络数据采集分析工具之一,可以将网络中传送的数据包头完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。Android系统是基于Linux,可以使用tcpdump来抓取数据包。由于普通用户不能正常执行tcpdump,具备root权限的用户才可以直接执行它来获取网络上的信息,所以使用它的前提条件是:手机需要具备root权限。

2)将下载好的tcpdump拷贝到手机

adb push D:/tcpdump /data/local(将下载到D盘的tcpdump工具拷贝到/data/local目录下)

3)修改文件权限

①通过命令修改文件权限

adb shell chmod 777 /data/local (777代表目标文件或目录是任何人都可以读、写、执行)

②通过RE文件管理器修改文件权限

Android移动网络如何抓取数据包_第1张图片

4)使用tcpdump抓包

/data/local/tcpdump -p -vv -s 0 -w /sdcard/mycapture.pcap(网络操作的log存入到/sdcard/mycapture.pcap下)

Android移动网络如何抓取数据包_第2张图片

tcpdump使用方法:

tcpdump [ -adeflnqtv] [ -c 数量 ] [ -F 文件名 ][ -i 网络接口 ] [ -r文件名] [-s snaplen ] [ -T 类型 ] [ -w 文件名 ] [表达式 ]

tcpdump选项介绍:

-a   将网络地址和广播地址转变成名字;

-d    将匹配信息包的代码以人们能够理解的汇编格式给出;

-dd     将匹配信息包的代码以c语言程序段的格式给出;

-ddd   将匹配信息包的代码以十进制的形式给出;

-e     在输出行打印出数据链路层的头部信息;

-f      将外部的Internet地址以数字的形式打印出来;

-l       使标准输出变为缓冲行形式;

-n      不把网络地址转换成名字;

-q            快速输出,只输出较少的协议信息;

-t    在输出的每一行不打印时间戳;

-v       输出一个稍微详细的信息;

-vv     输出详细的报文信息;

-c       在收到指定包的数目后,tcpdump就会停止;

-F      从指定的文件中读取表达式,忽略其它的表达式;

-i     指定监听的网络接口;

-r     从指定的文件中读取包;

-s             从每个分组中读取最开始的snaplen个字节;

-T          将监听到的包直接解释为指定类型的报文;

-w       直接将包写入文件中,并不分析和打印出来;

5)执行网络操作

以反作弊sdk报活日志发送为例:全新安装搜狗输入法→等待1min,发送报活日志→更改手机时间,后调一天,发送报活日志。该网络操作完毕后,关闭DOS窗口即可停止。

6)将mycapture.pcap拷贝到电脑中,用Wireshark打开

Wireshark是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。用wireshark可以筛选出指定host的请求。

Android移动网络如何抓取数据包_第3张图片

你可能感兴趣的:(Android移动网络如何抓取数据包)