Charles网络抓包工具的使用介绍
使用License
Registered Name: https://zhile.io
License Key: 48891cf209c6d32bf4
打开工具charlse->help->Register Charls 。填写上面的name 与key 然后重启即可。
原理
简单来讲就是Charles充当一个“中间代理人”
的角色,可以允许你在浏览器和服务器之间通信时,截取并解密其通信数据。因为Charles拦截客户端请求后,代替客户端向服务器请求并返回自己的证书给客户端,更改了证书,如果客户端不安装和信任这个证书,客户端就会出现“报警”并终止连接。具体参考文章:浅谈Charles抓取HTTPS原理
Charles的安装
安装地址:https://www.charlesproxy.com/download/
如何破解:
在网上可搜索得到,一般是替换安装目录下的charles.jar包即可。
设置手机HTTP代理
查看电脑的IP地址,通过ipconfig/ifconfig命令或网络设置中查看。
![](http://upload-images.jianshu.io/upload_images/3251201-1b9df9aa3ae4b240.png?imageMogr2/auto-orient/strip|imageView2/2/w/379/format/webp)
电脑上打开Charles并点击允许
选择允许之后,手机才能上网。
![](http://upload-images.jianshu.io/upload_images/3251201-757b0af2717d89ab.png?imageMogr2/auto-orient/strip|imageView2/2/w/779/format/webp)
进行HTTP抓包
例如在手机上访问百度,如下:
![](http://upload-images.jianshu.io/upload_images/3251201-4f9367bb5b93dc8d.png?imageMogr2/auto-orient/strip|imageView2/2/w/1067/format/webp)
HTTPS抓包
在没有进行设置前,HTTPS的是这样的:
![](http://upload-images.jianshu.io/upload_images/3251201-167606b6f75e25d1.png?imageMogr2/auto-orient/strip|imageView2/2/w/349/format/webp)
需要在HTTP的基础上进行设置,步骤如下:
在手机设备上安装SSL证书
在Charles上选择:Help --> SSL Proxying --> Install Charles Root...
![](http://upload-images.jianshu.io/upload_images/3251201-b8300babb3f3d9e6.png?imageMogr2/auto-orient/strip|imageView2/2/w/1075/format/webp)
弹窗提示这个:
![](http://upload-images.jianshu.io/upload_images/3251201-7f214ac9ff523f70.png?imageMogr2/auto-orient/strip|imageView2/2/w/779/format/webp)
然后在Safari浏览器上输入:chls.pro/ssl 进行证书的安装。(注意要先设置好代理,并且在电脑端打开了Charles).
![](http://upload-images.jianshu.io/upload_images/3251201-56ffddf874affe19.png?imageMogr2/auto-orient/strip|imageView2/2/w/376/format/webp)
安装证书:(第一次且在iOS11以上会出现是否允许的提示,选择”允许“)
![](http://upload-images.jianshu.io/upload_images/3251201-c39d4998d75bd3a6.png?imageMogr2/auto-orient/strip|imageView2/2/w/355/format/webp)
选择安装:(如果有密码需要输入开机密码)
![](http://upload-images.jianshu.io/upload_images/3251201-3461e93ac8940b7d.png?imageMogr2/auto-orient/strip|imageView2/2/w/377/format/webp)
安装完证书后,在iOS10.3
后,需要在设置--》通用--》关于本机--》证书信任设置
中完全信任Charles证书
![](http://upload-images.jianshu.io/upload_images/3251201-ced3802056fa6674.png?imageMogr2/auto-orient/strip|imageView2/2/w/383/format/webp)
Charles上设置proxy
打开Proxy -> SSL Proxying Settings:
![](http://upload-images.jianshu.io/upload_images/3251201-6acc7909d30f6a2e.png?imageMogr2/auto-orient/strip|imageView2/2/w/312/format/webp)
选择添加一个或多个需要拦截的地址:
![](http://upload-images.jianshu.io/upload_images/3251201-961750174a877e61.png?imageMogr2/auto-orient/strip|imageView2/2/w/592/format/webp)
host设置成要抓取的接口,断开设置成443:
![](http://upload-images.jianshu.io/upload_images/3251201-03fc1fca257c36ed.png?imageMogr2/auto-orient/strip|imageView2/2/w/874/format/webp)
也支持设置成通配符:* ,则拦截所有的请求。
重新发送请求,进行HTTPS抓包
![](http://upload-images.jianshu.io/upload_images/3251201-4c6bdc563493b850.png?imageMogr2/auto-orient/strip|imageView2/2/w/930/format/webp)
重新打开客户端,发送接口请求,可以抓取到如下的HTTPS请求。
可以抓取到请求的接口,请求的参数,header等信息:
![](http://upload-images.jianshu.io/upload_images/3251201-87290001d1f90e91.png?imageMogr2/auto-orient/strip|imageView2/2/w/773/format/webp)
这样对于我们分析App或网页的请求或相应数据格式及其正确性很有帮助。
模拟慢速网络
有时候我们需要观察在慢速网络或高延迟的情况下客户端的表现如何,在Charles上可以设置指定的网络情况。
在Proxy -> Throttle Settings
中设置:
![](http://upload-images.jianshu.io/upload_images/3251201-aef6cf67b954bac5.png?imageMogr2/auto-orient/strip|imageView2/2/w/500/format/webp)
然后启用Throttle:
![](http://upload-images.jianshu.io/upload_images/3251201-74cd05a27930029b.png?imageMogr2/auto-orient/strip|imageView2/2/w/1044/format/webp)
可以选择设置指定的网络请求,设置下载或上传的网速。然后选择
Proxy -> Start Throttling
或工具栏上的🐢图标开始限速。
修改网络请求内容
有时候我们在调试接口时,需要修改某些请求参数,以查看服务端返回的数据正不正确,而修改客户端的话,每次修改后还要重新运行,浪费时间,效率低下,可以通过Charles来拦截请求后,直接修改请求参数后重新执行请求。
在某些文章中会说到可以通过右击某个网络请求,然后选择Edit来编辑地址、端口和参数,但我试过多次都没有这个edit(版本是4.1.4),不知道是不是我操作问题。于是使用断点
来完成。
- 启用断掉,点击工具栏的
Enable Breakpoints
或在Proxy中或使用快捷键command+K
来启用; - 在某个请求中右键,选择Breakpoints来增加断点的请求,或在
Proxy->Breakpoint Setting
中来手动增加或移除; -
然后重新发起请求,会出现一个Breakpoint的tab页,在其中可以修改请求的参数、地址等,最后在Execute执行。
image
修改服务端的响应内容
有修改网络请求相关参数的需求,那么也会有需要修改服务端响应内容的请情况。有时我们需要让服务端返回一些指定的内容,方便我们做调试,但是如果服务端做数据结构的改造会比较麻烦,所以使用Charles来修改一下服务端返回的内容,然后等我们调试通过后,再有服务端进行相关的改造。
Charles提供了3种功能来达到修改服务端返回内容:
-
Map功能
;(Map Remote & Map Local),将网络请求重定向到另一个网络地址或本地文件; -
Rewrite功能
;(对网络请求进行正则替换) -
Breakpoint功能
;(临时性的修改)
Map功能
Map Remote功能,将当前的网络请求重定向到另一个地址,响应的数据都由这个新地址返回。如将test.com重定向到test111.com的地址:
![](http://upload-images.jianshu.io/upload_images/3251201-6582d5fb946a213d.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
Map Local功能,即将网络请求响应数据映射到本地的一个已经经过修改的文件中,这需要先通过Save Respones...
功能将请求响应数据保存到本地当中。
![](http://upload-images.jianshu.io/upload_images/3251201-79df25438acf0167.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
Rewrite功能
Rewrite即根据设置的一些正则规则,来匹配请求或响应的内容,进而进行替换成设置的响应的值。
![](http://upload-images.jianshu.io/upload_images/3251201-e6eea8801a3f9489.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
Breakpoint功能
上面的Map功能和Rewrite功能都是长期性的修改,有时我们往往只需临时修改请求的某些数据。这个断点功能就是在发起请求后,Charles进行拦截后,临时修改请求内容或响应内容,这个跟上面的修改网络请求内容一样,在Breakpoint中的Edit Response来直接修改响应的内容,最后Execute即可。
总结:
问题1:安装认证失败,因为自己开着vpn导致失败,关闭后认证通过。
参考:https://www.jianshu.com/p/93ef09fd299e