Nagpapadala ang iyong scraper ng perpektong Chrome headers, tumatakbo sa likod ng malinis na residential IP, at nakakakuha pa rin ng 403 sa pinakaunang request. Walang captcha, walang challenge page, walang lulutasin. Natukoy ka ng site bago pa man napalitan ang isang byte ng HTTP — habang nasa TLS handshake.
Ipinapaliwanag ng artikulong ito kung paano talaga gumagana ang JA3 at JA4 fingerprinting, kung bakit sila ang tahimik na workhorse ng bawat malaking anti-bot system sa 2026, at paano makita ang sarili mong fingerprint sa loob ng sampung segundo. Kung gusto mo muna ang bypass tooling, sinaklaw namin iyon sa Bypass TLS Fingerprinting with curl_cffi & tls-client — ito ang kasamang piyesa kung paano gumagana ang detection side.
Bago ang teorya, tingnan ang sarili mong handshake. Buksan ang aming libreng JA3/JA4 checker — ini-echo nito pabalik ang TLS fingerprint na kapapakita lang ng iyong client at sinasabi sa iyo kung ano ang tumutugma nito:
# From a terminal - see what curl's TLS looks like:
curl https://www.jibaoproxy.com/tools/fingerprint.html
# Then open the same URL in Chrome and compare.
Patakbuhin ang dalawa at makikita mo ang punto ng buong artikulong ito: gumagawa ang curl at Chrome ng ganap na magkaibang fingerprint, anuman ang User-Agent header na itakda mo.
Bawat HTTPS connection ay nagsisimula sa isang ClientHello message, na ipinapadala sa cleartext bago magsimula ang anumang encryption. Dito, ipinapahayag ng iyong client:
Heto ang detection insight: ang mga listahang ito at ang kanilang eksaktong pagkakasunod-sunod ay nakatanim sa TLS library na pinag-compile-an ng iyong client. Inihahayag ng BoringSSL ng Chrome ang isang partikular na kombinasyon. Inihahayag ng OpenSSL ng Python ang ibang isa. Ang crypto/tls ng Go ang pangatlo. Hindi mo ito mababago gamit ang headers — ninenegosasyon ito sa ilalim ng HTTP layer, ng library mismo.
Pinagdurugtong ng JA3 (Salesforce, 2017) ang limang ClientHello field — TLS version, ciphers, extensions, curves, point formats — sa isang string at ini-MD5-hash ito:
771,4865-4866-4867-49195-49199,0-23-65281-10-11-35-16,29-23-24,0
|
v MD5
cd08e31494f9531f560d64c695473da9
Isang hash kada TLS stack. Bawat kopya ng Chrome 137 sa Windows ay gumagawa ng (halos) parehong JA3; bawat python-requests sa OpenSSL 3.x ay gumagawa ng parehong ibang JA3. Nagpapanatili ang mga defender ng lookup table: hash X = Chrome, hash Y = requests, hash Z = Go bot. Kung sinasabi ng iyong User-Agent na Chrome pero sinasabi ng iyong JA3 na OpenSSL, na-block ka — agad, tahimik, mura.
May mga problema ang JA3: nagsimulang i-randomize ng Chrome ang extension order noong 2023 (sinisira ang naive JA3), at hindi nakaayos ang MD5 — walang sinasabi sa iyo ang isang hash tungkol sa bakit magkaiba ang dalawang client. Inayos ng JA4 (FoxIO, 2023) ang pareho at ito ang pinapatakbo ng mga seryosong vendor ngayon:
JA4 = t13d1516h2_8daaf6152771_b0da82dd1658
| | |
a: protocol b: ciphers c: extensions
(TLS 1.3, 16 ciphers, (sorted, truncated
h2 ALPN, domain SNI) SHA256)
Bawat system na mahalaga: inilalantad ng Cloudflare ang JA3/JA4 nang direkta sa mga bot-management rule nito; pinapakain ito ng DataDome at PerimeterX sa kanilang network-layer scoring (tingnan ang aming DataDome/PerimeterX guide); pinakamatagal nang nagpapatakbo ang Akamai ng TLS fingerprinting kaysa kaninuman. Sikat ito dahil libreng kalkulahin, imposibleng pekein mula sa HTTP layer, at nahuhuli ang 90% ng naive automation — bawat requests/httpx/axios/Go-http script na nasulat na — bago kailanganing tumakbo ang anumang JavaScript.
Nakakagulat ito sa mga tao: binabago ng proxy ang iyong IP, pero dumadaan ang iyong TLS handshake nang hindi nagbabago. Dinadala ng CONNECT tunnel (o SOCKS5 stream) ang iyong ClientHello bytes nang verbatim sa target. Residential IP + requests-library JA3 = "isang bot na tumatakbo sa residential IP." Mas maganda kaysa sa datacenter IP, isa pa ring bot.
Ang IP at ang TLS fingerprint ay magkahiwalay na signal at kailangan mong malinis ang pareho:
| IP | TLS fingerprint | Hatol sa 2026 |
|---|---|---|
| Datacenter | Library (requests/Go) | Naka-block saanman na may pakialam |
| Residential | Library | Naka-block sa mga JA4-checking site |
| Datacenter | Browser-impersonated | Naka-block dahil sa IP reputation |
| Residential | Browser-impersonated | Pumapasa sa network-layer checks |
Dalawang landas, ayon sa tooling:
HTTP clients — gumamit ng impersonation library na muling nag-implement ng eksaktong ClientHello ng browser: curl_cffi (Python), tls-client (Python/Go), got-scraping (Node). Buong gumaganang code sa the curl_cffi guide:
from curl_cffi import requests
r = requests.get(
"https://target.example",
impersonate="chrome",
proxies={"https": "socks5h://USERNAME:[email protected]:913"},
)
Mga totoong browser (Playwright, browser agents, anti-detect browsers) — walang gagawin sa TLS layer; tunay na sa Chrome ang fingerprint. Nasa ibang lugar ang iyong panganib: IP reputation at CDP detection.
Pagkatapos, i-verify, huwag ipagpalagay. Naglalayo ang mga bersyon — ang impersonation library na naka-pin sa handshake ng Chrome 120 ay nababasa bilang "kahina-hinalang lumang browser" sa 2026. I-test muli pagkatapos ng bawat dependency update:
Ipares ang iyong impersonated TLS sa residential IPs — 500MB free traffic, walang card na kailangan.
Start Free TrialAng mga bagong user ay makakatanggap ng 500MB sa pagrehistro, kasama ang bonus sa unang recharge. Limitadong oras lang ang alok.