MIT License

技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

技术分析:claude-ip-guard —— IP 基础访问控制

项目背景与痛点

Claude 是一款常用的人工智能应用,但在实际使用过程中,常常会遇到封号的风险,尤其是在多设备登录或频繁调用 API 的场景下。claude-ip-guard 正是为了解决这一痛点而设计的解决方案。通过 IP 基础的访问控制机制,它可以有效地检测和拦截不合规的请求,从而保护 Claude 账号的安全。

技术核心揭秘

技术架构

claude-ip-guard 的架构设计简洁而精准,主要包括以下几个关键环节:

  1. 请求检测:通过 Claude Code 插件,捕获并记录来自客户端的所有请求信息,包括 IP 地址、请求路径和设备类型等。
  2. IP 校验:利用 IP 数据库,对该 IP 地址进行合法性验证,进一步获取地理位置信息。
  3. 访问控制逻辑:基于 IP 地址的地理位置信息,制定相应的访问策略。如限制某些国家或地区的请求,或在特定时间段内禁止访问。
  4. 响应处理:对于合法请求继续处理;对于非法请求进行拦截,并返回指定的错误信息。
graph TD A[请求发起] --> B{"解析请求"} B -->|"参数有效"| C[记录 IP] B -->|"参数无效"| D[返回错误] C --> E{"验证 IP"} E -->|"合法"| F[执行业务] E -->|"非法"| G[返回错误] F --> H{"地理位置检测"} H -->|"允许"| I[响应成功] H -->|"拒绝"| J[返回错误]

核心实现

Key 要点集中在 请求解析 和 IP 校验。

  • 请求解析:插件通过额外配置项(例如自定义钩子函数),在每次请求发生时获取原始信息。这需要对 Claude Native API 的充分理解与结合,确保能准确提取信息。
  • IP 校验:通常涉及第三方 IP 信息服务的集成。这需要验证 IP 地址的有效性,并获取地理位置信息。其中,安全性与性能成为设计时的核心难点。

功能亮点与差异

相比于相似功能的软件,claude-ip-guard 的独特之处在于采用了插件式的扩展机制,这极大便利了开发者的功能定制。并且,其地理定位和访问策略的灵活性、可配置性,使其在应对复杂多变的需求时具有明显的优势。

应用场景与落地建议

claude-ip-guard 适用于需要严格控制访问权限的业务场景,尤其是对账号安全和操作路径有严格监管需求的领域。例如,金融交易、在线教育平台和大型企业内部交流平台等,其高频、异地登录等特性需要高效又安全的解决方案。

实际落地时,以下几个方面需要特别注意:

  • 配置合理性:多样化配置项的实际优化,需要结合具体应用场景的复杂性进行反复测试与验证。
  • 性能考量:访问策略控制机制的选择,必须确保低延迟高效率的同时仍可以顺畅处理大量数据。

综合评价

claude-ip-guard 在核心问题的解决上,做到了精准而稳健。同其他竞争产品相比,它的灵活性和扩展性是其最大的竞争优势,这体现在其强大的可配置性与可定制性。当然,项目的复杂性也凸显了它在扩展和维护方面可能面临的挑战。总的来说,对于需要严格访问控制和安全管理的场景,claude-ip-guard 是一个值得推荐的技术选择。

关于

GitHub 原始描述(英文)

A Claude Code hook plugin for IP-based access control · 防 Claude 封号 · Claude IP 检测 · IP 地理位置拦截 · Claude 账号保护

描述取自 GitHub 官方 API,保持仓库作者书写的原文。

简要分析

热度分
256
价值分
141
活跃状态
活跃

语言占比

Shell

贡献者

README

claude-ip-guard

License: MIT Platform Claude Code

防止 Claude Code 因 IP 地理位置异常导致账号被封的 Hook 插件。

自动检测每次请求的出口 IP — 受限国家直接拦截,新 IP 给出分级警告。

如果这个项目对你有帮助,欢迎点个 ⭐ Star — Star 后可及时收到更新通知,我们会持续根据 Anthropic 政策变化和用户反馈迭代优化。

功能特性

  • 受限国家拦截 — IP 位于受限国家时阻断请求,附带可见提示
  • 新 IP 分级警告 — 首次出现的 IP 触发软拦截并给出警告,重新发送即可继续
  • 代理场景兼容 — 第三方中转 API 或 VPN 分流时自动识别,不误拦
  • 网络故障不误拦 — 任何检测失败均放行,不因网络问题阻断正常使用

拦截效果

安装

环境要求:bash、curl、python3(或 python)。支持 macOS、Linux、WSL、Windows(Git Bash)。

全局安装(推荐,对本机所有项目生效):

git clone https://github.com/cso1z/claude-ip-guard.git
bash claude-ip-guard/install.sh

项目级安装(仅对当前项目生效):

bash claude-ip-guard/install.sh --project
# 或指定路径
bash claude-ip-guard/install.sh --project /path/to/your/project

手动安装:将 .claude/scripts/ 复制到项目目录,授权执行后将以下配置合并到 .claude/settings.json:

