前言
在App开发的过程中,抓包是一个很常见的需求,而有些app的请求不会在网络设置代理时被抓到数据包,这里如果需要抓包就需要搭建反向代理
什么是反向代理
和正向代理相应的,正向代理代理客户端,反向代理代理服务端
需要准备的工作
- 在自己电脑上面搭建一个可用的Charles
- 需要抓包的远端服务的端口号和Host地址
- 在自己电脑上面搭建一个本地DNS解析服务
具体步骤 (Mac下的操作,Windows也同理)
- 确保手机连接上Charles,自己电脑上面能够看到正常请求出来的数据包()
- 打开Charles,勾选proxy -> reverse proxise setting,进入反向代理设置界面。
- Local Port是指本机的一个空闲端口,这里和远端服务保持一致,本例中使用80;
- Remote Host是指远端服务的Host,本例中使用remote.host;
- Remote Port是指远端服务的端口号,在本例中访问远端端口号为80;
- 如图显示端口号已被占用,这时候就需要去检查并且关闭被占用的端口了()
- 如图显示bind失败,这可能是因为Charles没有管理员权限导致的
- 这时候需要打开一个有权限的Charles,可以在命令行中执行
sudo /Applications/Charles.app/Contents/MacOS/Charles
- 这个时候,手机app发出的请求,需要请求的是远端的服务器,而这时候Charles已经成为了服务器的代理,那么我们需要把app的请求指向Charles
- 首先给自己的手机设置静态的DNS,DNS为本机的IP地址
如何搭建一个本地的DNS服务
搭建一个本地DNS解析服务需要一个脚本就可以执行,我是用的是SimpleDNSServer
- 首先去,这里clone下来代码
- 然后master文件夹下建立一个hosts文件,写入本机IP到remote.host的映射
sudo /Users/xxxx/Downloads/SimpleDNSServer-master/SimpleDNSServer.py /Users/xxxx/Downloads/SimpleDNSServer-master/hosts
命令行中会输出 SimpleDNSServer :: hosts file -> /Users/xxxx/Downloads/SimpleDNSServer-master/hosts
4. 这时候操作一下App,如果能看到命令行中解析的DNS的log,就代表已经建立好了。