引言:阿里开源功能强大的代理服务器,可用于移动端测试抓包等操作。
时间:2017年11月01日
作者:JustDo23
01. 简介
-
代理服务器站在客户端和服务端的中间,它可以收集双方通信的每个比特。一个完整的代理请求过程为:客户端首先与代理服务器创建连接,接着根据代理服务所使用的代理协议,请求对目标服务器创建连接或者获取目标服务器的指定资源。一些代理协议允许代理服务器改变客户端的原始请求、目标服务器的原始响应。
-
AnyProxy 是完全可以灵活配置的代理服务器。它支持 https明文代理 ,且提供了 Web 界面便于观测请求情况,同时支持二次开发,可以用
JavaScript
来控制代理的全部流程,搭建前端个性化调试环境。
02. 安装
-
安装 Node.js
$ brew update $ brew install node $ node --version
-
安装 AnyProxy
# 安装稳定正式版 $ npm install -g anyproxy # 最新测试版,需要使用最新版本 node 进行安装 $ npm install -g anyproxy@beta # 有时需要添加 sudo
-
启动 AnyProxy
start_anyproxy$ anyproxy
-
启动浏览器
http://192.168.0.195:8002/
http://127.0.0.1:8002/
-
客户端设置代理
- 服务器 IP
- 端口 8001
-
网络请求并观测
在公司不知为何抓不到包。问了下同事,原来公司路由器做了拦截操作无法抓包,插网线没问题。
03. 配置 Https
-
原理:AnyProxy 解析 Https 的原理是自制根证书 rootCA 在终端信任这份证书之后,再用它签发各个域名的二级证书,此时二级证书可以重新对各个页面进行解析。
-
生成 rootCA
create_root# 稳定版本生成方法 $ sudo anyproxy --root # 最新版本生成方法 $ anyproxy-ca
-
打开 rootCA.crt
生成命令执行后会弹出证书所在目录,或者根据提示找到该目录后,双击打开。
add_root -
信任 rootCA.crt
trust_root -
以支持 Https 方式重新启动 AnyProxy
start_anyproxy_https$ anyproxy --intercept # 简写 $ anyproxy -i
-
移动端安装证书
- 浏览器打开地址 http://localhost:8002/fetchCrtFile 进行证书下载
- 扫描二维码地址 http://localhost:8002/qr_root 进行证书下载
-
网络请求并观测
capture
04. 其他
-
卸载
$ npm uninstall anyproxy
-
清除证书
$ anyproxy --clear
05. 规则文件
-
AnyProxy 提供了二次开发的能力,可以使用 js 编写自己的规则模块,来自定义网络请求的处理逻辑。
-
控制完整的请求头、请求体、响应头、响应体,可以在客户端与服务端都无感知的情况下介入处理所有的流程。
-
把网络通信过程分解为三个阶段:
- 在收到客户端请求后,允许开发者直接从本地提供返回
- 在转发请求到服务器前,允许开发者对发送的请求进行修改
- 在收到服务器响应后,允许开发者对响应内容进行修改,再返回给客户端
-
开发步骤
-
编写规则文件
rule.js
// 允许 Https 解析 module.exports = { shouldInterceptHttpsReq : function(req){ return true; } };
-
启动并加载规则
$ anyproxy --rule ./rule.js
-
测试规则
-
使用客户端请求并观测
-
使用 curl 测试
# 直接请求服务器 $ curl https://github.com # 通过代理服务器请求 $ curl https://github.com --proxy http://127.0.0.1:8001
-
-
-
加载线上规则
$ anyproxy --rule https://sample.com/rule.js
-
更多规则使用方式参考官方文档。
网友评论