A.抓Android手机的网络包方法



声明:此文大部分是另一位作者所写,实在对不住,弄丢了他的博客地址,特在此声明。尊重著作权!


1. 手机要有root权限

2. 下载tcpdump  

3.adb push c:\wherever_you_put\tcpdump/data/local/tcpdump

4.adb shell chmod 6755 /data/local/tcpdump

-------------------------------------------------seeking的试验---------------------------------------------

F:\Android\Dev\android-sdk-windows\tools>adb push F:\Android\Dev\tcpdump /data/local/tcpdump

254 KB/s (645840 bytes in 2.480s)

F:\Android\Dev\android-sdk-windows\tools>adb shell chmod 6755 /data/local/tcpdump

F:\Android\Dev\android-sdk-windows\tools>

-------------------------------------------------------------------------------------------------------------------

5, adb shell,  获得root权限怎么获得root权限http://blog.sina.com.cn/s/blog_03f02975010142jq.html

6, cd /data/local

7, ./tcpdump -i any -p -s 0 -w /mnt/capture.pcap

命令参数详解:

       # "-i any": listen on any network interface    监听任何网络端口

  # "-p": disable promiscuous mode (doesn't work anyway)  

  # "-s 0": capture the entire packet  

# "-w": write packets to a file (rather than printing to stdout) 

将抓住的包放到指定的文件中,而不是向标准输出端显示

  ... do whatever you want to capture, then ^C to stop it ...    当你想停止监听时,按Ctrl+C

8, 

9,  在电脑上用wireshark(下载地址:)打开capture.pcap即可分析log

-------------------------------------------------seeking的试验--------注意打开手机的“数据流量开关”----------------

F:\Android\Dev\android-sdk-windows\tools>adb shell

# cd /data/local

cd /data/local

# ./tcpdump -i any -p -s 0 -w /mnt/capture.pcap

./tcpdump -i any -p -s 0 -w /mnt/capture.pcap

tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes

^C

F:\Android\Dev\android-sdk-windows\tools>adb pull /mnt/capture.pcap G:\

609 KB/s (24984 bytes in 0.040s)

以下是G:\ capture.pcap文件在wireshark中打开的情形:

android 网页数据抓取 安卓抓取网络数据包_android


-----------------------------------------------------------------------------------------------------------------------------------------------------------

Execute the following if you would like to watch packets go by rather than capturing them to a file (-n skips DNS lookups. -s 0 captures the entire packet rather than just the header): 

adb shell tcpdump -n -s 0  

Typical tcpdump options apply. For example, if you want to see HTTP traffic: 

只监听http  

adb shell tcpdump -X -n -s 0 port 80

根据以上的信息,写一个bat去执行(tcpdump文件必须在当前目录里)。

开始tcpdump 

adb push tcpdump /data/local/tcpdump

adb shell chmod 6755 /data/local/tcpdump

adb shell rm -r /sdcard/capture.pcap

adb shell  /data/local/tcpdump -i any -p -s 0 -w /sdcard/capture.pcap

pause

下载tcpdump文件到电脑

adb pull /sdcard/capture.pcap

问题:有些机器root后通过adb shell 后,默认不是root用户,需要输入 su

(注:需要su工具邮我99688385@qq.com,附赠其使用方法。)

才能切换到root,这样在执行批处理会有问题,解决方法如下

adb shell "su -c 'sleep 1'"

adb start-server

adb push tcpdump /data/local/tcpdump 

tcpdump是一个命令行方式的嗅探工具。它诞生的时候较早,是许多图形化嗅探工具的雏形。主要作用是截获制定接口或所有接口的数据包,且能按照一定规则过滤截获的数据包,以此满足使用者分析其内容的目的。

在一些Linux发行版本中,tcpdump通常作为标准的软件包被默认安装,当然Android也不例外。执行“tcpdump”命令可以确定是否已安装了tcpdump。如果未安装,到网上搜或是邮我:99688385@qq.com

tcpdump的用法其实很简单,不需要太多的关注,直接输入tcpdump命令可产看详细用法。


上图列出了tcpdump详细的用法,我们常用的方法是使用:


android 网页数据抓取 安卓抓取网络数据包_root权限_02

tcpdump –i interface –s snaplen –w file

i参数的作用是指定需要抓哪个网卡的数据,关于网卡,我们可以用ifconfig查出当前的网卡。在命令行输入“ifconfig”即可。

-s参数指定是否需要分割数据包,一般用0

-w捕获的数据包的存储路径。

关于数据包的查看方法我们可以直接用strings命令来查看数据包,如在/sdcard目录下有一个数据包aa.cap,我们要查看他可以用strings /sdcard/aa.cap进行查看,也可以用strings /sdcard/aa.cap > /data/aa.txt命令,将数据包已字符串形式输入aa.txt文档后再使用命令cat –bn /data/aa.txt查看,当然还可以将数据包取出,放入PC机查看。


至此该文档已结束,希望对阅读者有一定的帮助。