阅读 196

Charles抓包进阶

我们前端在做Web开发的时候,特别是手机端H5开发时,经常会用到Charles做抓包来进行一些debug,这对于常规的浏览器或者webview来说基本没啥问题,只要设置好Wifi的HTTP代理及相关证书,基本上前端页面的请求就可以抓到了,然而但是来了,对于想抓取某些App里面的某些请求你会发现死都抓不多,还以为是自己哪里配的有问题????,这里举个????,我们可以尝试以常规的方式(HTTP代理)去抓取视频App里的视频相关的数据,你会发现Charles里基本只显示了一些文本API相关的请求,根本没有发现想要的数据????,这样有时候就很不利与本地调试。

出现这种情况的基本原因是浏览器一般会默认遵循系统设置的HTTP/Socks代理, 但是其他App包括手机端和电脑端都是可以根据开发者喜好或者开发者用的网络库来决定,他们可能默认就不想让请求走系统的HTTP代理,所以我们经常会发现很多软件会有让你选择代理的功能,如下图就是Intellij系列设置IDE要不要走各种代理的配置:

ws-proxy.png

对于很多命令行工具很多也默认不走HTTP代理,比如curl, 当然你可以通过curl --proxy http://127.0.0.1:8888 url 去手动让url的请求走代理;还有比如我们用Node.js写的一个脚本,然后脚本里发了一些请求,运行的时候这些请求也是不会走代理的,而是直连,除非你在node里手动设置了Agent去做代理,或者全局开启了代理之后才会走你设置的代理,那在移动端App里也类似,要么用第三方库,然后这些默认不走代理,所以你Charles里就显示不出来,还有一些可以检测到系统有没有设置了HTTP代理,然后它可以自己选择要不要走代理还是直连。

那对于这些不走代理,我们又想抓取这些app发出的请求怎么办呢,可能大家第一时间想到的是类似于Wireshark这种软件,他直接可以抓取Wifi层面或者说网卡层面的所有数据,但这玩意感觉实在是难用(学业不佳????),太偏向底层太Hardcore了,都是在TCP层面,很难找到我们想要的HTTP层的数据,我们的目的还是想要通过Charles来抓到这些默认拿不到的数据。

这里我们解决的基本思路是让App检测不到我们加了代理,我们以iOS为例,要实现这种方式基本唯一的路子就是通过开启本地VPN来解决, 然后让流量全部经过VPN,VPN正常APP是检测不到的,它以为就是直连(不做app开发,不确定是不是与开启vpn的方式有关, 应用商店有一些直接手机端的抓包工具app,但是很多其实还是抓不到我们上面所说的数据的请求)。那怎么做呢,本人也不做原生app开发,自己肯定搞不了,所以唯一的出路就是找现成的app, 实现这样的VPN功能。

搜了一圈,发现在应用商店里还真有这种便于debug的app,以下就是找到的2个可以实现我们想要功能的app, Potatso Lite, Brook, 上面2个都可以实现我们想要的功能,用下来似乎Potatso Lite用起来方便点,所以我们下面用Potatso Lite实现我们想要的抓包能力,我们的流程就是:

app里网络请求 --> 流量经过app开启的本地VPN --> 流量再转发经过Potatso Lite里配置的外部HTTP/SOCKS代理(charles) --> Charles里抓到包

我们可以在app里配置外部代理的地址,也就是我们自己Mac的charles的http/socks代理的地址,这里可以随便配置多个代理来做切换,协议也可以是http, socks, 甚至 shadowsocks都可以自己选择。配完后点击右下角开启按钮,开启VPN即可。

总结

以上就是我们通过附加一层实现了我们平时通过常规Wifi的HTTP代理抓不到的包,希望本文对前端同学、移动端同学平时的开发及debug过程有所帮助????????????。


作者:jasonboy7
链接:https://juejin.cn/post/7019216672238075935


文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