GitHub: https://github.com/nmhjklnm/cac
协议:MIT
安装方式:npm / 手动
为什么需要这个工具?
Claude Code 运行时会自动采集设备标识符并上报,包括:
| 采集项 | 采集方式 |
|---|---|
| 硬件 UUID | macOS ioreg / Linux /etc/machine-id / Windows wmic+注册表 |
| 主机名 | Shell hostname 命令 + Node.js os.hostname() |
| MAC 地址 | ifconfig / Node.js os.networkInterfaces() |
| 用户名 | Node.js os.userInfo() |
| Statsig stable_id | ~/.claude/statsig/ 目录下的文件 |
| userID | ~/.claude.json 中的 userID 字段 |
Anthropic 通过这些指纹综合判断是否存在账号滥用/共享/批量注册行为。常见封号原因:
-
同一设备指纹关联多个账号 --- 换号不换机器,设备指纹泄露
-
遥测数据暴露真实身份 ---
statsig.anthropic.com、sentry.io等遥测端点持续上报 -
IP 关联 --- 多账号共用同一 IP,或无代理直连
-
OAuth 令牌环境污染 ---
ANTHROPIC_BASE_URL/ANTHROPIC_API_KEY等环境变量残留
cac 是什么?
cac 是一个 wrapper + 进程级代理 方案,零侵入 Claude Code 源码。通过拦截所有 claude 调用,在进程级别注入伪造的设备指纹、代理配置和遥测阻断。
特性一览
| 特性 | 实现方式 |
|---|---|
| 硬件 UUID 隔离 | macOS ioreg / Linux machine-id / Windows wmic+reg shim |
| 主机名 / MAC 隔离 | Shell shim + Node.js os.hostname() / os.networkInterfaces() hook |
| Node.js 指纹钩子 | fingerprint-hook.js 通过 NODE_OPTIONS --require 注入 |
| 遥测阻断 | DNS guard + 12 层环境变量 + fetch 拦截 + HOSTALIASES |
| 健康检查 bypass | 本地 HTTPS server + /etc/hosts + NO_PROXY,跳过 Cloudflare 403 |
| mTLS 客户端证书 | 自签 CA + 每环境独立客户端证书 |
| 进程级代理 | HTTP / HTTPS / SOCKS5,自动检测协议 |
| Relay 本地中转 | 127.0.0.1 TCP relay,绕过 Clash/Surge TUN 模式 |
| 启动前检测 | 代理连通性 + TUN 冲突检测 |
核心防护层详解
1. 设备指纹隔离
每个环境(~/.cac/envs/<name>/)生成独立的:
-
uuid--- 伪造的硬件 UUID -
stable_id--- 伪造的 statsig 跟踪 ID -
user_id--- 伪造的用户 ID -
hostname--- 伪造的主机名 -
mac_address--- 伪造的 MAC 地址 -
machine_id--- 伪造的 machine-id(Linux)
实现方式有两层:
-
Shell Shim 层 :在 PATH 中插入伪造的
ioreg/hostname/ifconfig/cat命令,拦截 Claude Code 的系统调用 -
Node.js Hook 层 :通过
NODE_OPTIONS="--require fingerprint-hook.js"注入,monkey-patchos.hostname()、os.networkInterfaces()、os.userInfo()、fs.readFileSync等 API
2. 遥测阻断(12 层环境变量 + DNS 拦截 + fetch 劫持)
环境变量层(在 wrapper 中设置):
CLAUDE_CODE_ENABLE_TELEMETRY= # 原生开关
DO_NOT_TRACK=1 # 通用标准
OTEL_SDK_DISABLED=true # OpenTelemetry 全禁
OTEL_TRACES_EXPORTER=none
OTEL_METRICS_EXPORTER=none
OTEL_LOGS_EXPORTER=none
SENTRY_DSN= # Sentry 置空
DISABLE_ERROR_REPORTING=1
DISABLE_BUG_COMMAND=1
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1
TELEMETRY_DISABLED=1
DISABLE_TELEMETRY=1
DNS 拦截层(cac-dns-guard.js,通过 NODE_OPTIONS --require 注入):
-
拦截
dns.lookup/dns.resolve/dns.promises--- 阻断statsig.anthropic.com、sentry.io等域名解析 -
拦截
net.connect/net.createConnection--- 网络层安全网 -
替换
globalThis.fetch--- 因为 Node.js 原生 fetch (undici) 不走dns.lookup,会绕过 DNS 拦截 -
HOSTALIASES文件 ---gethostbyname级别的备用拦截
3. 进程级代理
-
支持 HTTP / HTTPS / SOCKS5 协议,自动检测
-
通过
HTTPS_PROXY/HTTP_PROXY/ALL_PROXY环境变量注入 -
启动前自动做 TCP 连通性检测,不通则拒绝启动
-
自动清除
ANTHROPIC_BASE_URL/ANTHROPIC_AUTH_TOKEN/ANTHROPIC_API_KEY,强制走 OAuth
4. 健康检查 Bypass
Claude Code 启动时会直连 api.anthropic.com 做健康检查,在代理环境下会超时。解决方式:
-
本地启动 HTTPS server(端口 443)
-
临时写入
/etc/hosts将api.anthropic.com指向127.0.0.1 -
在
NO_PROXY中加入api.anthropic.com(3 秒后自动移除) -
用自签 CA 签发
api.anthropic.com证书,让健康检查秒过 200
5. mTLS 客户端证书
-
自签 CA(4096 位 RSA,10 年有效期)
-
每个环境独立客户端证书(2048 位 RSA,1 年有效期)
-
通过
cac-dns-guard.js中的tls.connect拦截,仅对代理服务器注入客户端证书
6. Relay 本地中转(解决 TUN 冲突)
当使用 Clash/Surge 等 TUN 模式代理时,所有流量会被 TUN 接管,导致代理链路冲突。
claude → wrapper → relay (127.0.0.1:17890) → 远端代理 → API
↑ loopback 不经过 TUN
relay.js 是一个 Node.js TCP 代理,监听本地端口,支持 HTTP CONNECT 和 SOCKS5 上游转发。
快速使用
安装
# npm(推荐)
npm install -g claude-cac
cac setup
# 手动安装
git clone https://github.com/nmhjklnm/cac.git
cd cac && bash install.sh
日常使用
# 添加代理环境(自动生成独立设备指纹)
cac add us1 1.2.3.4:1080:username:password
# 切换环境
cac us1
# 启动 Claude Code(首次需 /login)
claude
# 检查防护状态
cac check
# 列出所有环境
cac ls
命令速查
| 命令 | 说明 |
|---|---|
cac setup |
首次安装 |
cac add <名字> <代理> |
添加配置(host:port:user:pass 或完整 URL) |
cac <名字> |
切换配置 |
cac ls |
列出所有配置 |
cac check |
检查代理、安全防护、TUN 冲突 |
cac relay on [--route] |
启用本地中转(绕过 TUN) |
cac relay off |
停用中转 |
cac stop / cac -c |
暂停 / 恢复保护 |
cac delete |
卸载(清除所有数据和配置) |
工作原理架构图
cac wrapper(进程级,零入侵源代码)
┌──────────────────────────────────────────┐
claude ────►│ 健康检查 bypass(本地 HTTPS server) │
│ 12 层遥测环境变量保护 │
│ NODE_OPTIONS: DNS guard + 指纹钩子 │──► 代理 ──► Anthropic API
│ PATH: 设备指纹 shim │
│ mTLS: 客户端证书注入 │
└──────────────────────────────────────────┘
TUN 代理冲突时启用 relay:
claude ──► wrapper ──► relay (127.0.0.1:17890) ──► 远端代理 ──► API
↑ loopback 流量不经过 TUN
文件结构
~/.cac/
├── bin/claude # wrapper(拦截所有 claude 调用)
├── shim-bin/ # ioreg / hostname / ifconfig / cat shim
├── fingerprint-hook.js # Node.js 指纹拦截(--require 注入)
├── relay.js # TCP relay 本地中转
├── cac-dns-guard.js # DNS + fetch 遥测拦截 + mTLS 注入
├── blocked_hosts # HOSTALIASES 遥测域名拦截
├── ca/ # 自签 CA + 健康检查 bypass 证书
├── current # 当前激活的配置名
└── envs/<name>/ # 各环境独立数据
├── proxy # 代理地址
├── uuid / stable_id # 隔离身份
├── user_id # 伪造用户 ID
├── hostname / mac_address / machine_id
├── client_cert.pem # mTLS 证书
├── tz / lang # 时区和语言(根据代理出口 IP 自动检测)
└── relay # "on" 启用中转
MITM 抓包验证
项目自带 mitmproxy 方案(mitm/ 目录),可用于验证指纹拦截是否生效:
# 安装
bash mitm/install.sh
# 一键抓包
~/.cac/bin/claude-mitm
监控的关键词包括:machineId、deviceId、hostname、networkInterfaces、stable_id、userID、fingerprint、telemetry、statsig 等。
报告输出到 ~/.cac/mitm/reports/<时间戳>/,包含 JSONL 明细和 JSON 汇总。
注意事项
-
首次登录 :启动 claude 后输入
/login完成 OAuth 授权 -
TUN 冲突 :用
cac relay on或在 TUN 软件中为代理 IP 加 DIRECT 规则 -
API 环境变量 :wrapper 自动清除
ANTHROPIC_BASE_URL/ANTHROPIC_AUTH_TOKEN/ANTHROPIC_API_KEY -
IPv6:建议系统级关闭,防止真实地址泄露
-
Windows 支持 :通过
cac.cmd/cac.ps1支持,fingerprint-hook.js 包含 Windows 的 wmic/reg 拦截