voidly
Blocking-method taxonomy

How governments block the internet

By Voidly ResearchPublished CC BY 4.0

8 techniques, ordered by depth in the network stack from DNS lookups all the way down to BGP. Each entry walks you through what the censor does, what evidence we use to detect it, and links to incidents in the Voidly corpus that demonstrate the technique in the wild.

01

DNS poisoning

Network layer (L3/DNS)signal_type: dns-poisoning

The simplest, oldest, most-bypassed technique: when the user resolves a blocked domain, the ISP returns a fake IP (often a blockpage server or 0.0.0.0).

How it works

When a device queries an ISP DNS resolver for a blocked domain, the resolver returns a manipulated answer — either pointing the user at a censorship notice page, a black hole IP, or no answer at all. Trivially circumvented with DoH/DoT, but still the default in many countries because it works on every device with zero config and requires no DPI.

Detection signal

We compare DNS answers from inside-country probe nodes against a clean control resolver. Disagreement on the A/AAAA record for known-controversial domains = dns-poisoning. CensoredPlanet Satellite contributes the largest share of this signal.

02

SNI blocking

Transport layer (L4/TLS)signal_type: sni-blocking

The Server Name Indication (SNI) header is sent in the TLS ClientHello in plaintext. Censors inspect it and drop the connection mid-handshake when it matches a blocked hostname.

How it works

In a normal HTTPS connection, the client tells the server which hostname it wants via SNI before the encrypted tunnel is established. Censoring middleboxes read this field and inject a TCP RST or drop the packet if the SNI matches a blocklist. Encrypted Client Hello (ECH) defeats this, but adoption is still low.

Detection signal

Failed TLS handshake (no cert delivered) for blocked hostname BUT successful TLS to control hostname on same IP. We also fingerprint the cert when one IS delivered — multiple probes seeing the same anomalous fingerprint is strong evidence.

03

TCP RESET injection

Transport layer (L4/TLS)signal_type: tcp-reset

Active middlebox monitors traffic. When a banned pattern is detected, it injects forged TCP RST packets, terminating the connection from both ends.

How it works

The Great Firewall pioneered this in the early 2000s. A passive tap mirrors all traffic to an inspection engine. When a forbidden keyword, hostname, or TLS fingerprint matches, the engine fires off TCP RST packets to both endpoints with spoofed source addresses. The client and server both see what looks like a normal connection termination.

Detection signal

Connections that succeed initially then die at suspicious wall-clock times (during ClientHello, mid-stream after a specific byte sequence). Statistical: RST counts to certain destinations 1000× higher than control.

04

HTTP filtering / blockpage injection

Application layer (L7/HTTP)signal_type: http-blocking

When a domain isn't fully HTTPS, the censor can inject a blockpage HTML response instead of forwarding the request — or return a 4xx/5xx status code.

How it works

For plain HTTP traffic (or sites still serving some content over HTTP), middleboxes can rewrite the response inline. The user sees a government "this site is restricted under article X" notice instead of the real content. The blockpage HTML often gets fingerprinted across ISPs in the same country — same wording, same logo.

Detection signal

HTTP response with status 200 or 451 containing blockpage signatures (logos, specific text). Compared against control fetches that succeed normally.

05

ASN-level outage / kill switch

Infrastructure (routing)signal_type: outage

The nuclear option: an ISP or government withdraws BGP routes for entire AS numbers, taking large chunks of users offline. Often happens during elections, protests, or unrest.

How it works

An ISP stops announcing its IP prefixes to the global BGP table. Every router in the world stops knowing how to reach those addresses. Users in that ASN see "no internet" — not "Twitter is slow", just nothing.

Detection signal

CAIDA IODA aggregates ~6 independent signals (BGP, active probing, DNS query rates, dark-net traffic) into a single "is this ASN online" score. We ingest IODA every 6h and create an incident when score drops below threshold.

06

Middlebox detection

Infrastructure (routing)signal_type: middlebox-detection

Even when a connection succeeds, the path may be running through a deep-packet-inspection middlebox that fingerprints traffic for later action.

How it works

OONI ships specially-crafted invalid HTTP requests (`http_invalid_request_line` test) that no real server would respond to. A reply to these — usually from a transparent proxy or inline DPI box — proves a middlebox is present on the path.

Detection signal

OONI http_invalid_request_line + http_header_field_manipulation. Reply where there should be none = middlebox.

07

Tor blocking

Application layer (L7/HTTP)signal_type: tor-blocking

Tor directory authorities and known relay IPs are commonly blocked. Bridges (unlisted entry points) are the standard countermeasure — and themselves get hunted.

How it works

The Tor network publishes its directory authorities. Censors fetch the list daily and add all relay IPs to blocklists. Pluggable transports (obfs4, snowflake, meek) disguise Tor traffic as something else.

Detection signal

OONI tor test connects to known Tor directory authorities + a sample of relays. Failure to reach = blocked.

08

HTTP header manipulation

Application layer (L7/HTTP)signal_type: header-manipulation

Middleboxes rewrite, strip, or inject HTTP headers — sometimes for tracking, sometimes to disable circumvention features.

How it works

A passive middlebox modifies headers in flight. Common patterns: strip security headers (HSTS, CSP), inject tracking headers, downgrade upgrade-to-HTTPS hints, or block specific User-Agent strings.

Detection signal

OONI http_header_field_manipulation sends known header patterns and checks what arrives at the test server. Difference = manipulation.

Going deeper

  • /atlas — live hub with world heatmap + recent incidents
  • /atlas/recent-changes — daily journalist dashboard: 24h/7d deltas
  • /atlas/elections — 90-day election shutdown-risk forecast
  • /atlas/findings — curated editorial deep-dives with researcher bylines
  • /methodology — full pipeline + 3 honest accuracy splits + live calibration
  • /data — raw Parquet / JSONL / CSV downloads under CC BY 4.0
  • RSS feed — real-time stream of new incidents

All examples are real incidents from the Voidly Atlas corpus. IDs in the format CC-YYYY-NNNN resolve to citable evidence-backed reports at /incident/CC-YYYY-NNNN. License: CC BY 4.0.