Skip to main content

🛰️ DNS Tunneling Messenger

DNS Tunneling Messenger

Smuggle messages inside DNS queries.

Python License PyPI Platform

"He isn't browsing. He's talking."


What is it?

DNS is the one protocol that is always allowed out. Firewalls may block everything else, but something has to resolve names — and that something can carry cargo. DNS Tunneling Messenger encodes a message in base32, slices it into DNS-label-sized chunks, and ships it as subdomains of a zone you control. A listener parses the query names on the other end and reassembles the message.

The protocol itself is boring, standard DNS. The payload is in the names.

Features

  • ✉️ Encode any text into a valid dotted DNS name
  • 📡 Ship it as a real UDP DNS query (send)
  • 👂 Decode it live from the wire (listen)
  • 🧩 Handles long messages (automatic 63-char label slicing)
  • 📦 Zero dependencies — pure Python standard library

v0.2.0 — protocol hardening & operations toolkit

  • 🚦 Traffic shaping (shaping) — beacon scheduling with jitter profiles (constant / uniform / poisson / bursty), token-bucket rate limiting, and adaptive pacing that backs off on RCODE_REFUSED/SERVFAIL and cautiously recovers on success.
  • 🧱 Fragmentation strategies (fragmentation) — fixed-size, label-budget-aware (stay under a fraction of the 253-octet name limit), and priority-queue chunking (control frames first), behind a pluggable strategy registry.
  • 💾 Session persistence (persistence) — save/resume client state (pending messages, acked seqs, counters) to versioned, fingerprint-checked JSON so a restart resumes instead of retransmitting.
  • 🛡️ Replay protection (replay) — bounded TTL nonce ledger, timestamp-window validation, and a challenge-response handshake riding the existing frame format.
  • 📈 Benchmarks (bench) — deterministic codec/name/chunker throughput benchmarks plus per-codec capacity planning and zone-length sweeps.
  • 🎲 Fuzz suite — seeded random payloads shaken through every layer (codecs, frames, chunking, crypto, packet parser) asserting roundtrip integrity and typed errors, never crashes.

Install

pip install dns-tunnel-messenger

From source:

git clone https://github.com/AnonymoDGH/dns-tunnel-messenger
cd dns-tunnel-messenger
pip install -e .

Quickstart — lab test on loopback

Terminal A (the listener):

dns-tunnel listen --port 5353 --zone t.example.com
# [+] Listening on udp://0.0.0.0:5353 for zone t.example.com

Terminal B (the courier):

dns-tunnel send "meet at dawn, bring the book" \
    --zone t.example.com --server 127.0.0.1 --port 5353

Terminal A prints:

  [*] 127.0.0.1 -> meet at dawn, bring the book

CLI reference

Command What it does
dns-tunnel send <msg> --zone <z> [--server] [--port] Ship a message as a DNS query
dns-tunnel listen [--port] [--zone] Decode incoming queries live
dns-tunnel encode <msg> --zone <z> Print the encoded dotted name
dns-tunnel decode --name <n> [--zone <z>] Decode a name back to text
dns-tunnel bench {codec,name,chunker,capacity,all} [--json] CPU benchmarks & capacity
dns-tunnel capacity [--zone <z>] [--sweep] [--json] Per-codec throughput table
dns-tunnel shape-plan <frames> [--profile <p>] [--rate-limit <qps>] Print a shaped send timetable
dns-tunnel session-save <file> --zone <z> Save a client session state file
dns-tunnel session-load <file> [--json] Load & verify a session state file

Shaping a transmission

dns-tunnel shape-plan 20 --profile bursty --interval 1.0 --rate-limit 5 --verbose
# profile=bursty interval=1.0s frames=20
# total=...s effective=... qps  [rate-limited]

Capacity planning

dns-tunnel capacity --zone t.example.com
#   base32       140 B/name      1400.0 B/s
#   base64url    170 B/name      1700.0 B/s
#   hex          111 B/name      1110.0 B/s

How it works

Architecture

Tests

pip install pytest
pytest

Includes an end-to-end test that ships a real message over loopback UDP.

License

MIT — a fiction research prop. Point it at zones you control and keep the novel's intrigue on the page, not the network.

Release files for dns-tunnel-messenger 0.2.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 dns-tunnel-messenger 0.2.0
File Size Uploaded
dns_tunnel_messenger-0.2.0.tar.gz 101.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dns-tunnel-messenger 0.2.0
File Interpreter ABI Platform
dns_tunnel_messenger-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 177.0 kB

Release files / dns_tunnel_messenger-0.2.0.tar.gz

Download URL dns_tunnel_messenger-0.2.0.tar.gz
Size 101.9 kB
Tags Source
SHA-256 checksum
How to use checksums
a959079473d2eb2eca67aeaca707c6dc0fd9e9f74ecc2c2e809b659885993f28
BLAKE2b-256 checksum
How to use checksums
7409c7f7e0e754659e50a54fb5e80be9949b99b00f47ac96481e8ebb0c0b54da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.3

Release files / dns_tunnel_messenger-0.2.0-py3-none-any.whl

Download URL dns_tunnel_messenger-0.2.0-py3-none-any.whl
Size 75.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
39a6c66050d19d1d9516dd21cc941983fd4076ae98afe7431d9a157b216f5682
BLAKE2b-256 checksum
How to use checksums
69f9702b32fde222914058c6aaa99382ad5c2559a46e13bd5514979d4e3c9640
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.3

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.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