{
  "hooks": {
    "SessionStart": [
      {
        "_ip_guard": true,
        "matcher": "startup|resume",
        "hooks": [{ "type": "command", "command": "bash .claude/scripts/check-ip-on-start.sh", "timeout": 15 }]
      }
    ],
    "UserPromptSubmit": [
      {
        "_ip_guard": true,
        "hooks": [{ "type": "command", "command": "bash .claude/scripts/check-ip-on-prompt.sh", "timeout": 15 }]
      }
    ]
  }
}

工作原理

挂载 SessionStart 和 UserPromptSubmit 两个 Hook,在会话启动和每次发送消息前自动检测当前网络环境(直连可达性 + 出口 IP 地理位置),根据结果决定放行或拦截:

  • HTTP 403:Anthropic 明确拒绝该 IP,立即硬拦截
  • 直连可达(收到任意 HTTP 响应):进入 geo + IP 历史检查流程
  • 直连异常(超时/无响应):退而依赖 geo 判断,受限地区硬拦截,否则 fail-safe 放行

新 IP 分级警告

出现新 IP 时触发软拦截,根据近 30 天累计出现的不同 IP 数给出分级提示:

近 30 天不同 IP 数 等级 提示前缀
第 1 个 — 直接放行,建立基准,不提示
第 2~3 个 注意 [注意]
第 4~6 个 警告 [警告]
第 7 个及以上 严重 [严重警告]

软拦截仅阻止当次消息,重新发送即可继续。

频繁切换 IP 本身也是封号风险因素之一。分级警告的目的是提醒你关注网络环境的稳定性,而不仅仅是拦截受限地区。等级越高,说明近期 IP 变动越频繁,建议排查原因。

禁止国家列表

基于 Anthropic 官方支持地区 及美国 OFAC 出口管制规定:

国家/地区 ISO 代码 原因
中国大陆 CN 监管/地缘政治
俄罗斯 RU 美国制裁
朝鲜 KP OFAC 制裁
伊朗 IR OFAC 制裁
叙利亚 SY OFAC 制裁
古巴 CU OFAC 制裁
白俄罗斯 BY 制裁相关
委内瑞拉 VE 未列入支持名单
缅甸 MM 未列入支持名单
利比亚 LY 未列入支持名单
索马里 SO 未列入支持名单
也门 YE 未列入支持名单
马里 ML 未列入支持名单
中非共和国 CF 未列入支持名单
南苏丹 SS 未列入支持名单
刚果民主共和国 CD 未列入支持名单
厄立特里亚 ER 未列入支持名单
阿富汗 AF 未列入支持名单
乌克兰 UA 俄占区受限,因无法识别具体省份,按整国处理

验证是否生效

关闭 VPN,直接运行检测脚本,通过日志查看检测结果:

bash ~/.claude/scripts/check-ip-on-start.sh
cat ~/.cache/claude-ip-guard/ip-guard-$(date '+%Y-%m-%d').log

常见问题

Q:会影响 Claude Code 的响应速度吗?

每次 prompt 先做轻量 IP 比对,命中缓存(IP 相同且 < 10 分钟)直接放行,无网络请求。仅 IP 变化或缓存过期时才发起地理位置查询,正常使用几乎无感知。

Q:我使用第三方代理(如中转 API),会被误拦吗?

不会。检测到 ANTHROPIC_BASE_URL 指向非官方地址时,自动跳过全部检测,不干预第三方代理用户。

Q:VPN 分流场景(直连通但地理位置显示受限国家)会怎样?

会被识别为分流代理场景,正常放行,不写缓存和历史。适用于代理只转发 Anthropic 流量、本地其他流量走直连的情况。

Q:出现误拦(正常 IP 被拦截)怎么办?

  1. 检查日志确认 IP 和国家代码:cat ~/.cache/claude-ip-guard/ip-guard-$(date '+%Y-%m-%d').log
  2. 若国家代码有误,可提 Issue 反馈
  3. 临时解决:删除 ~/.cache/claude-ip-guard/ip_cache 清除缓存后重试

Q:新 IP 软拦截后必须等多久才能继续?

不需要等待。软拦截仅阻止当次 prompt,直接重新发送同一条消息即可继续——第二次发送时 IP 已记入历史,正常放行。

Q:如何自定义拦截国家?

编辑 ~/.claude/scripts/ip-guard-lib.sh(项目级安装则是 .claude/scripts/ip-guard-lib.sh),在 BLOCKED_COUNTRIES 数组中增减 ISO 代码即可,无需重新安装。

贡献

欢迎提交 Issue 和 Pull Request。

  • Bug 报告:请附上日志文件内容和 bash --version 输出
  • 新增受限国家:在 Issue 中说明国家代码和依据,维护者会更新 ip-guard-lib.sh
  • 其他改进:建议先开 Issue 讨论方案,再提 PR

作者的其他项目

如果你平时需要同时处理大量网页、文档和项目资料,可以看看 TabSyncer:一个支持标签页整理、会话快照和跨设备同步的 Chrome 扩展。

查看官网 · 安装扩展

使用的接口

接口 用途 协议
api.anthropic.com 直连检测(主判断门) HTTPS
api.ipify.org 轻量 IP 查询(主,每次 prompt) HTTPS
ipinfo.io 完整地理查询(主) HTTPS
ip-api.com 轻量 IP 查询(备)/ 完整地理查询(备) HTTP

License

MIT

评论

暂无评论