feat: add TCP DNS plugin with SOCKS5 proxy support

Extract shared DNS wire-format helpers into src/derp/dns.py so both
the UDP plugin (dns.py) and the new TCP plugin (tdns.py) share the
same encode/decode/build/parse logic.

The !tdns command routes queries through the SOCKS5 proxy via
derp.http.open_connection, using TCP framing (2-byte length prefix).
Default server: 1.1.1.1.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
user
2026-02-15 16:09:35 +01:00
parent 1bdba0ea06
commit 26063a0e8f
8 changed files with 542 additions and 153 deletions

View File

@@ -15,7 +15,8 @@ make run
### Container
```bash
make up # Build + start with podman-compose
make build # Build image (only after dependency changes)
make up # Start with podman-compose
make logs # Follow logs
make down # Stop
```
@@ -37,6 +38,7 @@ make down # Stop
|--------|----------|-------------|
| core | ping, help, version, uptime, whoami, admins, load, reload, unload, plugins, state | Bot management |
| dns | dns | Raw UDP DNS resolver (A/AAAA/MX/NS/TXT/CNAME/PTR/SOA) |
| tdns | tdns | TCP DNS resolver via SOCKS5 proxy (same record types) |
| encode | encode, decode | Base64, hex, URL, ROT13 |
| hash | hash, hashid | Hash generation + type identification |
| defang | defang, refang | IOC defanging for safe sharing |
@@ -63,6 +65,11 @@ make down # Stop
| payload | payload | SQLi/XSS/SSTI/LFI/CMDi/XXE templates |
| dork | dork | Google dork query builder |
| wayback | wayback | Wayback Machine snapshot lookup |
| username | username | Username enumeration across ~25 services |
| remind | remind | One-shot, repeating, and calendar reminders |
| rss | rss | RSS/Atom feed subscriptions with polling |
| youtube | yt | YouTube channel follow with new-video alerts |
| twitch | twitch | Twitch livestream notifications (public GQL) |
| chanmgmt | kick, ban, unban, topic, mode | Channel management (admin) |
| example | echo | Demo plugin |
@@ -90,7 +97,7 @@ async def on_join(bot, message):
| `make lint` | Lint with ruff |
| `make run` | Start the bot (bare metal) |
| `make link` | Symlink to `~/.local/bin/` |
| `make build` | Build container image |
| `make build` | Build container image (only for dependency changes) |
| `make up` | Start with podman-compose |
| `make down` | Stop with podman-compose |
| `make logs` | Follow compose logs |