0%

使用 Charles 抓包

在 Windows 上使用较多的是 Findder 进行抓包,但是该软件没有 Mac 版本。这里使用 Charles 来进行抓包(该软件有很多平台的版本哦~),在抓包时的主要思路就是中间加一层,来拿到中间所有的内容。这篇博客主要讨论以下几个问题:

Charles

charles-header

是一个 HTTP 代理服务器,HTTP 监视器,反转代理服务器,当程序连接 Charles 的代理访问互联网时,Charles 可以监控这个程序发送和接收的所有数据。它允许一个开发者查看所有连接互联网的 HTTP 通信,这些包括 request, response 和 HTTP headers (包含 cookies 与 caching 信息)。

若资金允许,请点击 https://www.charlesproxy.com 购买正版,谢谢合作
这里放一个激活的方式

1
2
3
4
Registered Name:(区分大小写)
xuan
License Key:
4536921F8767A90984

在 Mac 上抓取发出的包

我们在访问网页的时候,在浏览器中按 F12 键可以开发者控制台看到 network 中传输的每个包的内容
但是这样经常是不够的,在爬虫的过程中,控制台里面有的信息可能会省略。我们可以使用 charles 抓 Mac 中发出的包

设置打开和端口

设置 Proxy -> macOS Proxy


设置 Proxy -> Proxy Settings -> HTTP Proxy 为 8888


安装证书

给 MacOS 安装 charles 的根证书
install-mac-certificate

信任安装的根证书,改成始终信任
trust-macos-certificate

抓包效果

此时已经开始抓取电脑上的 HTTP 包,并且系统的代理设置已经被更改了,打开 设置 -> 网络 -> WiFi -> 高级 -> 代理,可以看到系统的代理已经被设置到了 8888 端口(同样可以根据 Chrome 的设置打开,Chrome 中 设置 -> 搜索代理 -> 打开您计算机的代理设置


一般使用的是系统的代理,如果你的 Chrome 安装了代理插件,Chrome 则会根据你的配置是否使用代理。在 Chrome 上打开网页或者其他软件发送 http 请求就可以被截获了,如果现在你没看到有包刷新,请检查你是否开了其他代理软件,请关闭


在 Mac 上抓取收到的包

在进行服务端开发的时候,可能会遇到需要检查收到包的内容。下面的内容使用到了 frp 内网穿透转发请求,可以看一下之前写过的一篇博客 使用 Frp 内网穿透进行开发

一个场景的例子

在这里举一个我在使用场景之中遇到的情况,如果前端遇到了问题,比如说发了某个包,但是你这边确实没有收到,或者收到的内容跟前端描述的内容不一样,那么可以通过抓包来判断到底问题出在哪儿(在个人开发的时候,我使用 frp 进行内网穿透,将自己的接口通过 frp 暴露在公网)

site-network-model

在本地模拟了一下上面的情况发生的事情,下一部分讲述如何实现
site-example

本地反向代理端口

实现的方式就是在设置里面的 Proxy -> Reverse Proxies Settings

Proxy HTTP and HTTPs requests from local ports to remote web servers. 将 http 或者 https 请求从本地端口发送到远程的 web 服务器

设置的时候这样设置,Remote Port 设置为你本地运行的服务的端口(比如 gin 的 http port 监听 8000 端口),然后将 Local Port 设置为你想监听的端口(也就是接受信息端口,之后被 frp 穿透)

reverse-proxies
现在可以看到自己的某个端口收到的请求了

抓取 Android 上的包

在安卓的 WiFi 处设置手动代理,让其通过 Charles 走一层代理(通过电脑的作为中间层抓包),可以抓到所有安卓发出和收到的内容,但是安卓手机需要 Root,安装电脑生成的中间根证书,这样才能解析 HTTPS 的包数据

android-proxy-network

设置和安装证书

然后需要在手机上设置对应的代理,查看电脑的 局域网 ip 地址,这里我的局域网 IP 地址为 192.168.123.4
mac-check-ip

然后在手机上设置手动代理,对应 ip 地址和端口


在电脑上选择安装 mobile 设备的证书

install-mobile-certificate

然后在手机浏览器上打开 chls.pro/ssl 这个链接,会弹出下载证书,然后安装即可(安卓手机需要 Root 才能信任根证书,iPhone 则需要在 设置->通用->描述文件->charles proxy custom root certificate 中信任该证书

可能遇到的问题

postman 设置代理之后,可能出现证书信任问题


然后发包会遇到问题
postman-certificate-question

这里需要设置一下 postman 的信任证书,偏好设置 -> General -> SSL certificate verification 设置为 off 即可

postman-certificate

参考资料

如果对您有帮助,请我喝杯咖啡?