前言
在App开发的过程当中,抓包是一个很常见的需求,而有些app的请求不会在网络设置代理时被抓到数据包,这里若是须要抓包就须要搭建反向代理html
什么是反向代理
和正向代理相应的,正向代理代理客户端,反向代理代理服务端git
须要准备的工做
- 在本身电脑上面搭建一个可用的Charles
- 须要抓包的远端服务的端口号和Host地址
- 在本身电脑上面搭建一个本地DNS解析服务
具体步骤 (Mac下的操做,Windows也同理)
- 确保手机链接上Charles,本身电脑上面可以看到正常请求出来的数据包(这里有一篇如何使用Charles抓包的教程)
- 打开Charles,勾选proxy -> reverse proxise setting,进入反向代理设置界面。
3. 在反向代理设置界面中勾选Enable Reserve Proxise ,而后点击add,来添加一组反向代理设置
4. 设置反向代理的端口号,IP地址等信息。,并点击OK保存
- 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地址
8. 在本身地址上面启动一个DNS解析服务,把远端的IP地址映射到本机IP地址(
这里的具体步骤在下面)
9. 这时候请求的过程,就变成了app中发出http://remote.host:80 请求 -> 本身电脑进行DNS解析,解析成了http://本机IP:80 -> 而后charles的反向代理服务收到了这个请求 -> 去请求远端服务器的http://remote.host:80
10. 若是一切链接就绪,这时候Charles就会监测到反向代理访问,点击allow容许它吧
如何搭建一个本地的DNS服务
搭建一个本地DNS解析服务须要一个脚本就能够执行,我是用的是SimpleDNSServergithub
- 首先去SimpleDNSServer,这里clone下来代码
- 而后master文件夹下创建一个hosts文件,写入本机IP到remote.host的映射
3. 再在命令行中执行
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,就表明已经创建好了。