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
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 |
How it works
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.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dns_tunnel_messenger-0.1.0.tar.gz | 6.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dns_tunnel_messenger-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 13.3 kB
Release files / dns_tunnel_messenger-0.1.0.tar.gz
| Download URL | dns_tunnel_messenger-0.1.0.tar.gz |
|---|---|
| Size | 6.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
eadf1471eb52b06fedd0f71208bfe84bbfefd3b6e7adf5bb610b500af317c903
|
|
BLAKE2b-256 checksum How to use checksums |
5a4819ea15707cd0a5a8f010daf22b9dbdf31100b31a2e5208768447f4c7cd60
|
| 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.1.0-py3-none-any.whl
| Download URL | dns_tunnel_messenger-0.1.0-py3-none-any.whl |
|---|---|
| Size | 6.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
80284109dd1ee35177776308f84e0e326ffb6ff643623ab160bc22b1b76b4738
|
|
BLAKE2b-256 checksum How to use checksums |
1dc111ee07c1e5518b35a1590e4615b3e8986ee3e866d5871d86e4d560726c6d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.3
|