前两天做了一个小android的demo,由于刚接触android所以了解的比较浅,想查看日志以及抓包都有点无从下手,今天有点空闲就想研究下android抓包的一些事情,从网上搜索资料以及找公司android开发学习了下。但是他们都能抓包成功,唯独我的手机不能抓包成功。同事劝我换一台测试机得了,何必呢!但是没办法,有点认死理,并且这台机器感觉用着还行也不想换,就研究了下,下面说一下问题所在,其实在发现问题前感觉很难的问题,但是解决后反而发现真是太简单了。

首先说一下android手机抓包的一般步骤,当然这个网上都有,这里就再重复一下,加深下记忆。

1、           tcpdump文件,由于android手机都是linux内核构成,所以我们可以使用tcpdump来进行抓包。

2、           root,如果手机没有root那么就不能对手机系统文件及文件夹进行操作,那么下面的操作就无法进行,所以手机必须root

3、           tcpdump文件到手机中,连接手机,打开cmd 命令行,输入命令如下:adb push C:/tcpdump ./data/local,该命令拷贝C盘下tcpdump文件到手机的local目录下

4、           tcpdump文件的权限,命令如下:

(1)、输入adb shell,进入手机脚本操作

(2)、输入命令:su,设置root用户访问文件

(3)、输入cd /data/local,进入tcpdump所在目录

(4)、输入chmod 777 tcpdump,设置tcpdump文件权限

         5、    回手机主目录:cd /

6、       输入命令:./data/local/tcpdump -p -vv -s 0 -w /data/local/capture.pcap,开始抓包,包数据保存在local目录下的capture.pcap文件中

7、       待抓包结束按ctrl+c终止抓包

8、       输入adb pull ./data/local/capture.pcap d:/,拷贝手机中的包文件到电脑d盘中

如上所述,就是一般的抓包过程,命令网上都有很多,我们也都是这样抓的,也都没什么问题,但是我的手机偏偏这样抓就是不成功,虽然生成了pcap文件,但是打开以后却不是我想要的文件,而是一个不到1K的文件。经过对tcpdump的研究最终终于发现了问题所在,通常情况下,当我们用tcpdump抓包时,tcpdump启动时如果我们不指定网卡,那么tcpdump默认的只会监视第一个网络接口,通常情况下这样也是没问题的,但是有的手机就会出问题,比如我的手机,这时我们就可以先查看下手机网卡数,我们进入手机脚本操作模式,即输入:adb shell,然后通过在cmd命令中输入:./data/localtcpdump –D来查看手机中的网卡数,然后选择所使用的网卡,我的手机应该使用wlan0但是我的默认第一个网络接口是svnet0所以就抓不到包,这时,我们可以在抓包时稍稍的修改下命令参数,命令如下:./data/local/tcpdump -i wlan0 -p -vv -s 0 -w /data/local/uim_capture.pcap,这样我们就限定抓wlan0接口的包数据,这样就能如愿抓到我想要的包。