抓包大全 通过Charles抓取Android的Https链接数据

CSDN 发表于 2021/02/22 23:36:52 2021/02/22
【摘要】 Android 实现抓取Https数据 1.为啥要会抓包2.电脑手机同一局域网,设置手机手动代理。3.抓取Https,Charles需要设置什么4.抓取Https,手机需要设置什么5.Android 7.0 以上Charles无法抓取HTTPS包解决6.完结撒花 1.为啥要会抓包 a.当公司没有接口文档,但需要做接口测试的时候,需要通过代理工具,对接口进...

1.为啥要会抓包

a.当公司没有接口文档,但需要做接口测试的时候,需要通过代理工具,对接口进行抓取。
b.当开发上传图片时,不知道自己到底上传没上传,这时候就可以通过抓包来收集证据,避免后台甩锅。
在这里插入图片描述

2.电脑手机同一局域网,设置手机手动代理。

a.可通过Charles查看电脑IP地址,也可以通过命令行输入ipconfig查看IP地址
在这里插入图片描述
b.之后通过设置手机手动代理,端口号设置为8888
在这里插入图片描述
设置完后,Charles会弹出一个框框,如下图所示,然后选择Allow。
在这里插入图片描述
这样就可以愉快的抓取手机的请求信息了。
在这里插入图片描述

c.到目前为止只能抓取Http接口的数据,如果是Https的请求就会出现下图的这种情况。那么我们应该怎么办呢?
在这里插入图片描述
在这里插入图片描述

3.抓取Https,Charles需要设置什么

a.先打开Charles 的代理功能:在菜单栏上选择“Proxy -> Proxy Settings”,填入代理端口 8888,并且勾上 “Enable transparent HTTP proxying”;
在这里插入图片描述 b.再选择“Proxy—SSL Proxy Settings”,勾选“Enable SSL Proxying”,在Location部分选择add,如下图所示,host中填“”,port中填“”,表示任务域名的数据;
在这里插入图片描述

c.在Charles 的顶部菜单,点击“Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device or Remote Browser”;
在这里插入图片描述
然后会出现一个弹窗,点击弹窗中“确定”;
在这里插入图片描述

4.抓取Https,手机需要设置什么

a.打开手机浏览器,输入http://chls.pro/ssl,访问该地址会下载charles证书,将此证书安装到手机上;
在这里插入图片描述
b.在设置里面搜索证书,然后点击安装证书,然后找到刚才的证书点击安装。
在这里插入图片描述
在这里插入图片描述

5.Android 7.0 以上Charles无法抓取HTTPS包解决

从 Android 7.0 开始,默认的网络安全性配置修改了。所以需要进行一些代码上的配置操作。
a.Android 6.0及更低版本的应用默认网络安全性配置如下:

<!-- 默认允许所有明文通信 -->
<base-config cleartextTrafficPermitted="true"> <trust-anchors> <!-- 信任系统预装 CA 证书 --> <certificates src="system" /> <!-- 信任用户添加的 CA 证书,Charles 和 Fiddler 抓包工具安装的证书属于此类 --> <certificates src="user" /> </trust-anchors>
</base-config>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

b.Android 7.0-8.0的默认网络安全性配置如下:

<!-- 默认允许所有明文通信 -->
<base-config cleartextTrafficPermitted="true"> <trust-anchors> <!-- 信任系统预装 CA 证书 --> <certificates src="system" /> </trust-anchors>
</base-config>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

c.Android 9.0及更高版本的默认网络安全性配置如下:

<!-- 默认禁止所有明文通信 -->
<base-config cleartextTrafficPermitted="false"> <trust-anchors> <!-- 信任系统预装 CA 证书 --> <certificates src="system" /> </trust-anchors>
</base-config>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

通过a、b、c的对比可以从中发现规律,在 Android 7到 Android 8.1,默认不再信任用户添加的 CA 证书,所以也就不再信任 Charles抓包工具的证书,所以抓取 HTTPS 包时才会失败。而且在 Android 9.0(API 28)及更高版本上,不仅只默认系统预装的 CA 证书,还默认禁止所有明文通信(不允许 http 请求)。
在这里插入图片描述
划重点(大招来了)
前提:在手机端和电脑端都必须安装https的安全证书
配置:打测试包时,项目设置默认信任所有证书(系统+用户,Charles)

First:在工程res文件夹下的xml目录(没有xml就自己创建一个)中创建一个名为 network_security_config.xml的文件
在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>

<network-security-config> <!-- 支持 Android 9.0 以上使用部分域名时使用 http --> <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">sample.domain</domain> </domain-config> <!-- 支持 Android 7.0 以上调试时,信任 Charles 和 Fiddler 等用户信任的证书 --> <debug-overrides> <trust-anchors> <!-- 信任系统预装 CA 证书 --> <certificates src="system" /> <!-- 信任用户添加的 CA 证书,Charles 和 Fiddler 抓包工具安装的证书属于此类 --> <certificates src="user" /> </trust-anchors> </debug-overrides>
</network-security-config>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

Second:在AndroidManifest里的标签中,添加如下代码,在清单文件中指向该文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config"
... > ...
</application>
</manifest>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

然后重新再运行项目,结果看下方。

6.完结撒花

在这里插入图片描述
这样就可以快乐的看到抓取https的请求了。
在这里插入图片描述

文章来源: blog.csdn.net,作者:李小白的博客,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_38363506/article/details/113862654

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。