代理服务器 AnyProxy

Proxy

引言:阿里开源功能强大的代理服务器,可用于移动端测试抓包等操作。

时间:2017年11月01日

作者:JustDo23

官网:https://github.com/alibaba/anyproxy

01. 简介

  1. AnyProxy 是阿里巴巴基于 Node.js 开发的一款开源代理服务器

  2. 代理服务器站在客户端服务端中间,它可以收集双方通信的每个比特。一个完整的代理请求过程为:客户端首先与代理服务器创建连接,接着根据代理服务所使用的代理协议,请求对目标服务器创建连接或者获取目标服务器的指定资源。一些代理协议允许代理服务器改变客户端的原始请求、目标服务器的原始响应

  3. AnyProxy 是完全可以灵活配置的代理服务器。它支持 https明文代理 ,且提供了 Web 界面便于观测请求情况,同时支持二次开发,可以用 JavaScript控制代理的全部流程,搭建前端个性化调试环境。

02. 安装

  1. 安装 Node.js

    $ brew update
    $ brew install node
    $ node --version
    
  2. 安装 AnyProxy

    # 安装稳定正式版
    $ npm install -g anyproxy
    # 最新测试版,需要使用最新版本 node 进行安装
    $ npm install -g anyproxy@beta
    # 有时需要添加 sudo
    
  3. 启动 AnyProxy

    $ anyproxy
    
    start_anyproxy
  4. 启动浏览器

    • http://192.168.0.195:8002/
    • http://127.0.0.1:8002/
  5. 客户端设置代理

    • 服务器 IP
    • 端口 8001
    set_proxy
  6. 网络请求并观测

    在公司不知为何抓不到包。问了下同事,原来公司路由器做了拦截操作无法抓包,插网线没问题。

03. 配置 Https

  1. 原理AnyProxy 解析 Https原理自制根证书 rootCA 在终端信任这份证书之后,再用它签发各个域名的二级证书,此时二级证书可以重新对各个页面进行解析。

  2. ​生成 rootCA

    # 稳定版本生成方法
    $ sudo anyproxy --root
    # 最新版本生成方法
    $ anyproxy-ca
    
    create_root
  3. 打开 rootCA.crt

    生成命令执行后会弹出证书所在目录,或者根据提示找到该目录后,双击打开。

    add_root
  4. 信任 rootCA.crt

    trust_root
  5. 以支持 Https 方式重新启动 AnyProxy

    $ anyproxy --intercept
    # 简写
    $ anyproxy -i
    
    start_anyproxy_https
  6. 移动端安装证书

    • 浏览器打开地址 http://localhost:8002/fetchCrtFile 进行证书下载
    • 扫描二维码地址 http://localhost:8002/qr_root 进行证书下载
    download_crt
  7. 网络请求并观测

    capture

04. 其他

  1. 卸载

    $ npm uninstall anyproxy
    
  2. 清除证书

    $ anyproxy --clear
    

05. 规则文件

  1. AnyProxy 提供了二次开发的能力,可以使用 js 编写自己的规则模块,来自定义网络请求的处理逻辑

  2. 控制完整的请求头、请求体、响应头、响应体,可以在客户端与服务端都无感知的情况下介入处理所有的流程。

  3. 把网络通信过程分解为三个阶段

    • 在收到客户端请求后,允许开发者直接从本地提供返回
    • 在转发请求到服务器前,允许开发者对发送的请求进行修改
    • 在收到服务器响应后,允许开发者对响应内容进行修改,再返回给客户端
  4. 开发步骤

    • 编写规则文件 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
        
  5. 加载线上规则

    $ anyproxy --rule https://sample.com/rule.js
    
  6. 更多规则使用方式参考官方文档。

06. 拓展

  1. ​http://anyproxy.io
  2. windows下安装AnyProxy抓取移动App Http请求

07. Electron 封装 AnyProxy

electron_anyproxy
  1. 源码https://github.com/fwon/electron-anyproxy

  2. 使用说明

你可能感兴趣的:(代理服务器 AnyProxy)