tcpdump是个非常好用的抓包工具,用来排查网络相关问题非常方便,这工具也有android版本,下载Android cpdump。
下载之后需要把tcpdump放到android系统里面,所以必须要有root权限才行,类似网上的教程很多,这里我写一下存在一些问题,具体如下
检查设备是否已经自带tcpdump,因为有些设备刷了开发者rom之后就已经内置tcpdump,你再自己下载一个push上去纯属瞎折腾,所以先adb shell进去执行which tcpdump或者busybox which tcpdump查看返回信息确定是否已经有tcpdump,这里需要考虑一下有些设备是集成的busybox工具
权限问题,有些设备你直接push tcpdum文件会发现无法push进去,因为adb shell没有目标目录可写权限,原因很多比如5.0以上的设备被安全策略限制了执行adb shell su会卡住,还有一些厂家执行修改了部分安全策略,这在TV上尤其明显,这个时候你先push到/sdcard目录下,然后remount一下/system,直接将tcpdump移到/system/xbin/目录下即可,具体操作如下
# mount|grep system /dev/block/mmcblk0p7 /system # mount -o remount /dev/block/mmcblk0p7 /system
如果不支持grep命令,直接使用mount,然后找到/system挂载的那一行,复制下来用mount命令remount一下就行了,之后执行下面命令移到系统环境目录下并加上可执行权限
# mv /sdcard/tcpdump /system/xbin/tcpdump # chmod +x /system/xbin/tcpdump
抓包命令
//抓全部包,将内容写入/sdcard/capture.pcap文件,pull下来用wireshark可以查看 # tcpdump -p -vv -s 0 -w /sdcard/capture.pcap //抓http get请求 # tcpdump -s 0 -A 'tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420' //抓http post请求 # tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'
上面抓http请求的命令非常有用,因为Android开发中大部分情况下使用这两个就够用了,而且输出结果非常直观,不需要用wireshark进行过滤
我要评论