在实际工作中,对应用程序进行网络抓包是分析网络行为必不可少的一步,这里谈一下抓包的具体过程。
Windows下一般会使用wireshark,wireshark只是一个可视化的应用,底层还是借助了WinPcap,而WinPcap也是基于libpcap的封装。Linux下使用tcpdump,这是基于libpcap的一个命令行工具。安卓底层是Linux,所以也是用tcpdump进行抓包。
安卓App抓包有下面几步:
App安装,可选择真机或模拟器。选择真机的好处在于App运行正常,因为是真实环境嘛,不像模拟器,有的App检测环境时,可能会闪退。但选择真机会因为没有root权限或者Linux命令工具功能被限制了,不太好使。所以还是推荐使用模拟器,我一般使用雷电模拟器,其他的应该也行。
模拟器装好后,在控制台下,使用adb工具进入Linux命令行界面。可通过adb devices查看设备,再用adb -s emulator-5554 shell(这里的emulator-5554是模拟器设备的名称,如果不是就需要替换为实际的)
在命令行敲ps命令,通过App的包名找到相应进程,这些App进程的父进程都是一个叫做zygote或zygote64进程。记下它的PID,后面会用到。
下面要查找该PID对应的进程占用的端口,使用命令:netstat -tunlp | grep PID,回车后打出类似下面的内容:
tcp 0 0 172.16.1.15:44508 47.100.116.9:30300 ESTABLISHED 2039/cn.jj
tcp 0 0 172.16.1.15:54883 120.133.38.93:22001 ESTABLISHED 2039/cn.jj
udp 0 0 172.16.1.15:35936 47.100.116.9:30102 ESTABLISHED 2039/cn.jj
有了这些信息,接下来就可以抓包了。比如敲命令:tcpdump dst host 47.100.116.9 and tcp port 30300 -c 10,回车后打印出类似下面内容:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
01:30:04.227803 IP 172.16.1.15.44508 > 47.100.116.9.30300: Flags [P.], seq 1077751643:1077751659, ack 6419869, win 65320, length 16
01:30:04.235918 IP 172.16.1.15.44508 > 47.100.116.9.30300: Flags [.], ack 19, win 65320, length 0
01:30:07.026371 IP 172.16.1.15.44508 > 47.100.116.9.30300: Flags [P.], seq 16:35, ack 19, win 65320, length 19
01:30:07.026572 IP 172.16.1.15.44508 > 47.100.116.9.30300: Flags [P.], seq 35:54, ack 19, win 65320, length 19
01:30:07.027146 IP 172.16.1.15.44508 > 47.100.116.9.30300: Flags [P.], seq 54:73, ack 19, win 65320, length 19
01:30:07.027349 IP 172.16.1.15.44508 > 47.100.116.9.30300: Flags [P.], seq 73:92, ack 19, win 65320, length 19
01:30:07.027442 IP 172.16.1.15.44508 > 47.100.116.9.30300: Flags [P.], seq 92:111, ack 19, win 65320, length 19
01:30:07.027582 IP 172.16.1.15.44508 > 47.100.116.9.30300: Flags [P.], seq 111:130, ack 19, win 65320, length 19
01:30:07.027968 IP 172.16.1.15.44508 > 47.100.116.9.30300: Flags [P.], seq 130:165, ack 19, win 65320, length 35
01:30:07.028156 IP 172.16.1.15.44508 > 47.100.116.9.30300: Flags [P.], seq 165:184, ack 19, win 65320, length 19
10 packets captured
10 packets received by filter
0 packets dropped by kernel
这条抓包指令的意思是抓取发往主机47.100.116.9,端口30300的tcp包,抓取数量为10个。
通常要将抓包保存为pcap文件,在电脑上使用wireshark打开分析,可使用命令:tcpdump -i eth0 host 47.100.116.9 -s 0 -c 100 -nn -w /sdcard/1.pcap,这表示抓取经过网卡eth0的,来自或发往主机47.100.116.9的100个网络包,保存到文件/sdcard/1.pcap,这里-s 0表示抓取完整包,-nn表示不显示抓包过程的打印信息。
讲到这里就讲完了,关于tcpdump的抓包指令可以参考网络上的介绍。更多问题,欢迎再次留言评论!