最近 Claude Code 账号比较严重。Claude 又批量扫号了,连老外都看不下去了
很多人第一反应是 IP 不干净,于是去换纯净住宅 IP。
但是这个也不全是,封号是全方位的监测,你不知道具体哪个点触发了,比如
时区、系统语言、字体、地理定位这些信号,会在你完全没察觉的情况下,把你的真实环境一五一十地报上去。
IP 在洛杉矶,浏览器却告诉服务器「我时区是 Asia/Shanghai、语言是 zh-CN、装了微软雅黑」,这种自相矛盾本身

所以,今天写两部分内容:
第一部分,怎么自查你现在的环境有多「像中国用户」;
第二部分,怎么把浏览器画像拉回到跟出口 IP 一致。
怎么查?
有人在 GitHub 上开源了一个自查工具,叫 FuckClaude。
看这名字,懂的都懂
自查地址(点开即测,不用装东西):
https://fuck-claude.vercel.app/
这个工具逻辑很简单,就是在浏览器里点一下,它就把你当前环境的几个关键特征逐项打分,
然后告诉你,你在服务端眼里,你有多像一个坐在国内的用户
-
系统时区,30 分。 是不是 Asia/Shanghai这类——这是 Claude 实际在用的信号,分量最重。 -
-
浏览器语言,24 分。 zh-CN、zh-Hans直接拉满 -
-
已安装的中文字体,20 分。 用 canvas 量文字宽度,探测微软雅黑、PingFang SC 这些字体在不在。 -
-
Intl 区域设置,10 分。 系统的 locale 配置 -
-
时区偏移,8 分。 是不是 UTC+8 -
-
Emoji 渲染风格,8 分。 通过 UA 反推你用的是哪家系统。 -
每一项算出一个 0 到 1 的相似度,乘以对应权重,再加起来,最后落到 Low / Medium / High 三档判定。

所以大家看到没有,换句话说,你 IP 换得再干净,只要时区还是东八区、语言还是 zh-CN,这半壁江山就已经交代出去了。
字体和 emoji 这些看着不起眼,但它们探测的是操作系统层的痕迹,这一层比 IP 更难伪装,也更容易被忽略。
如果你测出来是 High,别急着焦虑,往下看第二部分。
怎么可以有效防止?
知道了病灶在哪,剩下的就是对症。这里介绍一个思路,以及一个已经开源的现成实现:GeoMirror。
前面说了,除了代理 IP,下面这几个都会单独泄露你的真实身份:
-
navigator.geolocation:浏览器定位,可能直接暴露你的物理坐标 -
-
Date.getTimezoneOffset():本机时区偏移 -
-
Intl.DateTimeFormat:系统时区 -
-
navigator.language:本机语言 -
-
HTTP 请求头里的 Accept-Language:又一份语言环境,走的是网络层
核心问题在于:这些信号里只要有一个跟你的出口 IP 对不上,整个环境就露馅了。
所以怎么样让系统统一说同一套话,即IP 在哪,它们就都在哪。
GeoMirror 干的就是这件事,
项目地址:https://github.com/Azurboy/geomirror
拆成三个动作:
一、把地理定位对齐到 IP
它先读你的出口 IP,用多个定位服务查出大致位置,然后在那附近找一条真实的住宅道路,挑一个住宅坐标注入浏览器。
让你看起来像住在洛杉矶某个居民区、GPS 也在那个居民区,的正常人,而不是IP 在洛杉矶、定位却跳到北京的问题账户。
二、把时区对齐到 IP
它只拦截 Chrome 内部那几个时间 API——Date、Intl.DateTimeFormat、以及夏令时的处理
让浏览器里读到的时区跟 IP 一致。注意,它动的是浏览器这一层,你电脑的系统时区完全不受影响,不影响你本地正常用。
三、把语言对齐到 IP
根据 IP 的国家码和时区推断出该用的语言,一次性覆盖 navigator.language、navigator.languages、Intl 的 locale
再通过 declarativeNetRequest 改掉 HTTP 请求头里的 Accept-Language。从 JS 层到网络请求层,语言身份跟出口 IP 保持一致。
隐私上它做得比较克制:本地优先,不上传任何数据,没有账号、没有遥测、没有分析,不读网页正文,所有配置都存在本地的 chrome.storage.local 里。
唯一的外部请求,是去公共的 IP 定位和地图服务查一下出口 IP 的位置—,这是功能本身必须的。
安装走的是 Chrome 未打包扩展的方式:
下载或克隆仓库 → 打开 chrome://extensions → 打开右上角「开发者模式」→ 点「加载已解压的扩展程序」,选中 geomirror 文件夹 → 把图标固定到工具栏,打开弹窗点一下 Refresh。
弹窗里能单独开关定位、时区、语言,也能设精度和刷新间隔。
怎么手搓一个?
不想装现成的?让 coding agent 给你现搓一个
如果你不放心别人的扩展,或者想要个完全属于自己、能随时改的版本,其实不用自己从零写。
把下面这段需求丢给任何一个 coding agent(Claude Code、Codex、Cursor 都行),
它能直接给你生成一个可用的本地扩展:
请构建一个 Chrome Manifest V3 扩展,用于让浏览器可见的地区画像与当前出口 IP 保持一致。要求:
通过 Chrome 网络栈检测浏览器当前可见的出口 IP,使用多个 IP geolocation provider 做 fallback 保留 provider 返回的国家码、城市/地区/国家、经纬度、ISP、IANA timezone 不直接使用 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、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 / NumberFormat / Collator 的默认 locale
7、用 chrome.declarativeNetRequest 在 language spoof 开启时设置外发的 Accept-Language header
8、加一个 popup,提供 location/timezone/language 开关、精度、刷新间隔、可选的 ipinfo token、手动刷新
9、加测试,覆盖时区 DST offset、locale 推断、provider 解析、manifest 注入顺序
10、写清楚隐私模型:无 telemetry、不读页面内容、只本地存储;外部请求仅用于出口 IP / 地理位置匹配
生成之后,你完全可以按自己的偏好微调——换定位 provider、换地图源、改 fallback 策略,都行。
要提醒的是,这也是权宜之计,不是治本
规则随时会变,今天有效的对齐方式,明天可能就被新的检测维度绕过去;而且第三方 API 这条退路,现在也已经开始收紧了。
所以心态是:把它当成一个能自查、能应急的工具,而不是一劳永逸的解法。
先用第一部分的工具看清自己暴露在哪,再用第二部分的思路逐项抹平,剩下的,跟着规则的变化持续调整。
如果这篇文章看不懂,可以发给ai帮你理解

