代理服务器 AnyProxy

作者: JustDo23 | 来源:发表于2018-02-08 23:11 被阅读630次
    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. 移动端安装证书

      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

      本文链接:https://www.haomeiwen.com/subject/muqjzxtx.html