关于网络抓包--手机抓包测试
之前尝试了PC上不同系统(Windows和Linux)中的抓包,现在继续探索手机上的抓包 相关知识 对于手机抓包,可以让手机通过PC代理联网(两类方式:1.PC开启代理后手机接入同一网段通过代理上网;2.PC直接开热点让手机连;第二种方式也是代理,只不过PC除了代理功能外还充当了AP)在PC上抓包,或者直接在手机上执行抓包程序(tcpdump以及诸多应用程序,tcpdump及部分app需要手机root,而另一些app甚至无需手机root;命令的输入可以在手机安装终端app或者电脑上使用),前者只能抓取到手机wifi模块,如果PC上使用wireshark则可以实时查看,后者可抓包wifi和cellular data communication(包括GPRS/3G/4G等),有的app可实时查看; 这里使用tcpdump手机版,已root的手机通过USB连接PC,安装好驱动,PC通过adb进入手机执行命令,这样做的好处是尽量减少在手机安装app的同时能抓取手机wifi模块和蜂窝模块的数据,抓包的结果则在PC上进行查看与分析; 具体操作 首先手机需root,否则adb进入手机命令行后无法执行su,有些目录没有权限,直接抓包会提示没有权限操作wifi或蜂窝设备; 手机需装好驱动,让PC和手机通过USB能流畅沟通,adb能顺利连上手机并进入手机系统命令行; 手机需打开开发者选项和USB调试,否则adb devices(列出连接的设备)结果为空,即PC发现不了设备; 手机上弹出的是否信任**需选择信任,否则adb devices列出的设备对应状态为offline,信任后列出的状态为device; 选择的tcpdump需是针对手机编译的版本(手机一般为arm处理器),也可以自行编译; 上述准备工作做好后adb shell进入手机命令终端,su进入root,将SD卡中的tcpdump拷贝至用户app目录如/data/app并修改权限、所属组等(无chgrp可使用touch创建空文件然后cat 原文件 > 新文件;当然也可chown 所属用户:所属组 文件名),执行./tcpdump或者/data/app/tcpdump直接输出,或者加上-w tmp.pcap将结果保存至tmp.pcap文件;也可“mount -wo remount rootfs /”将根目录挂载为读写后(根目录原本只读)拷贝tcpdump至/sbin,接着再“mount -ro remount rootfs /恢复根目录为只读,此时直接执行tcpdump即可; 抓包wifi模块会提示: listening on wlan0, link-type EN10MB (Ethernet), capture size 262144 bytes 说明tcpdump已知道了所抓包设备的链路层协议--Ethernet,和笔记本wifi联网后tcpdump的提示一样; 而抓包cellular connection会提示: listening on rmnet0, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes 这说明tcpdump没能识别link-type或者说没能知道链路层协议是哪种(手机安装busybox后执行busybox ifconfig可显示rmnet0的link层是PPP协议,而用Android自带的ifconfig无显示),在Linux下tcpdump -D列出的可抓包设备会显示 any (Pseudo-device that captures on all interfaces) 抓取这个pseudo-device时tcpdump也会提示上面LINUX_SLL (Linux cooked)那一段 需要说明的是cellular connection时,是有连接的服务,不存在网关(通过route -n可显示),网关在以太网里面才存在 抓包cellular connection时手机IP和该IP的下一跳为10网段一内网IP,而且每次连接后所分IP和traceroute到的下一跳IP都不同,例如现在手机IP是10.a,下一跳是10.b,关闭手机上网后马上再开,tcpdump结果看出手机IP为10.c而traceroute显示手机下一跳为10.d,另外,下下一跳为112.96.*.253,每次也不一样 那么两个手机能否互通呢?用同一位置同一运营商(说明连接到同一基站)的手机上运行Fing这个app,里面有ping工具,去ping测刚才手机的IP,无反应,而ping手机IP下一跳是通的,有没有可能是手机本身对ping无回应呢?同时连接两个手机到同一wifi,互ping都是OK的,会不会是手机针对cellular connection的ping无回应而对wifi的ping回应?我的分析和判断:从执行tcpdump后的显示来看,tcpdump把wifi和cellular看做不同的网络设备,wifi下为wlan0,cellular connection时为rmnet0,底层是不同的硬件在处理,而到了IP这一层,则由系统即软件处理,不同设备提供的信息到了这一层都统一处理,按我的判断,是上联路由根本没有将ping测的数据包转发至目的地,即同一基站下的用户之间并不互通,这一点可通过被ping手机上运行./tcpdump并未显示数据包到达 来验证;还有没有可能是cellular模块本身不支持ping的ICMP?手机app来ping自己的IP,或者adb进入手机命令终端执行ping,是能够ping通自己的;另外,参考http://www.droidforums.net/threads/ssh-daemon-dropbear-on-android-2-0.9038/有的运营商会给手机提供外部IP且可以访问,这样的话cellular和wifi是一样的,如果运营商没提供公网IP或封了inbound的连接,cellular时就没法做服务来被直接访问,结合dynamic domain name service例如 http://no-ip.com 或 http://dyndns.com可以一试; 介绍GPRS原理的资料里面显示手机cellular connection的协议栈里面,应用层下面可以是IP也可以是X.25,现在用自己的3G手机测试,发现是走IP,现在IP化的趋势是不可阻挡了 最后抓包的结果存为文件后使用工具进行分析,wireshark是一个不错的选择 后记: 今天发现Windows下载adb-setup-1.4.3.exe解压得到adb.exe及相关dll,直接执行即可,adb实际版本为1.0.32,前提条件是驱动装好 驱动有MTP驱动(媒体设备、存储相关)、PTP驱动(摄像头相关)、adb驱动,运行adb.exe需要的是adb驱动; 手机上有/sbin/adbd和/system/bin/adb,从文件创建时间来看是系统安装的时候就有的 所以对于一个新手机来说,手机开启USB调试并在随后点击“信任”,PC装好驱动,执行解压的adb.exe即可,如需执行su则手机需root 后记2: adb shell进入手机后su,tcpdump -D显示设备,手机连接wifi或开启wifi热点时会出现wlan0,开启cellular connection时会出现rmnet0,手机开启USB热点时会出现rndis0 后记3: Windows下通过adb进入手机安装busybox(集成多个linux基础命令,比Android自带toolbox强大),执行ls和vi时会乱码,ls会在文件名前后出现乱码,alias ls='ls --color=never'禁止颜色后正常,但vi也是乱码,更好的解决方法是更换终端,用putty替代powershell或cmd,putty设置IP为127.0.0.1端口5037(具体端口需netstat查看,第一个连接默认5037),模式为raw,开启putty前先查看进程确保adb服务开启,没开启的话可执行adb任一命令如adb devices来开启服务,putty回车后输入0012host:transport-usb回车返回OKAY(注意输入时不能有其他字符包括删除、上下左右等),继续输入0006shell:后回车即进入shell,后面的操作和linux环境一样;或者用针对adb优化过的putty,模式选择adb,主机填transport-usb,(也可通过wifi连接,手机adbd打开监听默认端口5555,PC上的server默认监听5037,客户端putty或adb连上PC服务同时PC服务连接手机:5555,网上相关教程很多,但考虑到手机续航能力以及现有诸多app的完善,更重要的是安全隐患,还是usb靠谱),原帖网址:http://forum.xda-developers.com/showthread.php?t=803223以下是其中的节选: We all know that running "adb shell" from the command line is pretty crap, and when using a latter busybox version which has coloring support it's ultimately crap. One workaround was usually to start a telnet server on the phone, and use putty to connect to that telnet server. Actually there is a more easier way to do that which also works for non rooted phones. Actually the Android Debug Bridge has a terminal connection feature (roughly speaking), which will be enabled after you connect to the adb server in "0006shell:" mode. You can actually use the putty to connect to this interface always, by setting the following things: - Turn off line discipline in settings - Use RAW mode to connect to localhost:5037 - Enter "0012host:transport-usb" (without quotes) - Enter "0006shell:" (without quotes) Now you've got a full fledged connection to your device. The main drawback is that it's tedious to repeat the above all the time, so I've made some modifications to the putty binary that adds a new type of connection, called "Adb" To use the enhanced putty (via USB): - Select Adb from the connection type list - Enter "transport-usb" in the host (or any other connection string, check the adb socket interface documentation if you need something else than connecting via usb) - Enter 5037 as port, if it's not already set there. - Connect and enjoy (you might also save this connection, so next time you only have to double-click on the settings) To use this via wireless adb: - Connect to wireless adb using a command shell: "adb connect IP:PORT" (substitute ip and port for the real values) - Enter "transport-any" in the host - Enter 5037 as port if it's not already set there - Connect and enjoy To use this via the android emulator: - Enter "transport-local" in the host. Everything else is the same If you have multiple devices (for example multiple devices connected to usb and/or wileressly) - Enter "transport:serial-number" in the host, where you substitute "serial-number" with the serial of the device you get by using "adb devices". Everything else is the same. DL and source: http://github.com/sztupy/adbputty/downloads 后记4: 最近发现安装wireshark时有一个androiddump默认没选,重新选中安装后,居然可以实时跟踪手机包:1. 手机连上电脑并打开USB调试;2. adb需启动;3. 打开wireshark界面自动显示Android的几个相关interfaces,选中即可进行跟踪 参见:https://www.wireshark.org/docs/man-pages/androiddump.html
Labels: Linux, Operation and Maintenance, phones, Windows
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home