Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Latest commit

 

History

History
361 lines (286 loc) · 13.8 KB

File metadata and controls

361 lines (286 loc) · 13.8 KB


简体中文 | English

CI CI Docker Image

ninja

逆向工程的 ChatGPT 代理(绕过 Cloudflare 403 Access Denied)

如果项目对你有帮助,请考虑捐赠支持项目持续维护,也可以付费获取咨询和技术支持服务。

特性

  • API密钥获取
  • 电子邮件/密码帐户认证 (不支持Google/Microsoft第三方登录)
  • 支持获取RefreshToken
  • ChatGPT-API/OpenAI-API/ChatGPT-to-API Http API 代理 (供第三方客户端接入)
  • 支持IP代理池(支持使用Ipv6子网作为代理池)
  • ChatGPT WebUI
  • 极少的内存占用

局限性: 无法绕过 OpenAI 的彻底 IP 禁令

ArkoseLabs

发送GPT-4/GPT-3.5/创建API-Key对话需要Arkose Token作为参数发送,支持的解决方案暂时只有两种

  1. 使用HAR
  • 支持HAR特征池化,可同时上传多个HAR,使用轮训策略

ChatGPT 官网发送一次 GPT-4 会话消息,浏览器 F12 下载 https://tcr9i.chat.openai.com/fc/gt2/public_key/35536E1E-65B4-4D96-9D97-6ADB7EFF8147 接口的HAR日志记录文件,使用启动参数 --arkose-gpt4-har-dir 指定HAR目录路径使用(不指定路径则使用默认路径~/.gpt4,可直接上传更新HAR),同理GPT-3.5和其他类型也是一样方法。支持WebUI上传更新HAR,请求路径:/har/upload,可选上传身份验证参数:--arkose-har-upload-key

  1. 使用YesCaptcha / CapSolver

平台进行验证码解析,启动参数--arkose-solver选择平台(默认使用YesCaptcha),--arkose-solver-key 填写Client Key

  • 两种方案都使用,优先级是:HAR > YesCaptcha / CapSolver
  • YesCaptcha / CapSolver推荐搭配HAR使用,出验证码则调用解析器处理,验证后HAR使用更持久

目前OpenAI已经更新登录需要验证Arkose Token,解决方式同GPT-4,填写启动参数指定HAR文件--arkose-auth-har-dir。创建API-Key需要上传Platform相关的HAR特征文件,获取方式同上。

近日,OpenAI取消对GPT-3.5进行Arkose验证,可以不上传HAR特征文件使用(已上传的不影响),兼容后续可能会再次开启Arkose验证,需要加上启动参数--arkose-gpt3-experiment进行开启GPT-3.5模型Arkose验证处理,WebUI不受影响.

Http 服务

