经常会有一些测试需求比如:测试手机上某个app的网络通信是否已经加密,或者测试某个app是否偷偷链接某些网站。
根据抓包的对象,主要有两种途径:
1. 在路由器端抓包:使用一台已经连入路由器的PC来抓取路由器上所有的数据传输信息。
2. 在终端抓包:在终端(手机,平板等)上抓取次终端设备的网络传输信息。
注意:可以很容易通过网络下载到很多可以用来抓包的apk,但是前提是android手机或者终端要root过,笔者试过其中的一、二款,感觉不够理想。
其实网上的这些工具也都是使用tcpdump这款命令行工具来实现抓包的,下面我就来简单说一下方法2,也就是终端抓包的具体操作:
【准备】
当然是需要下载好tcpdump这个工具:http://www.strazzere.com/android/tcpdump
你也可以在tcpdump的官网下载源代码编译得到,但是android系统的tcpdump可以从如上的网站得到。从如上的网站上下载的工具不依赖于手机的cpu架构,所以无论arm还是x86平台都可以运行,请放心使用。
【安装】
安装的难易程度因终端是否root而异。请使用adb将tcpdump传输到sd卡中
$> adb push tcpdump /sdcard/
对于已经root过的机器,请使用adb root ,adb remount 后,
$>adb root $>adb remount
然后将tcpdump拷贝到/system/xbin下,修改执行权限(可以使用 chmod 777 tcpdump)
对于没有root过的机器,可以使用一些工具,比如“刷机精灵”来取得root权限。笔者是使用R.E浏览器这款应用手动将tcpdump从sdcard拷贝到/system/xbin,然后添加执行权限。
经过如上的操作,你应该保证你的tcpdump这个文件已经在/system/xbin下,并且已经具备了可执行的权限。
【抓包】
根据使用的场景不同,tcpdump的参数也有相应的设置,这里列举一个常用的 tcpdump -p -vv -s 0 -w /sdcard/log1.pcap
这里将输出都写在了sd卡上的log1.pcap文件中.
如果你使用如上的命令遇到了"device not suitable"类似的问题,说明执行权限还是不对。笔者一般使用如下的命令抓包
$> adb shell su tcpdump -p -vv -s 0 -w /sdcard/log1.pcap
su是为了让tcpdump在root下运行。
如果tcpdump成功的运行起来,你会看到命令行已经挂起了,这个时候你操作需要测试app,数据就被抓到了。
【分析】
得到的数据文件XX.pcap可以用wireshark工具进行分析, 这个工具可以从http://www.wireshark.org/download.html得到。
如果成功安装了wireshark,可以发现你抓出来的数据包有一个小图标:
双击这个文件,wireshark就会给出信息:
这里不打算介绍数据的分析方法,只简单的说一下,首先要确定好你想要分析的数据所在的层(应用层,还是传输层,又或者是其他层),找到对应的协议,然后分析数据。
【总结】
以上就是抓包的方法,同样可以在linux base的系统上使用。
原文:http://my.oschina.net/u/229093/blog/291320