(3)使用Charles进行数据抓包

概述


从功能来说,Charles工具主要用于查看接口的返回情况,不支持UI和交互功能的调试。Charles工具其实就是一个代理服务器。具体使用方式请看后续内容。


charles代理设置


点击后进入如下所示界面

记住此处的port,默认为8888,也可以进行修改,只要不冲突就可以,勾选上Enable transparent HTTP proxying,到此为止,完成了电脑端的设置。


设置手机代理


首先,需要知道电脑的ip地址,我的电脑上通过系统偏好设置->网络可以查看

将手机连入和电脑一样的网络,手机进入wifi设置,点击修改网络就到如下界面,勾选“显示高级选项”,点击代理

点击代理后进入如下界面,服务器主机名处填写刚才查到的电脑的ip地址即可,服务器端口填写第一步中charles处设置的端口,默认是8888,如果做了修改,填写设置charles时修改的端口值。

点击保存,此时charles上会弹出一个对话框,点击allow即可。此时就可以抓取手机上的http数据包了(注意不是https)

如下图所示,点入一个应用后,抓取到的http包

到此为止,完成了第一大步骤的设置,可以通过电脑抓取手机的HTTP数据包了

注意:对于HTTPS数据,到此步为止,抓包工具上的列表部分会显示一堆unknown的地址


屏幕电脑数据包


完成之前的步骤,charles会同时抓取手机以及电脑上的数据包,如果针对手机抓包可以通过取消勾选下图所示的选项屏蔽掉

屏蔽电脑数据包


连接失败解决方案


手机连接不上charles的几种原因及解决方案:

1.确认手机跟电脑是不是在一个wifi环境下,我在使用过程中又一次手机由于wifi信号强弱问题自动切换过wifi导致抓了一般的数据包抓不到了

2.可以尝试更换一下端口号(8888可能已经被占用)

3.可以通过电脑手动添加手机的ip

4.试试关掉电脑防火墙,在重新连接

5.最后大招,万能重启。。。重新打开charles,重新设置手机连接。。。


抓取HTTPS数据包


由前文可知,想要正常抓取HTTPS数据包还需要进行额外的操作,

1、电脑端配置 --- 进入charles的Help->SSL Proxying->Install Charles Root Certificate

安装证书

点击Install Charles Root Certificate之后,会弹出mac的钥匙串访问页面

备注:正常第一次进去这个证书应该是一个红叉,我这里由于已经进行过设置所以显示正常

右键点击该证书  => 选择“显示简介选项”  => 进入信任栏目,将其全部置为“始终信任”。完成这一步的设置后,这个根证书应该会跟我上面一个截图一样,而不会显示红叉。

接着点击Proxy->SSL Proxy Settings,弹出如下页面

弹出的对话框中,勾选Enable SSL Proxying,然后点击add添加相应的服务域名和端口号即可,点击ok(此处将host设置为*的意思是主抓取全部的http是数据包,如果想针对某个域名抓取可以在此设置)


2、在手机端安装证书,点击Charles上的Help->SSL Proxying->Install Charles Root Certificate on a Mobile Device or Remote Browser

点击之后弹出如下对话框:

安装证书提示

接着在手机浏览器上访问charlesproxy.com/getssl这个地址(此处请注意,如果是小米手机,最好不要用自带的浏览器,亲自踩坑的忠告……),我的手机让我输入锁屏密码,输入之后,会弹出如下界面:

手机安装证书

输入一个名字比如charlesproxy之后点击确定即可。


访问验证


再次打开手机访问程序,可以看到charles上能够看到https的接口的地址和数据:

抓包结果图

注意点


1、有一些应用使用的网络框架是不允许通过代理访问的,此时通过charles抓包显示的地址仍是unknown,或者手机上访问该应用会提示网络连接错误等信息,此时取消勾选charles的SSL Proxying settings中的勾选框就可以正常访问了。

2、抓取工作完成后,记得把手机上的代理设置恢复原样,否则当电脑上的charles关闭时,手机将无法正常访问网络。