公开接口, * 表示任意URL后缀

  • ChatGPT-API

    • /public-api/*
    • /backend-api/*
  • OpenAI-API

    • /v1/*
  • Platform-API

    • /dashboard/*
  • ChatGPT-To-API

    • /to/v1/chat/completions

    关于ChatGPTAPI使用方法,AceessTokenAPI Key使用

  • Files-API

    • /files/*

    图片和文件上下传API代理,/backend-api/files接口返回的API已经转为/files/*

  • Authorization

    • 登录: /auth/token,表单option可选参数,默认为web登录,返回AccessTokenSession;参数为apple/platform,返回AccessTokenRefreshToken
    • 刷新 RefreshToken: /auth/refresh_token
    • 撤销 RefreshToken: /auth/revoke_token
    • 刷新 Session: /api/auth/session,发送名为__Secure-next-auth.session-token的Cookie调用刷新Session,同时返回新的AccessToken

    Web登录默认返回一个名为: __Secure-next-auth.session-token的cookie,客户端只需要保存这个cookie,调用/api/auth/session也可以刷新AccessToken

    RefreshToken获取的方式,采用Apple平台ChatGPT App登录方式,原理是使用内置MITM代理。Apple设备连上代理即可开启Apple平台登录获取RefreshToken,仅适用于量小或者个人使用(量大会封设备,慎用),详细使用请看启动参数说明。

    # 生成证书
    ninja genca
    
    ninja run --pbind 0.0.0.0:8888
    
    # 手机设置网络设置你代理监听地址,例如: http://192.168.1.1:8888
    # 之后浏览器打开 http://192.168.1.1:8888/preauth/cert,下载证书安装并信任,之后打开iOS ChatGPT就可以愉快玩耍了

API文档

  • Platfrom API doc
  • Backend API doc

基本服务

  • ChatGPT WebUI
  • 公开ChatGPT-API/OpenAI-API代理
  • API前缀与官方一致
  • ChatGPTAPI
  • 可接入第三方客户端
  • 可接入IP代理池,提高并发
  • 支持获取RefreshToken
  • 支持以HAR格式文件特征池

参数说明

  • --level,环境变量 LOG,日志级别: 默认info
  • --bind,环境变量 BIND, 服务监听地址: 默认0.0.0.0:7999,
  • --tls-cert,环境变量 TLS_CERT,TLS证书公钥,支持格式: EC/PKCS8/RSA
  • --tls-key,环境变量 TLS_KEY,TLS证书私钥
  • --proxies,代理,支持代理池,多个代理使用,隔开,格式: protocol://user:pass@ip:port,如果本地IP被Ban,使用代理池时需要关闭直连IP使用,--disable-direct关闭直连,否则会根据负载均衡使用你被Ban的本地IP
  • --workers,工作线程: 默认1
  • --disable-webui, 如果不想使用默认自带的WebUI,使用此参数关闭
  • --enable-file-proxy,环境变量ENABLE_FILE_PROXY,开启文件上下传API代理

...

安装

  • Ubuntu(Other Linux)

    GitHub Releases 中有预编译的 deb包,二进制文件,以Ubuntu为例:

wget https://github.com/gngpp/ninja/releases/download/v0.8.4/ninja-0.8.4-x86_64-unknown-linux-musl.tar.gz
tar -xf ninja-0.8.4-x86_64-unknown-linux-musl.tar.gz
./ninja run
  • OpenWrt

GitHub Releases 中有预编译的 ipk 文件, 目前提供了 aarch64/x86_64 等架构的版本,下载后使用 opkg 安装,以 nanopi r4s 为例:

wget https://github.com/gngpp/ninja/releases/download/v0.8.4/ninja_0.8.4_aarch64_generic.ipk
wget https://github.com/gngpp/ninja/releases/download/v0.8.4/luci-app-ninja_1.1.6-1_all.ipk
wget https://github.com/gngpp/ninja/releases/download/v0.8.4/luci-i18n-ninja-zh-cn_1.1.6-1_all.ipk

opkg install ninja_0.8.4_aarch64_generic.ipk
opkg install luci-app-ninja_1.1.6-1_all.ipk
opkg install luci-i18n-ninja-zh-cn_1.1.6-1_all.ipk
  • Docker

镜像源支持gngpp/ninja:latest/ghcr.io/gngpp/ninja:latest

docker run --rm -it -p 7999:7999 --name=ninja \
  -e WORKERS=1 \
  -e LOG=info \
  gngpp/ninja:latest run
  • Docker Compose

CloudFlare Warp你的地区不支持(China)请把它删掉,或者你的VPSIP可直连OpenAI,那么也可以删掉

version: '3'

services:
  ninja:
    image: ghcr.io/gngpp/ninja:latest
    container_name: ninja
    restart: unless-stopped
    environment:
      - TZ=Asia/Shanghai
      - PROXIES=socks5://warp:10000
    command: run --disable-direct
    ports:
      - "8080:7999"
    depends_on:
      - warp

  warp:
    container_name: warp
    image: ghcr.io/gngpp/warp:latest
    restart: unless-stopped

  watchtower:
    container_name: watchtower
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --interval 3600 --cleanup
    restart: unless-stopped

命令手册

$ ninja --help
Reverse engineered ChatGPT proxy

Usage: ninja [COMMAND]

Commands:
  run      Run the HTTP server
  stop     Stop the HTTP server daemon
  start    Start the HTTP server daemon
  restart  Restart the HTTP server daemon
  status   Status of the Http server daemon process
  log      Show the Http server daemon log
  genca    Generate MITM CA certificate
  gt       Generate config template file (toml format file)
  update   Update the application
  help     Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help
  -V, --version  Print version

$ ninja run --help
Run the HTTP server

Usage: ninja run [OPTIONS]

Options:
  -L, --level <LEVEL>
          Log level (info/debug/warn/trace/error) [env: LOG=] [default: info]
  -C, --config <CONFIG>
          Configuration file path (toml format file) [env: CONFIG=]
  -b, --bind <BIND>
          Server bind address [env: BIND=] [default: 0.0.0.0:7999]
  -W, --workers <WORKERS>
          Server worker-pool size (Recommended number of CPU cores) [default: 1]
      --concurrent-limit <CONCURRENT_LIMIT>
          Enforces a limit on the concurrent number of requests the underlying [default: 1024]
  -x, --proxies <PROXIES>
          Server proxies pool, Only support http/https/socks5 protocol [env: PROXIES=]
  -i, --interface <INTERFACE>
          Bind address for outgoing connections (or IPv6 subnet fallback to Ipv4) [env: INTERFACE=]
  -I, --ipv6-subnet <IPV6_SUBNET>
          IPv6 subnet, Example: 2001:19f0:6001:48e4::/64 [env: IPV6_SUBNET=]
      --disable-direct
          Disable direct connection [env: DISABLE_DIRECT=]
      --cookie-store
          Enabled Cookie Store [env: COOKIE_STORE=]
      --timeout <TIMEOUT>
          Client timeout (seconds) [default: 360]
      --connect-timeout <CONNECT_TIMEOUT>
          Client connect timeout (seconds) [default: 20]
      --tcp-keepalive <TCP_KEEPALIVE>
          TCP keepalive (seconds) [default: 60]
      --pool-idle-timeout <POOL_IDLE_TIMEOUT>
          Set an optional timeout for idle sockets being kept-alive [default: 90]
      --tls-cert <TLS_CERT>
          TLS certificate file path [env: TLS_CERT=]
      --tls-key <TLS_KEY>
          TLS private key file path (EC/PKCS8/RSA) [env: TLS_KEY=]
      --cf-site-key <CF_SITE_KEY>
          Cloudflare turnstile captcha site key [env: CF_SECRET_KEY=]
      --cf-secret-key <CF_SECRET_KEY>
          Cloudflare turnstile captcha secret key [env: CF_SITE_KEY=]
  -A, --auth-key <AUTH_KEY>
          Login Authentication Key [env: AUTH_KEY=]
  -D, --disable-webui
          Disable WebUI [env: DISABLE_WEBUI=]
  -F, --enable-file-proxy
          Enable file proxy [env: ENABLE_FILE_PROXY=]
      --arkose-endpoint <ARKOSE_ENDPOINT>
          Arkose endpoint, Example: https://client-api.arkoselabs.com
  -E, --arkose-gpt3-experiment
          Enable Arkose GPT-3.5 experiment
      --arkose-gpt3-har-dir <ARKOSE_GPT3_HAR_DIR>
          About the browser HAR directory path requested by ChatGPT GPT-3.5 ArkoseLabs
      --arkose-gpt4-har-dir <ARKOSE_GPT4_HAR_DIR>
          About the browser HAR directory path requested by ChatGPT GPT-4 ArkoseLabs
      --arkose-auth-har-dir <ARKOSE_AUTH_HAR_DIR>
          About the browser HAR directory path requested by Auth ArkoseLabs
      --arkose-platform-har-dir <ARKOSE_PLATFORM_HAR_DIR>
          About the browser HAR directory path requested by Platform ArkoseLabs
  -K, --arkose-har-upload-key <ARKOSE_HAR_UPLOAD_KEY>
          HAR file upload authenticate key
  -s, --arkose-solver <ARKOSE_SOLVER>
          About ArkoseLabs solver platform [default: yescaptcha]
  -k, --arkose-solver-key <ARKOSE_SOLVER_KEY>
          About the solver client key by ArkoseLabs
  -T, --tb-enable
          Enable token bucket flow limitation
      --tb-store-strategy <TB_STORE_STRATEGY>
          Token bucket store strategy (mem/redis) [default: mem]
      --tb-redis-url <TB_REDIS_URL>
          Token bucket redis connection url [default: redis://127.0.0.1:6379]
      --tb-capacity <TB_CAPACITY>
          Token bucket capacity [default: 60]
      --tb-fill-rate <TB_FILL_RATE>
          Token bucket fill rate [default: 1]
      --tb-expired <TB_EXPIRED>
          Token bucket expired (seconds) [default: 86400]
  -B, --pbind <PBIND>
          Preauth MITM server bind address [env: PREAUTH_BIND=]
  -X, --pupstream <PUPSTREAM>
          Preauth MITM server upstream proxy, Only support http/https/socks5 protocol [env: PREAUTH_UPSTREAM=]
      --pcert <PCERT>
          Preauth MITM server CA certificate file path [default: ca/cert.crt]
      --pkey <PKEY>
          Preauth MITM server CA private key file path [default: ca/key.pem]
  -h, --help
          Print help

平台支持

  • Linux
    • x86_64-unknown-linux-musl
    • aarch64-unknown-linux-musl
    • armv7-unknown-linux-musleabi
    • armv7-unknown-linux-musleabihf
    • arm-unknown-linux-musleabi
    • arm-unknown-linux-musleabihf
    • armv5te-unknown-linux-musleabi
  • Windows
    • x86_64-pc-windows-msvc
  • MacOS
    • x86_64-apple-darwin
    • aarch64-apple-darwin

编译

  • Linux编译,Ubuntu机器为例:
apt install build-essential
apt install cmake
apt install libclang-dev

git clone https://github.com/gngpp/ninja.git && cd ninja
cargo build --release
  • OpenWrt 编译
cd package
svn co https://github.com/gngpp/ninja/trunk/openwrt
cd -
make menuconfig # choose LUCI->Applications->luci-app-ninja  
make V=s

说明

  • 开源项目可以魔改,但请保留原作者信息,以免失去技术支持。
  • 项目是站在其他巨人的肩膀上,感谢!
  • 报错、BUG之类的提出Issue,我会修复。

预览

img0 img1