Lazy loaded image
网络指纹篇:TLS指纹、HTTP2指纹、IP信誉与代理检测
Words 2339Read Time 6 min
2026-7-7
2026-7-7
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底层是 urllib3pyOpenSSL或系统 ssl,发出的 ClientHello 里:
  • cipher suites 顺序是 pyOpenSSL 编译时定的
  • extensions 里没有浏览器的 server_name(sni) 之外的那些(比如 application_layer_protocol_negotiation只有 h2/http1.1 两个,顺序也和 Chrome 不同)
  • supported_groups顺序是 OpenSSL 默认值
JA3 一算,和任何浏览器都对不上。
解法有三个层级
方案
成本
效果
curl_cffirequests风格,底层 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/v1https://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,两条路:
  1. 住宅代理服务: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-stealthundetected-playwright。单纯 disable-blink-features=AutomationControlled只能骗过浅层检测。

五、实战检查清单

注册/登录前,对着这张表自查:
任何一个对不上,都是风控的"加权项",攒多了就 403。

六、方案选型速查

场景
推荐方案
轻量爬虫,要过 JA3
curl_cffi+ 住宅代理
登录后爬数据
Playwright + stealth + 住宅代理
批量注册账号
真 4G + 真浏览器 + 人工流程(或 RPA 化)
只想测指纹
访问 tls.browserleaks.com+ http2.pro

上一篇
Frida学习笔记(五):Java 层 API 全解
下一篇
Frida学习笔记(四):Hook 进阶 · 构造、内部类、字段、对象搜索

Comments
Loading...