Skip to main content

CLI to print the JA3/TLS fingerprint your HTTP client or proxy sends, with a browser-vs-bot verdict and exit-IP ASN.

Project description

ja3-fingerprint-checker

PyPI version Python versions License: MIT

A one-command CLI that prints the JA3 / TLS fingerprint your HTTP client — or your proxy — sends, tells you whether it looks like a real browser or an automation library, and shows the ASN/geo of the exit IP. See what Cloudflare, DataDome, and PerimeterX see before your request reaches the page.

pip install ja3-fingerprint-checker

Usage

ja3check
Verdict: Automation / library fingerprint
  detected client : Python

JA3 hash: 375c6162a492dfbf2795909110ce8424
JA3: 771,4865-4866-4867-...,43-51-...,29-23-24,0
  ALPN: h2, http/1.1   GREASE: False   extensions: 7

Exit IP: 203.0.113.7  AS15169 Example Cloud  (Germany)
  flags: datacenter

Why this can get flagged:
  - No GREASE values — real Chrome/Firefox/Edge always inject GREASE; their absence is a strong bot signal
  - Only 7 TLS extensions — browsers send ~15+; a short list looks like a raw TLS stack
  - Missing Accept-Language — browsers always send it; many scrapers omit it

Check the fingerprint through your proxy

The useful part: see what JA3 + exit IP your scraper actually presents when routed through a proxy.

ja3check --proxy http://USERNAME:PASSWORD@us.jibaoproxy.com:913

Other options

ja3check --json                       # raw JSON, for scripts/CI
ja3check --user-agent "Mozilla/5.0 …" # spoof a UA and see if it still looks like a bot
ja3check --url https://your-echo/     # point at a different JA3 echo endpoint

Use it in --json mode to fail CI if your scraper's fingerprint regresses to "bot".

Why JA3 matters

Your TLS ClientHello (cipher suites, extensions, curves) is hashed into a JA3 fingerprint that's stable per client library. A datacenter IP plus a python/curl/okhttp JA3 gets scored as a bot at the handshake — long before any header or JavaScript check. Rotating IPs doesn't fix a fingerprint that screams "library." You need an exit whose ASN looks residential and a TLS fingerprint that matches a real browser.

This CLI talks to the JiBao Proxy JA3 tool by default (--url to change it). We build JiBao Proxy for clean residential exits — 72M+ IPs across 200+ countries. The CLI works against any compatible echo endpoint, though.

Related

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ja3_fingerprint_checker-0.1.0.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ja3_fingerprint_checker-0.1.0-py3-none-any.whl (6.0 kB view details)

Uploaded Python 3

File details

Details for the file ja3_fingerprint_checker-0.1.0.tar.gz.

File metadata

  • Download URL: ja3_fingerprint_checker-0.1.0.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for ja3_fingerprint_checker-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c7a8ae22b4277ac329a52262b433059e1f2a430620e35035169efe533f3f642c
MD5 424f12de407607563efe5c778652c510
BLAKE2b-256 b54932311cf3d6651e7e240a2e92094214c4567b1c3d6251199e1e4d07f916ef

See more details on using hashes here.

File details

Details for the file ja3_fingerprint_checker-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for ja3_fingerprint_checker-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5269d0862132438dc19c866f201d5b82cee37080175fef37a0339e53a1dec34f
MD5 75c975d7aa6c1b03c447ef07dc6a6fef
BLAKE2b-256 4553bc357425bd6258de461b86960b45b37bcc88deb12e3402ef9584e7bcf9c1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page