如何彻底解决某些 APP 无法通过代理抓包的问题
你好,我是征哥,今天分享如何解决部分 APP 通过代理无法抓包的问题。为了防止外部平台的爬取,设置为付费,你可以阅读 71%。
主要内容:
背景 代理是什么? 为什么某些 APP 不走代理 解决方案 IPhone 实操 软件下载方法
背景
最近想做一个自动化任务,但是不太想使用 appium,太麻烦了,而且可移植性差,于是我决定模拟 HTTP 请求来实现自动化,于是在电脑开启了代理之后,然后手机 WiFi 上设置代理,发现很多 APP 都可以抓包,唯独我想自动化的那个 APP 无法抓包,更奇怪的是,刚打开的时候,一些请求可以抓到,后面的完全抓不到。
问题在脑子里停留了几天,今天终于有了解决方案。
代理是什么?
代理是一个中间人。
没有代理的时候,客户端只接请求服务器,有了代理,客户端就请求代理,代理再去请求服务器。服务器返回时先返回给代理,代理,返回给客户端。
有了代理我们就可以看到客户端的请求数据,和服务器的返回数据。常见的代理软件:Fiddler 、Charles、Burp Suite Professional,我最常用的就是 Burp Suite Professional,它是 CTF 最常用的抓包工具,内部集成不少实用工具,Java 开发,轻量级,Windows 和 Mac 通用,文末提供下载。
现在电脑上启动 Burp(Fiddler、Charles 也可以),设置好代理,就启动了一个 HTTP 代理服务器,IP 为 XXXXXX 端口为 XX,你可以对某些应用单独设置代理,也可以设置全局代理,设置全局代理之后,很多应用就自动使用代理了。
如果是 Mac 或 Linux,在命令行使用代理的话,还需要执行export http_proxy=http://127.0.0.1:1087;export https_proxy=http://127.0.0.1:1087;
如果您使用的是手机等移动设备,可以在当前 Wi-Fi 设置处告诉系统你要使用 HTTP 代理。
设置好代理之后,客户端发起 HTTP 请求的时候,就不会再去进行 DNS 解析去连接目标服务器,而是直接连接代理,然后代理服务器会与客户端建立连接,再然后代理服务器根据请求信息再去连接真正的服务器。
为什么某些 APP 不走代理
一般情况下,只要我们在系统层面上设置了代理,客户端在进行 HTTP 请求时就会走系统代理。
但是有例外,有些 app 默认就是不走系统代理,或者某些关键的请求不走代理,实际情况还真不少,这种情况下,设置了代理也没用。
解决方案
知道了为什么不走代理,就有了解决方案。
有两种方案,推荐方案二,能简单高效解决问题。
方案一
适合在 PC 电脑上进行。通过修改 host 文件,让客户端认为代理服务器就是目标服务器。比如客户端请求 somedomain.com,我们的代理服务器是 192.168.3.9:80,那就在 host 里面添加 "192.168.3.9 somedomain.com" 然后代理服务器收到请求后在转发到 somedomain.com。
方案二
适合移动设备或 PC,简单来说就是使用 VPN 将终端设备的流量转发到代理服务器。VPN 软件上添加一个 HTTP 服务器,就是代理服务器的 IP 和 端口,然后设置全局代理,这样所有的请求都会走 VPN,也就是走代理服务器了。这样就可以抓包。亲测有效。
IPhone 实操
1、电脑上打开 Burp Suite,设置好代理,如下图所示:
2、确保手机和电脑上的代理处于同一个网路,简单来说就是连同一个 Wi-Fi。
然后手机上浏览器打开 "http://192.168.31.72:8080",点击 CA Certificate 安装证书,如下图所示: