Datacenter Proxy Detection: JA4, TLS, and What Gives You Away

Piotr Warząchowski1 min read
Table of Contents

Buying fresh IPs is no longer enough to bypass modern anti-bot systems. Cloudflare, Datadome, and Akamai now drop connections before reading your HTTP headers by analyzing the cryptographic handshake. We will explore how JA4 fingerprinting, TLS mismatches, and HTTP/2 anomalies expose datacenter proxies and how to structure a network stack that survives initial inspection.

The myth of the clean IP address

Most engineers assume that when a datacenter IP is blocked, it is because of the ASN. That is only partially true. While target sites do maintain blocklists for known server providers like AWS, DigitalOcean, and Hetzner, modern Web Application Firewalls (WAFs) rely heavily on network-layer behavioral analysis.

If you use a standard datacenter proxy network for public API scraping, you might never notice this. Low-security targets care primarily about request volume and rate limiting. However, high-security targets operate differently. They assume every incoming connection is hostile until proven otherwise. The most common reason why datacenter proxies get blocked today is a mismatch between the IP classification and the network fingerprint.

An IP from a known hosting provider establishing a connection with a pristine, consumer-grade Chrome TLS fingerprint is an immediate anomaly. Conversely, a clean residential IP establishing a connection using a default Python requests network fingerprint will also be flagged. The anti-bot system evaluates the entire stack as a single cohesive identity.

TLS Fingerprinting and the shift from JA3 to JA4

The TLS handshake happens before the target server ever sees your User-Agent header. During the ClientHello phase, your client tells the server which encryption standards it supports. Anti-bot systems use this initial exchange to generate a deterministic fingerprint.

For years, JA3 was the standard. It hashed the TLS version, accepted ciphers, extensions, elliptic curves, and curve formats. Today, JA4 is the modern replacement. JA4 breaks the fingerprint into a highly readable, structured string. A typical JA4 fingerprint looks like this: t13d1516h2_8daaf6152771_a56c5b993250.

  • Part A (t13d1516h2): Indicates TCP, TLS 1.3, ALPN used, 15 ciphers, 16 extensions, and HTTP/2 support.
  • Part B (8daaf6152771): A truncated SHA256 hash of the cipher suites sorted in hex order.
  • Part C (a56c5b993250): A truncated SHA256 hash of the extensions and signature algorithms.

This format tells the WAF exactly what network stack your client supports. If your Python script sends a JA4 fingerprint belonging to OpenSSL but your HTTP headers claim you are running Safari on macOS, the WAF terminates the connection with an HTTP 403 or a silent TCP reset. The server does not even bother parsing your cookies.

HTTP/2 pseudo-header ordering

Once the TLS handshake completes, the connection upgrades to HTTP/2 via Application-Layer Protocol Negotiation (ALPN). HTTP/2 introduced pseudo-headers to replace the traditional HTTP/1.1 request line. These include :method, :authority, :scheme, and :path.

Browsers send these pseudo-headers in a strict, specific order. Chrome always sends :method first. Firefox often orders them differently. Standard HTTP libraries often scramble this order entirely or send headers that the claimed browser would never send in that specific sequence.

Even if your JA4 fingerprint perfectly matches a standard Chrome browser, an invalid HTTP/2 header frame reveals your scraper. Advanced WAFs monitor stream concurrency. A real browser opens multiple concurrent HTTP/2 streams to fetch CSS, JavaScript, and images simultaneously. A standard scraper opens a single stream, fetches the raw HTML, and closes the connection. This lack of multiplexing is a highly reliable bot signal.

TCP window sizes and OS-level mismatches

The lowest layer of passive detection happens at the TCP level. Different operating systems manage TCP connections using distinct default parameters. Windows, Linux, and macOS have different default TCP window sizes, Maximum Segment Sizes (MSS), and Time-To-Live (TTL) values.

When you run a scraping script on a Linux server, the outgoing packets carry Linux-specific TCP signatures. If your scraper sets a User-Agent claiming to be an iPhone on iOS, an advanced WAF will notice the discrepancy. The TCP window size matches a Linux kernel default rather than iOS network parameters. This OS-level mismatch is an automatic failure on platforms like Datadome and Akamai.

Achieving a TLS fingerprinting bypass

Achieving a reliable TLS fingerprinting bypass requires modifying the network stack at the source. Standard libraries cannot do this natively. You must use specialized tools designed for network impersonation.

For Python and shell scripts, curl-impersonate replaces the default OpenSSL backend with a modified version of NSS or BoringSSL. This allows you to spoof the exact ClientHello packet of a specific Chrome, Edge, or Safari version. For Go developers, the uTLS library offers similar functionality. It intercepts the standard Go crypto/tls package and allows you to mimic various browser fingerprints dynamically.

When testing these bypass methods, we recommend using dedicated datacenter IPs to ensure that external noise from shared users does not pollute your testing environment. A dedicated IP allows you to isolate variables. If a request fails, you know the issue lies within your TLS or HTTP/2 framing, not the IP reputation.

When network spoofing hits the ASN wall

Sometimes perfect network spoofing is not enough. High-security targets like e-commerce checkout flows, sneaker releases, or social media logins block known datacenter ASNs entirely. They do not care how clean the network fingerprint looks. If the IP belongs to a cloud provider, the traffic is dropped.

This is when you must shift your infrastructure. Routing your spoofed requests through real residential IP addresses masks the datacenter origin. When a residential ASN is combined with a perfectly impersonated Chrome JA4 fingerprint and correct HTTP/2 pseudo-headers, the WAF sees a standard home user.

This combination is the current gold standard for web data extraction at scale. The residential network provides the necessary IP trust score, while your spoofed network stack prevents the anti-bot system from detecting the automated nature of the request.

Where to go from here

Network-level detection is the new baseline for web security. Modern scraping infrastructure must manage TLS handshakes, HTTP/2 framing, OS-level TCP signatures, and IP reputation simultaneously. Focusing purely on rotating IPs while ignoring the cryptographic handshake is a guaranteed path to blocklists.

Your engineering team must align the entire request stack. The JA4 fingerprint must match the ALPN negotiation. The HTTP/2 pseudo-headers must match the browser dictated by the JA4 hash. Finally, the User-Agent must reflect the same browser, and the IP address must carry enough trust to satisfy the target WAF.

Need help sizing the right proxy stack for your use case? Talk to our team.

CUSTOM PROXY SOLUTIONS

Need proxies tailored to your use case?

Our team designs custom proxy infrastructure for B2B data teams scraping at scale. Residential, datacenter, ISP, and mobile pools with SLA, GDPR-ready sourcing, and dedicated account management.
CUSTOM PROXY SOLUTIONS

Need proxies tailored to your use case?

Our team designs custom proxy infrastructure for B2B data teams scraping at scale. Residential, datacenter, ISP, and mobile pools with SLA, GDPR-ready sourcing, and dedicated account management.
;