ubeee.cn
技术分享··17 min

Anthropic 检测地址?一个插件让浏览器地址符合 IP 所在

Chrome插件GeoMirror同步IP地理位置信息,避免账号被检测封禁。

by Ube_e#GeoMirror#插件#浏览器伪装#Anthropic

📝 本文 AI 含量约 20%,主要用于封面制作及技术栈写作,正文内容基于个人实践与代码实现。

Anthropic 正在大规模封禁简体中文账号。不管注册地、IP、绑定的手机号是什么——只要简体中文对话量到达一定阈值,几乎全军覆没。

更离谱的是,封禁邮件里居然还带了地址检测

这种做法不会止于 Anthropic。技术右翼在壮大,OpenAI、Google 迟早会跟进。

很多人都知道要买纯净 IP,但普遍忽视了地理位置、时区、系统语言这些浏览器层面的暴露信号

于是我手搓了一个 Chrome 插件,上架了 GitHub。


GeoMirror:让浏览器画像跟随出口 IP

项目地址:GitHub - GeoMirror

只换 IP 远远不够。换了代理之后,浏览器依然在泄露大量矛盾信号:

信号说明
navigator.geolocation可能暴露真实物理位置
Date.getTimezoneOffset()可能暴露本机时区
Intl.DateTimeFormat可能暴露系统时区
navigator.language可能暴露本机语言
HTTP Accept-Language请求头携带另一个语言环境

这些信号一旦矛盾,就形成典型的「代理/异常环境」画像。GeoMirror 把这条链补齐。

使用前 → 使用后:


三个核心功能

1. 修改地理位置

插件读取你的出口 IP,通过多个定位服务确定其所在地,然后在附近找一条住宅道路,选一个住宅坐标注入浏览器——不再是「IP 在洛杉矶、GPS 在北京」的可疑账户,而是「IP 在洛杉矶、GPS 在洛杉矶住宅区」的可信用户。

2. 修改时区

GeoMirror 只拦截 Chrome 内部的时间 API——DateIntl.DateTimeFormat、DST 夏令时——浏览器内时区与 IP 一致,而电脑系统时区完全不受影响。

3. 修改语言

根据 IP 的国家码和时区推断语言设置,覆盖 navigator.languagenavigator.languagesIntl locale,并通过 declarativeNetRequest 修改 HTTP 请求头的 Accept-Language。从 JS 到网络请求,语言身份与出口 IP 保持一致。


隐私设计

Local-first,不上传任何数据:

  • 无账号、无遥测、无分析
  • 不读取网页正文
  • 无远程配置
  • 所有设置存于本地 chrome.storage.local
  • 唯一外部请求:向公共 IP 定位和地图服务查询出口 IP 位置

安装

当前使用未打包扩展方式:

  1. GitHub 下载或克隆仓库
  2. 打开 chrome://extensions
  3. 开启「开发者模式」
  4. 点击「加载已解压的扩展程序」,选择 geomirror 文件夹
  5. 固定图标,打开弹窗点击 Refresh

后续计划上架 Chrome 应用商店。


如果你不想安装扩展

把这个 prompt 扔给任何一个 coding agent(Claude Code、Codex、Cursor 等),它能直接为你生成一个可用的本地版本:

请构建一个 Chrome Manifest V3 扩展,用于让浏览器可见的地区画像与当前出口 IP 保持一致。

要求:

  1. 通过 Chrome 网络栈检测浏览器当前可见出口 IP,使用多个 IP geolocation provider 做 fallback
  2. 保留 provider 返回的国家码、城市/地区/国家、经纬度、ISP、IANA timezone
  3. 不要直接使用 IP 中心点;优先用 OpenStreetMap Overpass 查询附近 highway=residential 住宅道路,并选择一个合理坐标;失败时使用安全 jitter fallback
  4. 根据国家码 + timezone 推断 locale bundle,包括 navigator.language、navigator.languages、Accept-Language
  5. 所有设置和计算出的 override 只存 chrome.storage.local。不要 telemetry,不要 analytics,不要账号系统,不要远程配置,不要收集网页内容
  6. 使用两个 content script:isolated-world bridge 读取 chrome.storage 把 JSON payload 发布到 DOM;MAIN-world injector 在 document_start 执行,patch 页面可见 API
  7. patch 以下内容:navigator.geolocation.getCurrentPosition / watchPosition / clearWatch;navigator.permissions.query 的 geolocation 结果;Date.prototype.getTimezoneOffset(使用调用者 Date 实例,支持 DST-aware IANA timezone);Intl.DateTimeFormat 默认 timezone 和 resolvedOptions().timeZone;navigator.language 和 navigator.languages;Intl.DateTimeFormat / Intl.NumberFormat / Intl.Collator 默认 locale
  8. 使用 chrome.declarativeNetRequest 在 language spoof 开启时设置 outgoing Accept-Language header
  9. 添加 popup,提供 location/timezone/language 开关、accuracy、refresh interval、可选 ipinfo token、手动刷新
  10. 添加测试,覆盖 timezone DST offset、locale 推断、provider parsing、manifest 注入顺序
  11. 写清楚隐私模型:无 telemetry,不读取页面内容,只本地存储;外部请求仅用于出口 IP / 地理位置匹配

你甚至可以把它微调成你自己的版本,加上你偏好的 provider、换掉地图源、改掉 fallback 策略——全部在你本地,代码完全可控。


技术右翼的封禁不会止于 Anthropic。只换 IP 已不够用,让浏览器在出口节点上变成一个真正的「本地人」,需要把地理位置、时区、语言全部拉齐。

GeoMirror 不追求成为一个完整的反指纹系统。但如果能帮你在使用海外服务时少踩几个坑、少被误封几个号——那就够了。