美文网首页
Charles抓包

Charles抓包

作者: 跳跳龙_666 | 来源:发表于2020-09-08 14:33 被阅读0次

使用Charles抓包

概念

什么是抓包

抓包(packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全。抓包也经常被用来进行数据截取等。

为什么要抓包

当业务发生异常, 或是界面数据展示不正确时. 客户端说他没问题,服务端也说他没问题,到底谁有问题?这时候没必要相互推脱,拿数据出来说话才是王道.定位问题时, 往往是从客户端开始debug, 找了一圈最后可能发现是服务端返回出错, 这样效率太低. 抓包可以直接看到服务端返回的数据, 从而快速定位问题.

使用抓包工具, 截取request, response数据, 进行修改, 可以方便测试不同的场景以及一些难以触发的场景及分支.

使用抓包工具, 可以模拟慢速网络以及等待时间(latency)较长的请求.

抓取其他应用的包, 可以看到其他应用的数据接口设计, 接口设计, 学习一些东西.

更多用处待补充...

工具选择

抓包工具有很多, 常见的有Charles, Fiddler, wireshark等...

这里推荐使用Charles, 支持Mac&windows, 功能好用, logo好看..

使用

用起来, 开搞

下载charles

可以去charles官网下载,下载地址:http://www.charlesproxy.com/download/ 根据自己的操作系统下载对应的版本,然后进行安装,然后打开charles工具 (破解版也可以用, 但是我们也要尽量支持官方哈...)

设置代理

确保手机和电脑在同一局域网下

查看当前电脑的ip 

查看默认端口 Proxy->Proxy Settings 在这个页面会看到HTTP Proxy的默认端口是8888 我们不需要修改,只需要知道有这个值就行

知道了默认端口跟ip地址,我们就可以手机上设置代理了

charles同意连接授权

然后就可以愉快的抓包啦

抓不到Https?

乱码?

我们按照上面的方式设置好代理之后, 可以成功的抓到http请求的包.

但是https的包, 看到数据却全部都是乱码

王德发? 这谁看得懂?

为什么?

Https数据传输过程中是加密的, 所以会出乱码.

要怎么做呢?

设置SSL代理  Proxy->SSL Proxy Settings.   

把我们需要解析的域名填进去

我们可以使用*通配符来匹配所有的域名.

配置完成后, 看下效果

刚才的乱码不见了, 但是我们的请求直接被拒绝了, 变成了红色的叉叉. (Https除了数据的加密, 还有双发身份真实性的合适, 以及数据完整性的保护)

Failure里面显示, SSL握手过程中证书被拒绝.

Notes里面提示我们需要去配置charles的根证书.

我们按照它的步骤, 使用浏览器打开 chls.pro/ssl 这个链接 (代理我们在第一步就已经连上了)

安装完描述文件之后, 需要开启证书信任, 设置-> 通用 -> 关于本地 -> 证书信任设置

大功告成

按照上述步骤设置好证书以及信任设置后, 我们的工作就完成了, 接下来看看成果吧

原理 <开发同学重点关注>

客户端向服务器发起HTTPS请求

Charles拦截客户端的请求,伪装成客户端向服务器进行请求

服务器向“客户端”(实际上是Charles)返回服务器的CA证书

Charles拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端。(这一步,Charles拿到了服务器证书的公钥)

客户端接收到“服务器”(实际上是Charles)的证书后,生成一个对称密钥,用Charles的公钥加密,发送给“服务器”(Charles)

Charles拦截客户端的响应,用自己的私钥解密对称密钥,然后用服务器证书公钥加密,发送给服务器。(这一步,Charles拿到了对称密钥)

服务器用自己的私钥解密对称密钥,向“客户端”(Charles)发送响应

Charles拦截服务器的响应,替换成自己的证书后发送给客户端

至此,连接建立,Charles拿到了 服务器证书的公钥 和 客户端与服务器协商的对称密钥,之后就可以解密或者修改加密的报文了。

HTTPS抓包的原理还是挺简单的,简单来说,就是Charles作为“中间人代理”,拿到了 服务器证书公钥 和 HTTPS连接的对称密钥,前提是客户端选择信任并安装Charles的CA证书,否则客户端就会“报警”并中止连接。这样看来,HTTPS还是很安全的。

进阶

除了普通的抓取接口数据外, 我们还可以对数据进行修改, 重发, 批量发送, 模拟弱网等操作

重发

断点

选中要断点的请求, 右键选择breakpoints, 就可以打上断点, 同理也可是使用*等通配符进行过滤匹配需要断点的域名

修改之前App界面:

断点之后我们可以修改返回的response:

我们修改了它的一些字段如desc, nickname, location, level_name等

再看看App的展示效果:

附录

charles抓https原理:https://www.jianshu.com/p/405f9d76f8c4

https相关知识:https://www.jianshu.com/p/fb6035dbaf8b

相关文章

网友评论

      本文标题:Charles抓包

      本文链接:https://www.haomeiwen.com/subject/xwkhhxtx.html