当前位置: 首页 > 科技观察

基于iOS的Charles抓包实践

时间:2023-03-15 22:43:04 科技观察

在日常开发中,我们看不到应用程序与服务端之间收发的内容。如果没有这种可见性,我们要确定故障的确切位置将非常困难且耗时。小时。Charles是一个在PC上运行的Web代理。我们配置应用程序通过Charles访问网络,然后我们就可以在Charles上记录和显示所有发送和接收的数据,这样可以大大提高调试程序的效率。从下图可以看出Charles的作用:Charles有以下几个常用功能:请求预览:通过分组或顺序视图预览和过滤请求数据;请求抓取:抓取HTTP和HTTPS请求数据和响应数据;请求断点:拦截指定的请求或响应,并预览中间数据;数据修改:修改请求数据和响应数据以匹配数据测试;requestresend:指定请求重复发送,以测试后端功能和性能;网速模拟:设置网速延迟,在手机上模拟2G/3G/4G网络;由于Charles的功能较多,文章中难以对其进行详细介绍,因此笔者以Charles在项目中的使用为切入点,针对最常用、最有用的几个功能进行介绍。1.安装CharlesCharles是一款付费软件,有30天的免费试用期。之后每使用30分钟会强制退出一次,重启后可以继续使用。Charles安装包可以从Charles官网获取。2、请求预览Charles启动后,以抓包模式运行。由于Charles会自动配置PC浏览器的代理,你可以随意打开一个网页来预览请求信息(只要有网络请求)。PS:如果使用插件为浏览器设置独立代理,请关闭插件或设置为系统代理。Charles提供了两种预览模式,Structure和Sequence。Structure按域名对请求进行分组,方便预览同一域名下的请求数据,也方便日常开发中对某个服务接口的分析处理。示意图如下:Sequence按照时间顺序展示请求信息,可以最直观的预览请求信息。在此模式下,您可以使用Filter过滤请求进行针对性分析。示意图如下:在两种模式下,都可以通过切换标签(Overview、Request、Response等)来预览不同类型的请求信息。在最常用的Request和Response标签下,还可以通过切换子标签(Headers、Cookies、Text等)预览对应标签的详细内容。示意图如下:3.请求抓包使用工具栏上的白圈红点按钮(快捷键为“Command+R”)切换Charles抓包(StartRecording)和不抓包(StopRecording)).需要调试时使用该按钮开启抓包功能,可以有效减少干扰信息,快速抓取需要调试的请求。抓取手机(以iPhone为例)发送的请求,需要保证iPhone和PC工作在同一个局域网。第一步:获取PC的IP地址在Charles菜单栏->帮助->本地IP地址可以查看到PC的IP地址。如图所示:也可以在Mac终端使用命令ifconfigen1查看PC的IP地址。示意图如下:第二步:在iPhone设置->无线局域网->局域网信息(i)->配置代理->手动配置代理中配置iPhone代理,在服务器输入中填写PC的IP地址框,并在端口输入框中填写Charles的代理端口(一般为8888)。示意图如下:具体端口可以从Charles菜单栏->Proxy->ProxySettings查看。示意图如下:iPhone代理配置完成后,Charles会弹出一个连接提示框。单击允许后,您可以使用Charles捕获从iPhone发送的请求。示意图如下:第三步:抓取HTTPS请求配置iPhone代理后,可以通过Structure或Sequence窗口预览HTTP请求数据。但是由于HTTPS请求是加密的,所以预览请求时只能看到乱码数据。预览HTTPS请求的数据明文,需要在PC和iPhone上安装证书授权。(1)PC安装证书在Charles菜单栏->Help->SSLProxying->InstallCharlesRootCertificate中,可以安装PC端的证书,Mac端的keychain中可以查看到证书。示意图如下:在Mac的keychain中可以查看证书,双击证书,设置信任权限为始终信任。示意图如下:(2)iPhone安装证书在iPhone浏览器中访问http://charlesproxy.com/getssl下载证书并安装。这个地址一般不会改变。***官方证书下载地址可以在Charles菜单栏->帮助->SSL代理->在移动设备或远程浏览器上安装Charles根证书查看***官方证书下载地址。示意图如下:基于iOS证书信任机制,安装完成并信任证书后,需要在iPhone设置->关于本机->证书信任设置中启用根证书。示意图如下:这样就可以使用Charles抓取iPhone发送的HTTPS请求,并预览明文数据。抓包模拟器上的HTTPS请求需要点击InstallCharlesRootCertificateiniOSSimulators来安装证书。(3)开启抓包SSL权限。在Charles菜单栏中勾选EnableSSLProxying->Proxy->SSLProxyingSettings,然后在Locations中添加需要抓包的Host和Port。示意图如下:也可以在抓包界面右击某个/组请求,在弹出的选项列表中点击EnableSSLProxying,开启权限。示意图如下:4.请求断点在Charles的请求预览界面,右击某个/组请求,在弹出的选项列表中有一个Breakpoints选项。示意图如下:点击Breakpoints后,为请求设置断点。默认情况下,请求的Request/Response过程会被断点控制,即在Request数据发送到服务器之前会暂停,在Response数据发送到客户端之前也会暂停。可以从Charles菜单栏->Proxy->BreakpointSettings编辑断点参数。比如只需要在Response流程下断点,就可以取消Request的检查状态。示意图如下:在断点状态下,可以预览和修改请求的中间数据,然后点击Execute按钮继续执行请求。5.数据修改Rewrite和BreakpointEditing都可以起到修改请求数据的作用。1.RewriteRewrite功能可以在Charles菜单栏->Tools->Rewrite中开启,点击Add按钮添加设置,在右侧的Locations和Rules中添加需要重写的请求路径和Rewrite规则。示意图如下:Rewrite适用于请求的批量、长期修改,对请求数据影响较大(经常测试完忘记去掉规则)。因此,在一些轻量级的数据修改场景中,我经常会使用Breakpoint功能来修改数据。2.BreakpointEditing结合断点功能可以很好的实现临时修改请求的Request/Response数据的需求。为请求设置断点后,当请求发生时,会自动跳转到断点窗口。点击EditRequest/Response界面,可以看到中间信息,选择合适的数据格式(HTML、Json等)进行修改。修改完成后点击执行按钮即可在终端看到修改后的效果。示意图如下:6.请求重发在Charles的请求预览界面,右击某个/组请求,在弹出的选项列表中有Repeat和AdvancedRepeat两个选项。示意图如下:点击Repeat会重发一次请求,常用于测试服务接口是否能正常访问,客户端是否能正常接收返回数据等,点击AdvancedRepeat会弹出重传参数editing页面,如下图所示:在这个编辑界面,可以自定义Iterations(重传次数)、Concurrency(并发数)和Repeat(重传延迟时间),这些常用于对界面进行压力测试。7、网速模拟在Charles菜单栏->Proxy->ThrottleSettings中,可以开启Throttling(节流)功能,自定义Locations(受限服务接口)和ThrottleConfiguration(节流配置)。支持Throttlepreset(预设数据传输方式)、Bandwidth(带宽)Utilization(利用率)、Round-triplatency(往返延迟)、MTU(最大传输单元)Reliability(可靠性)Stability(稳定性)等参数来编辑。其中Throttle预设支持模拟3G/4G网络环境。示意图如下:使用Throttle功能,可以方便地插拔网络引起的bug,而此类bug在线上容易出现,排查重现难度大。【本文为栏目组织360科技、微信公众号“360科技(id:qihoo_tech)”原创文章】点此查看本作者更多好文