Charles HTTP/HTTPS 分析工具 供手机端抓包工具
Charles HTTP/HTTPS 分析工具 PC/手机端
2019/05/30 Chenxin
2019/08/09 Chenxin update
介绍
-
官网: https://www.charlesproxy.com
一般,如果只是电脑上抓包,直接用浏览器自带的F12就可以了.
charles主要用于手机的抓包分析.在应用层上进行抓包.
是一个HTTP代理服务器,HTTP监视器,反转代理服务器,当程序连接Charles的代理访问互联网时,Charles可以监控这个程序发送和接收的所有数据。
Charles是一款抓包修改工具,数据请求控制容易,修改简单,抓取数据的开始/暂停方便等.
官网安装后,每次使用30分钟会自动关闭,需要注册,费用50美元. -
Charles主要功能
支持SSL代理。可以截取分析SSL的请求。
支持流量控制。可以模拟慢速网络以及等待时间(latency)较长的请求。
支持AJAX调试。可以自动将json或xml数据格式化,方便查看。
支持AMF调试。可以将Flash Remoting 或 Flex Remoting信息格式化,方便查看。
支持重发网络请求,方便后端调试。
支持修改网络请求参数。
支持网络请求的截获并动态修改。
检查HTML,CSS和RSS内容是否符合W3C标准。
安装与补丁
需要java的运行环境支持.需要对应的破解包或购买正版软件.
抓取说明
手机:将charles设置成代理模式,手机客户端通过这个代理,请求HTTP/HTTPS,charles记录这些流量.获取手机流量.
电脑:可以抓取电脑自身的HTTP,HTTPS请求和响应.
charles抓取手机端数据流
-
场景:
抓取手机访问https的数据包,并篡改/暂停手机访问某个网站,或一些数据 -
原理:
iphone通过mac的charles的代理来上网.charles获取到的数据,通过证书解https包. -
步骤
给Charles打开代理
1.Charles点击Proxy -> Proxy Setting,Port填8888,勾上Enable transparent HTTP proxying
2.找到当前使用的Mac的IP地址(在terminal中输入ifconfig)
给iPhone设置代理
1.点击wifi->找到“HTTP 代理”.选择“手动”,服务器填上mac的IP地址,端口填8888.
2.手机浏览器打开任意网站,mac上Charles会弹出请求连接的确认菜单。选择“Allow”.
3.手机安装证书.在手机的浏览器中,输入chls.pro/ssl,会弹出安装证书的请求,点安装.
4.手机信任证书.打开设置->通用->关于本机->证书信任设置,找到charles,打开信任开关.
此时,已经能截取到HTTP/HTTPS的网络请求了.
- 其他
如果换了一部电脑作为代理,要重新安装证书,并且信任。
wireshark抓取手机端数据流
- 场景 需要抓取DNS请求信息
wireshark无法与charles一起使用,流量均会被charles劫持掉.wireshark无显示.
因charles没有抓取到DNS的解析协议,这里还是需要用wireshark来做.(之后测试,charles又可以抓取到DNS了,即使网站访问不了也可以).
首先MAC开启热点,手机连接MAC热点,上网测试(注意,无需配置代理).
打开对应网站,完成wreshark抓包(协议为dns,直接在filter里输入"dns"即可).
抓取电脑端数据流
-
安装证书1
charles的Help->SSL Proxying->Install Charles Root Certificate
进入MAC程序坞->其他->钥匙串信任此证书(找到系统里对应的charles的证书,选择信任). -
安装证书2
如果经过"安装证书1"仍无法解析https数据的话,再执行此.
charles的Help->SSL Proxying->Install Charles Root Certificate on a Mobile or Remote Browser 会提示以下信息"浏览器访问 chls.pro/ssl 下载并安装证书"访问此url.会下载 charles-proxy-ssl-proxying-certificate.pem 文件,安装并信任. -
开启charles的ssl支持
Proxy -> SSL Proxying Settings
Host输入"*"(只一个星号,表示所有主机).
Port输入443.
然后电脑端浏览器访问页面,就可以正常解析https了.
charles使用
-
基本图标
1、structure是按照host归类、sequence是按照请求的时间排序
2、扫帚图案是清除抓到的包,红点是停止抓包
3、overview和contents里面去看接口的详细信息,contents上面是请求信息,下面是响应信息 -
过滤说明
在 Charles 的菜单栏选择 Proxy->Recording Settings,然后选择 Include 栏,选择Add,然后填入需要监控的协议,主机地址,端口号,这样就达到了过滤的目的。
还有一种方法就是在一个网址上右击,选择Focus,然后其他的请求就会被放到Other Hosts的文件夹里面,这样也达到了过滤的目的。 -
模拟慢速网络
有时候在测试的时候我们想要模拟一下网络慢的情况,这时候Charles他是可以帮助到你的,在Proxy->Throttle Setting,然后选择Enable Throttling,在Throttle Preset下选择网络类型即可.
比如56Kmodel,3G,等.
如果我们只想模拟指定网站的慢速网络,可以再勾选上图中的 “Only for selected hosts” 项,然后在对话框的下半部分设置中增加指定的 hosts 项即可。支持星号和问号匹配.
比如支持"protocol填空,host为*.baidu.com,port留空". -
修改网络请求
有些时候为了调试服务器的接口,我们需要反复尝试不同参数的网络请求。Charles 可以方便地提供网络请求的修改和重发功能。
只需要选中以往的网络请求,工具栏中点击 “Edit”,即可创建一个可编辑的网络请求。(即点击工具栏上的"钢笔"按钮). -
给服务器做压力测试(客户端并发请求)
我们可以使用 Charles 的 Repeat 功能来简单地测试服务器的并发处理能力,方法如下:
我们在想打压的网络请求上(POST 或 GET 请求均可)右击,然后选择 「Repeat Advanced」菜单项.
在弹出的对话框中,选择打压的并发线程数以及打压次数,确定之后,即可开始打压。 -
breakpoints 断点篡改数据
在charles界面里,右键点左侧栏网址,选择breakpoints,当手机访问这个网址的时候,mac会自动跳出询问框,可以篡改用户请求数据或服务器响应数据.之后点击excute,就会执行(执行前,iphone一直处于等待接收数据状态中).
在Charles发起一个请求的时候,我们是可以给某个请求打一个断点的,然后来观察或者修改请求或者返回的内容,但是在这过程中要注意请求的超时时间。
要针对某一个请求设置断点,只需要在这个请求网址右击选择Breakpoints,然后点击断点按钮,就可以断点某一个请求了。 -
blacklist 网址黑名单(暂停手机访问/请求某个网站)
在charles界面里,右键点左侧栏网址,选择blacklist,就不再会访问该地址了(达到拦截iphone访问某网站的目的).也可以输入通配符来阻止子域。
黑名单在测试从另一台服务器加载资源(如图像)的站点时很有用。阻止这些请求。如果你正在开发一个带有横幅广告的网站,并且不想在工作时给自己洗脑的话,这尤其有用。 -
Map (Remote/Local)说明
请求重定向.开发中一般都是测试环境,如果我们想对比一下和线上版本的区别的话,可以讲测试的请求重定向到正式环境下。
在左侧栏目的元素上,右键选择Map Remote(或 Tools->Map Remote).编辑对应的目的地的 Protocol+Host+Port+Path+Query. -
rewrite内容替换
有时候我们会测一下请求的参数不同会带来不同的返回结果以测试是否达到业务需求,或者需要不同的返回结果来验证我们对数据的处理是否正确,这时候需要后台的同事配合,但是有了Charles,我们可以自己把控接口返回来的内容,比如数据的空与否,数据的长短等等。在Tools->Rewrite Settings. -
Block Cookies工具
Block Cookies阻止了cookie的发送和接收。它可用于测试网站,就像您在浏览器中禁用了cookie一样。请注意,网络蜘蛛(例如Google)通常不支持Cookie,因此该工具还可用于模拟蜘蛛网站的视图。
选定的地点:可以为每个请求启用该工具,也可以仅为选定位置启用该工具。当用于选定位置时,您可以使用简单但功能强大的模式匹配将工具的效果限制为指定的主机和/或路径。
这个怎么运作:从请求中移除Cookie标头,防止cookie值从客户端应用程序(例如,Web浏览器)发送到远程服务器。从响应中删除Set-Cookie标头,防止请求设置客户端应用程序从远程服务器接收的cookie。 -
No Caching工具
运作原理
No Caching工具通过操纵控制响应缓存的HTTP标头来防止缓存。
从请求中删除If-Modified-Since和If-None-Match标头,添加Pragma:no-cache和Cache-control:no-cache。
从响应中删除Expires,Last-Modified和ETag标头,并添加Expires:0和Cache-Control:no-cache。 -
DNS Spoofing欺骗工具
Tool->DNS Spoofing,DNS欺骗工具.定义目标域名和假IP(或者测试IP),测试访问. -
Client Process客户流程工具
客户端进程工具显示负责发出每个请求的本地客户端进程的名称。客户端进程通常是您的Web浏览器,例如firefox.exe,但客户端进程工具可以帮助您发现许多可能未知的HTTP客户端。
客户端进程名称显示在每个请求的“注释”区域中。 -
设置外部代理,解决与FQ软件的冲突
Charles 的原理是把自己设置成系统的代理服务器,但是在中国,由于工作需要,我们常常需要使用 Google 搜索,所以大部分程序员都有自己的FQ软件,而这些软件的基本原理,也是把自己设置成系统的代理服务器,来做到透明的FQ。为了使得两者能够和平共处,我们可以在 Charles 的 External Proxy Settings 中,设置FQ的代理端口以及相关信息。同时,我们也要关闭相关FQ软件的自动设置,使其不主动修改系统代理,避免 Charles 失效。
问题说明
-
为什么我用charles不能抓到socket和https的数据呢?
首先,charles是不支持抓去socket数据。
如果抓不到https的数据的话,请查看你是不是没有勾选ssl功能。 Proxy - Proxy Settings - SSL 设置 -
appstore无法打开;很多apple.com等苹果的站点无法解析https数据包
Charles: Proxy -> SSL Proxy Settings.Enable SSL Proxying -> Add.在 Host 和 Port 中填入想要抓包的域名和端口.
为什么不把 Host 直接配置为 星号 ?
对所有 HTTPS 请求进行配置,确实可以正常抓包挖财的请求。但是,并非所有的 HTTPS 请求都可以用上述方法进行抓包。例如 Apple 的大部分请求都会启用 SSL Pinning 以防止用户信任错误的证书。
将 Host 配置为 * 会导致 App Store 无法访问、企业证书无法信任等问题.
如果host配置为星号,越狱手机要禁止SSL Pinning证书,AppStore使用的是SSL Pinnign(证书锁定),所以没有办法通过抓包工具直接抓到包.因此想抓到包,必须通过安装插件来禁止SSL Pinning.这是目前最有效的解决方法了. 可以参考 https://www.jianshu.com/p/885407c7e893 -
已经关闭charles,但手机依然能够接收钉钉消息
因为苹果手机的wifi代理只是针对web类的请求,而socket等其他信息请求走的不是这个代理.所以微信/钉钉/QQ正常.
额外知识 iphone通过蓝牙连接mac,然后mac通过自身的wifi上网
可以用mac的wifi上网,然后打开设置->共享->选择源为wifi,接入为蓝牙.
手机再通过蓝牙连接MAC.就可以上网了.
不过通过wireshark抓包,都是内网IP.所以不能实现排障功能,只能作为个别地方1个wifi用户名只能连接一个设备的问题(而用户想mac和iphone同时上网).