级别:★★☆☆☆
标签:「iOS手机抓包」「iOS HTTPS抓包」「Charles证书」
做者: Xs·H
审校: QiShare团队php
前言:在iOS应用开发过程当中,经过抓包调试服务接口的场景时常出现。Charles和Wireshark是我在iOS开发过程当中最经常使用的两款软件。git
在平常开发中,咱们没法看到应用程序与服务器之间发送和接收的内容,没有这种可见性,咱们在肯定故障的确切位置时会很是困难且耗时。而Charles是一个运行在PC上的Web代理,咱们将应用程序配置为经过Charles访问网络,即可以在Charles上记录并显示发送和接收的全部数据,进而能够大大提升调试程序的效率。Charles官网github
从下图能够看出Charles的角色:后端
Charles有如下几个经常使用功能:浏览器
因为Charles的功能不少,很难在文章中详尽介绍,因此做者以在项目中对Charles的使用为切入点,对最经常使用、最有用的几个功能进行介绍。安全
Charles是收费软件,有30天的免费试用期限,以后每使用30分钟会被强退一次,重启后可继续使用。从Charles官网能够获取Charles安装包,也能够从互联网中查找破解版。服务器
下载破解版时要注意甄别安装包来源,谨防木马和病毒。微信
Charles启动后,就运行在抓包模式。因为Charles会自动配置PC浏览器的代理,因此,随意打开一个网页(只要有网络请求便可)便可预览到请求信息。网络
若是使用插件为浏览器设置了独立代理,请关闭插件或者设置成系统代理。多线程
Charles提供了Structure和Sequence两种预览模式。 Structure以域名对请求进行分组,能够很方便地预览同一域名下的请求数据,也方便于平常开发中对某一服务接口的分析和处理。图示以下:
Sequence以时间顺序显示请求信息,能够最直接的预览请求信息。在此模式下,可使用Filter过滤请求,针对性分析。图示以下:
在两种模式下,均可以经过切换标签(Overview、Request、Response等)预览不一样类型的请求信息。在最经常使用的Request和Response标签下,还能够经过切换子标签(Headers、Cookies、Text等)预览对应标签详细内容。图示以下:
使用工具栏的白圆红点按钮(快捷键是“Command+R”)可使Charles在抓包(Start Recording)和不抓包(Stop Recording)之间切换。使用此按钮,在须要调试时再打开抓包功能能够有效减小干扰信息,而快速抓取到须要调试的请求。
对从手机(以iPhone示例)发出的请求进行抓包,须要保证iPhone和PC工做在同一局域网内。
在Charles菜单栏 -> Help -> Local IP Address
中能够查看PC的IP地址。图示以下:
也能够在Mac终端使用命令ifconfig en1
查看PC的IP地址。图示以下:
在iPhone的设置 -> 无线局域网 -> 局域网信息(i) -> 配置代理 -> 手动
中配置代理,服务器输入框中填写PC的IP地址,端口输入框中填写Charles的代理端口(通常是8888)。图示以下:
具体的端口能够从Charles菜单栏 -> Proxy -> Proxy Settings
中查看。图示以下:
iPhone代理配置完成后,Charles会弹出链接提示框,点击Allow
以后便可使用Charles对从该iPhone发出的请求进行抓包了。图示以下:
在配置iPhone代理完毕后,就能够经过Structure或者Sequence窗口预览HTTP请求的数据了。但因为HTTPS请求被加密过,预览请求时只能预览到乱码数据。要预览到HTTPS请求的数据明文,须要PC和iPhone安装证书受权。
在Charles菜单栏 -> Help -> SSL Proxying -> Install Charles Root Certificate
中能够为PC安装证书,证书能够在Mac的钥匙串中查看。图示以下:
证书能够在Mac的钥匙串中查看,双击证书,将信任权限设定为始终信任
。图示以下:
在iPhone浏览器中访问http://charlesproxy.com/getssl
能够下载证书并安装。此地址通常不会变化,能够在Charles菜单栏 -> Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device or Remote Browser
中查看最新的官方证书下载地址。图示以下:
基于iOS的证书信任机制,在安装完成并信任证书后,须要到iPhone设置 -> 关于本机 -> 证书信任设置
中启用根证书。图示以下:
这样,就可使用Charles中抓包iPhone发出的HTTPS请求并预览明文数据了。
抓包模拟器上的HTTPS请求须要点击
Install Charles Root Certificate in iOS Simulators
安装证书。
在Charles菜单栏 -> Proxy -> SSL Proxying Settings
中勾选Enable SSL Proxying
,而后在Locations
中添加须要抓包的Host和Port便可。图示以下:
也能够在抓包界面,右键点击某条/组请求,在弹出的选项列表中点击Enable SSL Proxying
启用权限。图示以下:
在Charles的请求预览界面中,右键点击某条/组请求,在弹出的选项列表中有Breakpoints
选项。图示以下:
点击Breakpoints
后即为该请求设定了断点。默认状况下,在该请求的Request / Response过程都会受断点控制,即在Request数据发送到的服务端以前会被暂停,在Response数据发送到客户端以前也会被暂停。能够从Charles菜单栏 -> Proxy -> Breakpoint Settings
中编辑断点的参数。好比,只须要对Response过程加断点,能够将Request的勾选状态取消。图示以下:
在断点状态下,能够预览和修改请求的中间数据,以后点解Execute
按钮便可继续执行请求。
Rewrite
和Breakpoint Editing
均可以起到修改请求数据的做用。
在Charles菜单栏 -> Tools -> Rewrite
中能够开启Rewrite功能,点击Add
按钮能够添加一条设置,并能够在右侧的Locations
和Rules
中分别添加要Rewrite的请求路径和Rewrite规则。图示以下:
Rewrite适合应用于对请求的批量和长期修改,对请求数据影响较大(测试结束后常常忘记去掉规则)。因此,在一些轻量级的数据修改场景中,我常常结合Breakpoint
功能修改数据。
结合断点功能,能够很好的实现临时修改请求的Request / Response数据的需求。为某条请求设置断点后,当该请求发生时,会自动跳到断点窗口。点开Edit Request / Response界面,能够看到中间信息,选择合适的数据格式(HTML、Json等)进行修改。修改完成后,点击Execute
按钮便可在终端上看到修改后的的效果。图示以下:
在Charles的请求预览界面中,右键点击某条/组请求,在弹出的选项列表中有Repeat
和Advanced Repeat
两个选项。图示以下:
单击Repeat
会重发该请求一次,经常使用于测试服务接口可否正常访问,客户端可否正常收到返回数据等。单击Advanced Repeat
会弹出重发参数编辑页面,图示以下:
在此编辑界面上,能够自定义Iterations
(重发次数)、 Concurrency
(并发数)和 Repeat
(重发延时),经常使用于对服务接口进行压力测试。
在Charles菜单栏 -> Proxy -> Throttle Settings
中能够启用Throttling
(节流)功能,并自定义Locations
(受限服务接口)和Throttle Configuration
(节流配置)。支持对Throttle preset
(预置的数据传输方式)、Bandwidth
(带宽) Utilisation
(利用比率)、 Round-trip latency
(往返延迟)、MTU
(最大传输单元) Reliability
(可靠性) Stability
(稳定性)等参数进行编辑。其中,在Throttle preset
支持模拟3G/4G网络环境。图示以下:
使用Throttle功能,能够方便地排插由于若网而致使的bug,而这类bug在线上很容易出现,并且很难排查复现。
小编微信:可加并拉入《QiShare技术交流群》。
关注咱们的途径有:
QiShare(简书)
QiShare(掘金)
QiShare(知乎)
QiShare(GitHub)
QiShare(CocoaChina)
QiShare(StackOverflow)
QiShare(微信公众号)
推荐文章:
初探TCP
初探IP、UDP
iOS 多线程之线程安全
iOS 多线程之GCD
iOS 多线程之NSOperation
iOS 多线程之NSThread
iOS Winding Rules 缠绕规则
奇舞周刊