一、Charles手机抓包设置
第一步:设置Charles为允许状态,并设置好接入的接口
在Charles的菜单栏选择“Proxy”->“Proxy Settings”,填入代理端口8888(⚠️这个端口不一定填写8888,也可以写别的端口),☑️上“Enable transparent HTTP proxying”第一步就完成了。如下图:
如果端口设置成8888,当手机连接代理时填写的端口要跟该设置的端口一样
第二步:找出Charles电脑的ip
法1:在Charles菜单栏选择“Help”->“Local IP Address”,就会出现Charles所在电脑的ip。如下图:
法2:获取IP地址也可以在cmd中输入ipconfig。IPv4
第三步:将端口号和IP配置到手机中并完成配对
注意事项:手机和电脑需要连接的是同一个WIFI
手机上的操作(设置代理时找到的代理因手机而异,并不是全部都是长按):
打开手机“设置”->“WLAN”,选中当前连接的Wi-Fi名长按选择“修改网络”,在高级选项中找到代理,选择手动配置代理,将第一步的端口号填到“端口”,第二步获取到的ip填写到“主机名”,点击保存。(注意:经常出现一个现象,很多时候抓包完后手机代理忘记关闭,第二天测试时发现手机无法访问网络,测试人员可能还以为接口出现问题,然后让开发者找原因,结果捣腾到后面代理未关。)
最后,打开手机任意需要网络的程序,电脑端Charles就会出现一个手机端请求连接的确认弹窗,点击允许(allow)即配对成功,现在开始可以用手机抓包了哦~(其实我电脑配对成功了,但并没弹这个窗口)。
到此为止可以抓到http,如果想抓https,需要下载安装证书。
第四步:下载安装证书
1.电脑端:按下图操作
点击“安装证书”,在点击“下一步”,设置如下,后面再点击下一步,最后点击确定。
点击上图的“完成”,会弹窗提示“导入成功”
2.手机下载ssl证书
1)手机端安装证书:按下图操作
弹窗后点击“确定”
2) 手机浏览器输入网址:http://charlesproxy/getssl 或则 chls.pro/ssl,即可下载完后自动安装证书到手机端,若证书安装失败可往下看第二大点的 “问题三”。
完成了以上步骤就可以抓到https请求的数据了,如抓到穿山甲广告的请求和响应的数据,效果图如下(穿山甲想要的抓包数据就是两个绿色方框内容):
其他配置(便于查找数据):
1.只想查看手机的记录
菜单栏选择“proxy”——>"windows proxy"默认是勾上的,去掉勾就可以了
2.只想看某个域名抓包数据,在Filter过滤域名
二、Charles手机抓包遇到的问题和解决方法
问题一:Charles打开后无法打开网页。
原因1:查看是否勾选了Charles菜单栏 ——> Tools ——> Allow List...
解决方法:Enable Allow List前面的方框不能勾选
原因2:电脑开了代理
解决方法:电脑代理关闭
...也许还有其他原因,但我并未遇到,欢迎补充
问题二:手机可以访问网页,测试我们自己app时发现访问不了接口
解决方法:项目的清单文件中设置android:networkSecurityConfig="@xml/network_config"
network_config的内容:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="user" />
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>
问题三:证书下载后,不能安装
解决方法:证书的后缀名是pem,部分手机并不能识别后缀名为.pem的证书,此时需要找到下载证书的位置,把下载到的证书重新命名后缀名改成.cer。再点击证书会自动安装,安装后弹出一个命名证书的窗口,命名一下即可。(若没有屏保密码,此过程会提示需设置屏保密码,根据提示设置即可,设置的密码可得记得,不然后面手机解不了锁)
备注:部分手机直接点击证书是不能自动安装的,(如:OPPO A5)安装证书需在“设置”——>“其他设置”——>“设备与隐私”——>“从存储设备安装证书”——>找到下载证书所在的文件夹,点击证书进行安装(注意:有些人到这步卡住了,发现页面提示:无任何文件,亲,请点击左上角的三条横杆进行查找证书,整个抓包过程细节非常多,一不小心就掉到坑里了抓包失败)
问题四:抓包的域名下 全部是unknown,右侧出现了乱码
解决方法:菜单栏中选择“Proxy”——>"SSL proxying settings"——>"Add"——>全部填*——>再点击OK,记得勾选“Enable SSL Proxying”前面的方法,填上 *:443 和 *:*
Add后的效果
如果还是出现unknown错误,请检查证书是否失效或则未安装,若是手机上安装的证书时间比较久远,请清除凭据再重新安装一下。
安装好之后要设置信任该证书,不然抓包仍会显示unknown类型。
问题五:charles抓取手机APP,配置正确检查没有以上问题却抓不到数据
1.添加代理ip范围,在此可把0.0.0.0/0添加进去,也可添加自己手机的IP地址,按以下图片步骤把手机ip地址添加进去
2、若还是失败,确认一下电脑的防火墙是否是关闭状态(所有的防火墙都需要关闭)
勾选关闭防火墙
问题六:打开Charles,手机连接上代理后无法访问网络,可试一试下面的方法
解决方法:
1.检查电脑防火墙是否关闭(确认防火墙是关闭状态)
2.检查手机代理的“主机名”和“端口”是否正确
3.Charles是否开启了黑名单白名单,都把其关闭
4.再次操作本文章第一大点的“第四步:下载安装证书”
5.有些设置可能没生效,重启一下Charles
抓不到数据其他补充:
第一大点的中的“第一步”设置的端口号8888被占用了,查看端口号被占用和关闭正在占用的端口进程,可参照以下文章。
CSDNhttps://mp.csdn/mp_blog/creation/editor/120900852
问题七:检查电脑和手机上安装的证书是否过期
1.电脑端
如:我的电脑安装的证书已过期,在Charles的状态栏中Help——>SSL Proxying——>Install Charles Root Certificate,出现以下提示,此时若点击安装证书,则还是一样的效果,需要移除证书再重新安装证书
移除电脑上安装的证书如下:
在电脑上安装证书,即:重复本文章上面的“一、Charles手机抓包设置 的 第四步:下载安装证书 (1.电脑端)”
2.不同手机操作有些不一样,太久未抓包的手机,建议直接清除凭据重新安装证书
问题八:用高版本系统手机抓包(手机无法访问网络)
使用高版本系统手机抓包,安装的app如果未在项目的清单文件中设置android:networkSecurityConfig="@xml/network_config"则无法抓到该app的https接口,network_config内容请查看本文章上面的 “二、Charles手机抓包遇到的问题和解决方法(问题二)”,注意:由于几乎所有的app接口都是https,当手机设置代理后没加networkSecurityConfig的app是无法访问https接口的,导致现象是“手机无法访问网络”,但其实只有加networkSecurityConfig的app在手机设置代理时才可以正常使用app功能
若是合作的app,可以要求开发人员添加android:networkSecurityConfig="@xml/network_config"相关配置再打包成apk进行抓包,但大部分抓包的apk可能都是要我们自己添加,则需要对apk进行反编译,反编译后添加network_config.xml文件,并且在清单文件AndroidManifest.xml设置android:networkSecurityConfig="@xml/network_config",再编译和签名成apk,签名后的apk则可以抓到https接口数据啦