type
Post
status
Published
date
Jul 7, 2026
slug
summary
很多人以为挂个代理、改个 User-Agent 就能瞒天过海,结果请求刚发出去就被 403。原因很简单:你用的
requests/ aiohttp默认发出的 TLS ClientHello 和 HTTP2 SETTINGS 帧,在风控系统眼里就像把"我是机器人"写在脑门上。
这一篇拆开讲四件事:TLS 指纹(JA3/JA4)、HTTP2 指纹(Akamai)、IP 信誉体系、代理检测逻辑。代码给的都是有明确依赖、能直接跑的,不整花活。tags
TLS
HTTP2
IP信誉
抓包
category
公众号
icon
password
上次编辑时间
Jul 7, 2026 07:23 AM
comment
AI 总结
账号信息再完美,网络层一握手就露馅。现代风控的第一道关卡不在应用层,而在 TCP/TLS/HTTP2 的握手包里。
很多人以为挂个代理、改个 User-Agent 就能瞒天过海,结果请求刚发出去就被 403。原因很简单:你用的
requests/ aiohttp默认发出的 TLS ClientHello 和 HTTP2 SETTINGS 帧,在风控系统眼里就像把"我是机器人"写在脑门上。这一篇拆开讲四件事:TLS 指纹(JA3/JA4)、HTTP2 指纹(Akamai)、IP 信誉体系、代理检测逻辑。代码给的都是有明确依赖、能直接跑的,不整花活。
一、TLS 指纹:JA3 与 JA3S
1.1 原理一句话
TLS ClientHello 里有几个字段是客户端实现决定的、相对固定的:
- TLS 版本
- 支持的加密套件(cipher suites)顺序
- 扩展列表(extensions)种类和顺序
- 椭圆曲线(supported_groups)顺序
- 椭圆曲线点格式(ec_point_formats)
把这 5 项按规则拼成字符串,取 MD5,就是 JA3(后来演进到 JA3S 看 ServerHello,JA4 拆得更细)。
不同客户端的 JA3 是稳定的:
客户端 | JA3 特征 |
Chrome 120 (Win) | 固定一套 cipher+extension 顺序 |
Firefox 121 | 另一套 |
Python requests(urllib3) | 默认 OpenSSL,和浏览器不一样 |
Go net/http | 又一套 |
Java HttpClient | 又又一套 |
风控拿到你第一个 TLS 握手包,算一下 JA3,就知道你是不是"挂着 Chrome UA 但实际是 Python 脚本"。
1.2 抓一个真实的 ClientHello 算 JA3
下面这段用
scapy抓本地发出的 TLS ClientHello 来算 JA3,纯演示原理,不用它去对抗,只是让你知道 JA3 长啥样:想认真看自己流量的 JA3,两个办法:
- 服务器端:用
sslh/zeek/suricata都能吐 JA3
- 本机:用
tshark -Y "tls.handshake.type == 1" -T fields -e tls.handshake.ciphersuite -e tls.handshake.extension.type
1.3 Python 脚本的 TLS 指纹为什么一眼假
requests底层是 urllib3→ pyOpenSSL或系统 ssl,发出的 ClientHello 里:- cipher suites 顺序是 pyOpenSSL 编译时定的
- extensions 里没有浏览器的
server_name(sni) 之外的那些(比如application_layer_protocol_negotiation只有 h2/http1.1 两个,顺序也和 Chrome 不同)
supported_groups顺序是 OpenSSL 默认值
JA3 一算,和任何浏览器都对不上。
解法有三个层级:
方案 | 成本 | 效果 |
curl_cffi(requests风格,底层 rustls/boringssl 模拟浏览器 TLS) | 低 | ✅ 够用 |
tls-client(Go 库,多语言绑定,专门做 JA3/JA4 伪装) | 中 | ✅✅ 很稳 |
真浏览器(Playwright / Selenium / 无头 Chrome) | 高 | ✅✅✅ 最稳 |
用 curl_cffi模拟 Chrome TLS(推荐,代码能直接跑)
curl_cffi的作者把 Chrome/Firefox/Safari 各版本的 ClientHello 字节级抄了一遍,连 cipher 顺序、extension 顺序、ALPN、GREASE 值都对齐了,是目前 Python 生态里最省事的方案。二、HTTP2 指纹:Akamai 那一堆 SETTINGS
2.1 原理
TLS 之后如果是
h2,客户端会先发一个 SETTINGS 帧,里面有一组键值对。顺序 + 值,构成 Akamai HTTP2 指纹。浏览器(Chrome)典型的 SETTINGS 帧(顺序敏感):
requests/ httpx/ aiohttp走 HTTP2 时,SETTINGS 帧是各自库里硬编码的,和 Chrome 对不上。风控(尤其 Akamai、Cloudflare)会同时看:
- JA3(TLS 层)
- HTTP2 SETTINGS 顺序 + 值
- 紧接着的 WINDOW_UPDATE、PRIORITY 帧
三者对不上 → 机器人嫌疑。
2.2 看看你当前工具发的 HTTP2 指纹
更直接的办法:访问
https://http2.pro/api/v1或 https://tls.browserleaks.com/json,会回显你的 HTTP2 指纹。2.3 对齐 HTTP2 指纹
方案 A:
curl_cffi已经帮你对齐了(上面那段代码,impersonate="chrome120"同时管 TLS + HTTP2)方案 B:用
httpx+ 自定义 h2配置(麻烦,不推荐,不如直接用 curl_cffi)方案 C:真浏览器,Playwright 默认就是真 Chrome 的 HTTP2 栈,不用管。
三、IP 信誉:数据中心 IP 一秒露馅
3.1 IP 的三六九等
风控给 IP 打分,大致这样排:
IP 类型 | 信誉 | 说明 |
住宅 ISP(Comcast/电信/联通) | ⭐⭐⭐⭐⭐ | 最稳 |
移动 4G/5G | ⭐⭐⭐⭐⭐ | 略好于住宅,批量注册场景反而容易触发 |
数据中心(AWS/GCP/Azure/阿里云) | ⭐⭐ | 新号注册一碰就 403 |
机房裸机(Hetzner/OVH) | ⭐⭐ | 稍好一点但还是机房段 |
VPN 出口(Nord/Express) | ⭐ | 黑名单里躺平 |
公开代理(free proxy 列表) | 💀 | 别用 |
3.2 怎么查 IP 信誉
程序里可以这样判断:
3.3 住宅代理 vs 4G 代理
想拿住宅 IP,两条路:
- 住宅代理服务:Bright Data(原 Luminati)、Oxylabs、SmartProxy
- 优点:IP 池大、稳定
- 缺点:贵,知名服务商出口段本身也被一些平台标记了
- 用法:HTTP 代理穿过去就行
2. 4G 代理 / 拨号 VPS:自己插 SIM 卡或者买现成的
四、代理检测:你怎么挂代理,风控怎么拆
4.1 常见的露馅点
就算 IP 是住宅的,下面这些地方还能翻车:
① DNS 泄露
浏览器用代理走 HTTP,但 DNS 查询还是本地 ISP 发的 → 本地是北京联通,代理是洛杉矶住宅,DNS 是
bj-unicom-dns→ 怀疑。② WebRTC 泄露
浏览器里
RTCPeerConnection能拿到本地内网 IP,甚至公网 IP(如果没走代理的 UDP)。进 chrome://webrtc-internals能看到。③ TCP 时间戳 / 窗口缩放
不同 OS 的 TCP 栈参数不一样,有些风控会顺手看(这个偏进阶,JA3 都比它实用)。
④ 代理协议特征
- HTTP 代理:CONNECT 隧道有特征
- SOCKS5:握手包有特征
- MITM 类(如 Charles/Fiddler):CA 证书如果被标记为知名拦截工具,直接露
4.2 用 Playwright 时的防泄露基础配置
⚠️ Playwright 默认还是能被
navigator.webdriver检测到,生产要用 playwright-stealth或 undetected-playwright。单纯 disable-blink-features=AutomationControlled只能骗过浅层检测。
五、实战检查清单
注册/登录前,对着这张表自查:
任何一个对不上,都是风控的"加权项",攒多了就 403。
六、方案选型速查
场景 | 推荐方案 |
轻量爬虫,要过 JA3 | curl_cffi+ 住宅代理 |
登录后爬数据 | Playwright + stealth + 住宅代理 |
批量注册账号 | 真 4G + 真浏览器 + 人工流程(或 RPA 化) |
只想测指纹 | 访问 tls.browserleaks.com+ http2.pro |
- Author:24th
- URL:https://24th.top/article/396e5b08-46db-80fb-a47b-f8584dda6add
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!







