TL;DR每个连接都会暴露一套本应彼此自洽的分层指纹:TCP/IP 栈(TTL、窗口、MSS)、TLS 的 ClientHello(JA3/JA4)、HTTP/2 帧顺序、以及 JS 环境(时区、语言、WebRTC)。IP 干净救不了各层互相矛盾——IP 只是众多信号之一。
一个连接是一叠指纹
当客户端连上来时,它从 IP 报文一直到浏览器环境,在每一层都暴露独立信号。这些信号本应彼此自洽——真 Chrome 跑在真 Windows 上会产生一整套协调一致的取值。层与层之间的矛盾,是检测方最强的信号。
一项里程碑式的测量(Eckersley, PETS 2010)发现,仅浏览器配置——不含 IP、不含 cookie——就携带至少 18.1 比特熵,能唯一识别 83.6% 的浏览器。IP 之外的信号,单凭它们自己就足以把你认出来。
TLS 指纹(JA3 / JA4)
TLS 的 ClientHello 由底层 TLS 库生成,与 User-Agent 头完全独立。JA3 把 ClientHello 的版本、密码套件、扩展和曲线哈希掉;它 2023 年的继任者 JA4 在哈希前对密码套件和扩展列表排序,于是随机化它们的顺序不再能规避指纹。
这就是为什么一个自称 Chrome、却带着 Go 或 Python 库 ClientHello 的请求,可以在发出任何内容字节之前就被拒。一项对 118 亿条 TLS 连接的研究发现,冒充浏览器的非浏览器工具,其 TLS 配置很容易与它们想模仿的真实流量区分开。
TCP/IP 栈(p0f)与隧道的破绽
p0f 这类被动工具仅凭 TCP/IP 栈就能推断操作系统——初始 TTL、TCP 窗口大小、MSS、选项顺序、DF 位。不同系统默认值不同:初始 TTL 在 Linux/macOS 上是 64,Windows 上是 128。
有两处破绽会暴露隧道和 NAT。TTL 每过一跳减一,所以跳数 ≈ 初始 TTL − 观测 TTL;一个与「声称的直连」对不上的值,就暴露了中间有一层。而隧道封装会逼出更小的 MSS——WireGuard 默认隧道 MTU 是 1420,对比正常的 1500,一个异常偏小的 MSS 就宣告了底下套着东西。
WebRTC 与 DNS——两个经典泄露
WebRTC 通过 UDP 收集 ICE candidate,它的 STUN 请求会返回 STUN 服务器看到的公网 IP。由于 HTTP 代理不转发 UDP,这个请求可以绕过代理、暴露底层连接。现代 Chrome 的 mDNS 混淆把本地 IP 藏在随机 .local 名后面,但不隐藏 STUN 得到的公网 IP——而后者才是真正要紧的那个。
DNS 泄露是解析路径上的同类问题。DNS 在操作系统层解析,常在路由之前,所以一个查询可能逃出隧道、抵达一个位置与出口 IP 矛盾的解析器。网站可以用一个唯一子域名检测这件事,看是哪个解析器真的来查了。
时区、语言与 HTTP 层
浏览器时区和语言来自操作系统,不来自网络。VPN 改了 IP 却不改这两者——于是一个美国 IP 配上 Asia/Shanghai 时区,八小时的缺口,就是个矛盾。值得注意的是,部分伪装(改对了时区却没改语言)看起来更像自动化在打补丁,而不像真人。
在 HTTP 层,浏览器按固定顺序发送请求头和 HTTP/2 伪头,顺序因浏览器而异(Chrome 是 m,a,s,p;Firefox 是 m,p,a,s),且不匹配任何通用库。缺了哪些 HTTP/2 SETTINGS 参数,本身也是指纹的一部分。
为什么 IP 干净还不够
现代反欺诈做的是跨层一致性检验,而不是查 IP 黑名单。一个干净的住宅 IP 毫无用处,只要 TLS 指纹是库的、HTTP/2 顺序不是所称浏览器的、时区差了八小时、或 WebRTC 与 DNS 漏出了另一个归属。任何一处矛盾就够了。
这是整个话题诚实的核心:IP 只是众多信号之一,再好的地址质量也补不了一叠不自洽的信号。这也是为什么我们卖的是一个地址,而不是对任何第三方平台上「结果」的承诺。
常见问题
什么是 TLS 指纹(JA3/JA4)?
对 TLS ClientHello 的哈希——它的版本、密码套件、扩展和曲线——由客户端的 TLS 库生成,与 User-Agent 无关。JA4 在哈希前排序,所以打乱顺序也规避不了。所称浏览器与指纹对不上,就暴露了自动化。
网站能在代理后面看到我的真实 IP 吗?
有时能,通过 WebRTC。它的 STUN 请求走 UDP,而 HTTP 代理不转发 UDP,所以可能返回你底层的公网 IP。现代浏览器用 mDNS 藏住本地 IP,但藏不住 STUN 得到的公网 IP。
为什么用了干净的住宅 IP 还是被判可疑?
因为检测是跨层一致性检验。如果 TLS 指纹、TCP/IP 栈、HTTP/2 顺序、时区、WebRTC 或 DNS 互相矛盾、或与所称浏览器矛盾,干净的 IP 也救不了——IP 只是众多信号之一。
什么是 DNS 泄露?
当 DNS 解析逃出隧道、抵达一个位置与你出口 IP 矛盾的解析器时。由于 DNS 在操作系统层、常在路由前解析,查询可能走了另一条路——网站可以通过看是哪个解析器来查一个唯一子域名来检测它。