Skip to main content

Voidly Community Probe

PyPI Python 3.8+ License: MIT Docker

Help measure internet censorship worldwide. Run a lightweight probe node from anywhere.

What it does

Tests connectivity to 62 websites (social media, news, messaging, privacy tools, human rights organizations) every 15 minutes from your network. Detects:

  • DNS blocking — NXDOMAIN, DNS poisoning (compared against Cloudflare DoH)
  • TCP resets — connection reset by peer
  • TLS/SNI filtering — Server Name Indication based blocking
  • HTTP redirects — government/ISP redirect to block pages
  • Block page fingerprinting — identifies 13 known blocking entities

Results feed into Voidly's censorship intelligence network — a real-time global censorship dataset used by researchers, journalists, and developers.

Install

pip install voidly-probe

Tip: If voidly-probe is not recognized after install, use python -m voidly_probe instead.

Requirements: Python 3.8+ · No external dependencies (stdlib only) · No root required · No VPN

Quick start

# First run — review consent and register
voidly-probe --consent
# Alternative: python -m voidly_probe --consent

# Run continuously (default: every 15 minutes)
voidly-probe

# Single test cycle then exit
voidly-probe --once

# Check your node's status
voidly-probe --status

# Custom interval (minimum 300s / 5 min)
voidly-probe --interval 600

# Run in background (Linux/Mac)
nohup voidly-probe --consent &

# Stop contributing and remove config
voidly-probe --unregister

Docker

# Run in background with persistent config
docker run -d --name voidly-probe \
  -v voidly-data:/data/.voidly \
  emperormew2/voidly-probe:latest

# View logs
docker logs -f voidly-probe

# Check node status
docker exec voidly-probe voidly-probe --status

# Find your Node ID (for claiming)
docker exec voidly-probe cat /data/.voidly/node.json

# Stop
docker stop voidly-probe

The Docker image auto-consents and starts probing immediately. Config persists across restarts via the volume mount.

Claim your node

After your node is running, link your identity to appear on the leaderboard and be eligible for prizes:

  1. Find your Node ID and Token: cat ~/.voidly/node.json
  2. Visit voidly.ai/probes/claim
  3. Enter your Node ID, Token, and Twitter/X handle
  4. Your name appears on the leaderboard instead of cp-xxxxxxxx

Important: Back up ~/.voidly/node.json — your token is shown once during registration and cannot be recovered. If you lose it, you'll need to re-register as a new node.

How it works

┌─────────────┐     ┌──────────────┐     ┌─────────────────┐
│  Your Node   │────▶│  api.voidly.ai │────▶│  Voidly Dataset  │
│  (probe)     │     │  (HMAC auth)   │     │  (CC BY 4.0)     │
└─────────────┘     └──────────────┘     └─────────────────┘
     │                                           │
     │  Tests 80 domains:                        │  Powers:
     │  DNS · HTTP · TLS · SNI                   │  voidly.ai/probes
     │  every 15 min                             │  Censorship Index
     │                                           │  MCP Server
     └───────────────────────────────────────────┘

Each probe cycle:

  1. DNS resolution — checks if the domain resolves, compares against DoH
  2. HTTP/HTTPS request — tests connectivity, checks for redirects
  3. Block page detection — fingerprints known government/ISP block pages
  4. TLS/SNI probing — tests for SNI-based filtering
  5. Certificate fingerprinting — detects MITM certificate injection
  6. Results signed with HMAC-SHA256 and reported to the API

Failed submissions are cached locally and retried next cycle — no data loss even with spotty connectivity.

Configuration

Environment variables:

Variable Default Description
VOIDLY_PROBE_INTERVAL 900 Seconds between probe cycles
VOIDLY_PROBE_TIMEOUT 10 Timeout per request (seconds)
VOIDLY_BATCH_SIZE 20 Domains per cycle
VOIDLY_CONFIG_DIR ~/.voidly Config directory
VOIDLY_API_URL https://api.voidly.ai API endpoint (for development)

Privacy

What we collect

  • Domain, blocked/accessible status, latency, blocking method
  • Your approximate location (country, city) — detected once during registration
  • SHA256 hash of your IP (for deduplication — raw IP never stored)

What we don't collect

  • No browsing data
  • No passwords or personal information
  • No traffic inspection beyond the 62 test domains
  • Your raw IP address is never stored

Your rights

  • Stop the probe at any time with Ctrl+C
  • Run voidly-probe --unregister to remove your config
  • Data is used for censorship research under CC BY 4.0
  • Learn more: voidly.ai/probes

Contributing

Found a bug? Have a suggestion? Open an issue.

License

MITvoidly.ai

Release files for voidly-probe 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for voidly-probe 1.1.0
File Size Uploaded
voidly_probe-1.1.0.tar.gz 17.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for voidly-probe 1.1.0
File Interpreter ABI Platform
voidly_probe-1.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 35.1 kB

Release files / voidly_probe-1.1.0.tar.gz

Download URL voidly_probe-1.1.0.tar.gz
Size 17.3 kB
Tags Source
SHA-256 checksum
How to use checksums
c37ee875db9c7fda6ac17cc6e2ddf894a68c1318c806535835109838b393a0ea
BLAKE2b-256 checksum
How to use checksums
1dde5620e7360c6c1e9c28f5368dcb197b5d0ee69651ff532f8217b4a0753f34
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.1

Release files / voidly_probe-1.1.0-py3-none-any.whl

Download URL voidly_probe-1.1.0-py3-none-any.whl
Size 17.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a848f6190d5542e21431c1c2d6fb20c35b85be826db29cf4c77f50fc21db3b22
BLAKE2b-256 checksum
How to use checksums
a68ca1abe2344793bd590a2382d9d871ba4fe89b60bfc459cf51886342d76aaa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.1

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 release files

1.0.13

2 release files

1.0.12

2 release files

1.0.11

2 release files

1.0.10

1 release file

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page