在web、app开发中经常需要通过抓包来定位页面、接口返回数据的问题。在mac系统中,charles是一款功能丰富的抓包软件。可以实现app的数据抓包。
工具:
附送charles的破解方法(亲测):
// Charles Proxy License
// 适用于Charles任意版本的注册码,谁还会想要使用破解版呢。 // Charles 4.2目前是最新版,可用。 Registered Name: License Key: 48891cf209c6d32bf4charles
是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当程序连接Charles的代理访问互联网时,Charles可以监控这个程序发送和接收的所有数据。它允许一个开发者查看所有连接互联网的HTTP通信,这些包括request, response和HTTP headers (包含cookies与caching信息)。
charles功能
- 支持SSL代理。可以截取分析SSL的请求。
- 支持流量控制。可以模拟慢速网络以及等待时间(latency)较长的请求。
- 支持AJAX调试。可以自动将json或xml数据格式化,方便查看。
- 支持AMF调试。可以将Flash Remoting 或 Flex Remoting信息格式化,方便查看。
- 支持重发网络请求,方便后端调试。
- 支持修改网络请求参数。
- 支持网络请求的截获并动态修改。
- 检查HTML,CSS和RSS内容是否符合W3C标准。
charles在工作中主要使用的功能
- 将Charles设置成系统代理。勾选系统代理后,系统本地发出去的请求都能被截取下来。如果只抓取APP的包的话,可关闭此配置,这样不会出现太多的数据看着比较乱。
需要注意的是,Chrome 和 Firefox 浏览器默认并不使用系统的代理服务器设置,而 Charles 是通过将自己设置成代理服务器来完成封包截取的,所以在默认情况下无法截取 Chrome 和 Firefox 浏览器的网络通讯内容。如果你需要截取的话,在 Chrome 中设置成使用系统的代理服务器设置即可,或者直接将代理服务器设置成 127.0.0.1:8888 也可达到相同效果。
- 截取移动设备上的网络请求包 2.1手动重复请求(Repeat,Advanced Repeat) 2.2手动模拟请求(Compose) 2.3修改网络请求内容(Compose)
- 过滤网络请求
- 代理转发
- 支持https请求抓包(如果配置了还是抓不到,下面有解决方案)
charles配置 http
(1)配置代理端口号
Proxy -》 Proxy Settings -》 Port,port可以随便指定,这里取默认的8888;
(2)配置手机端代理 ip;
将手机与pc端连接同一个无线网络,Android手机的网络代理一般在设置页面,点击当前连着的wifi到网络详情,在(小米8)下方手动修改代理配置,然后将你的电脑ip(例如:192.168.2.103)和第一步中配置的端口号(8888)填写到手机上即可。如下图:
查看本机IP地址:Help -> Local IP Addresses
配置手机代理:
以上的配置就可以解决http的抓包。(如何抓,设断点、map、补充)
charles配置 https
这时,当查看https的包时,会发现response是乱码,或者处于⬆️吊死的请求状态。这时候就要设置https的相关配置。
(1)添加SSL Proxiyng
具体步骤是:Proxy -》 SSL Proxiyng Settings -》勾选“Enable SSL Proxying”,并点击下方的Add,你可以这样配置:
host是你要抓的域名或者ip(这里用通配符*,表示抓去所有的https请求),port为443。
(2)下载手机端、mac端的ssl证书
mac端证书
如果是v3.10 以前的版本首先去 .crt 文件,选择「总是信任」按钮,在钥匙串访问中即可看到添加成功的证书。如果是v3.10以后的在菜单中找到 Help -> SSL Proxying -> Install Charles Root Certificate.
添加好证书之后,右键证书显示简介,点击后点击信任,选则始终信任。
手机端证书
charles 执行以下步骤:Help -> SSL Proxying ->Install Charles Root Certificate on a Mobile Device…
按照图中的说明在手机浏览器中打开安装证书。
好了大功告成,现在就应该抓包电脑浏览器和手机app的数据了;
问题:
为什么有时候抓不到包? 检查一下是不是启动了代理上网,关掉重启就可以了(翻墙的) 这是笔者遇到的问题,因为笔者使用的是代理上网方式,这可能根charles的代理有所冲突,解决方法是,设置 -> 网络 -> Wifi -> 高级 -> 代理,在左侧的配置协议列表中取消勾选"自动发现代理"和“自动代理配置”。重启charles,再尝试一下,看能否charles抓取mac的网络请求包。