Kai Moana (Hawaiian) — "food from the sea." The ocean's bounty, harvested by those who know where to look.
A curated collection of high-performance recon tools built in Rust, each born from stracing its Go predecessor at the syscall level and engineering a replacement that eliminates every measured bottleneck. No guesswork. No premature optimization. Every design decision traces to a strace -c -f timestamp.
12.9 MB replaces 152 MB. Same targets. More results. Fewer syscalls.
Three tools. Three ocean predators. One pipeline.
leviathan -d target.com -s | puhi --resp --recon | mano -s --title --status-code --tech-detectThe sea monster finds them. The moray eel maps every record. The shark devours them.
The biblical sea monster that drags everything from the deep.
Replaces subfinder (ProjectDiscovery) | GitHub
| Metric | subfinder | leviathan | Delta |
|---|---|---|---|
| Binary size | 42 MB | 5.9 MB | 86% smaller |
| Wall clock (passive) | 30.4s | 4.8s | 6.3x faster |
| CPU time | 2.58s | 0.04s | 64x less |
| Subdomains found | 16 | 28 | 75% more |
| Total syscalls | 524,770 | 4,400 | 119x fewer |
| Futex calls | 214,744 | 690 | 311x fewer |
| nanosleep calls | 4,220 | 23 | 183x fewer |
Key bottlenecks eliminated:
- Goroutine-per-source + unbuffered channel → tokio async + bounded MPSC
- Spin-wait rate limiter → timer-based
governortoken bucket - Per-source HTTP clients → shared
reqwestconnection pool - IPv6 ENETUNREACH fallback waste → IPv4-only at client level
5-phase pipeline:
- Passive OSINT sources (crt.sh, Wayback, AlienVault, CertSpotter, URLScan, RapidDNS, Anubis, HackerTarget)
- DNS record mining (SPF/DMARC/MX/NS/SOA/SRV/CNAME) + NSEC zone walking + TLS SAN harvesting
- HTTP header mining (CSP, CORS, Location) + JavaScript static analysis
- Reverse DNS /24 CIDR sweep
- Smart permutation brute-force from discovered labels
# Passive only — drop-in subfinder replacement
leviathan -d example.com --passive -s
# Full 5-phase deep recon
leviathan -d example.com -s
# Multiple domains
leviathan -d example.com,target.org -sThe moray eel — lurks in every crevice, strikes with precision.
Replaces dnsx (ProjectDiscovery) | GitHub
| Metric | dnsx | puhi | Delta |
|---|---|---|---|
| Binary size | 41 MB | 2.1 MB | 95% smaller |
| Wall clock | 1.09s | 0.10s | 10.3x faster |
| DNS records found | 120 | 163 | 36% more |
| Total syscalls | 33,047 | 5,132 | 6.4x fewer |
| Futex calls | 7,168 | 764 | 9.4x fewer |
| epoll calls | 16,005 | 639 | 25x fewer |
| nanosleep calls | 690 | 2 | 345x fewer |
Key bottlenecks eliminated:
- 100 goroutines with independent UDP sockets → single shared
hickory-resolverwith caching - 8 resolvers queried in parallel per hostname → single resolver, cached results
- Unbuffered channels →
buffer_unorderedwith zero scheduling overhead tokio::join!for parallel record type queries within a single task
Supports: A, AAAA, CNAME, MX, NS, TXT, SOA, SRV, PTR, CAA
# Resolve A records
leviathan -d example.com -s | puhi -a
# All record types with response values
leviathan -d example.com -s | puhi --recon --resp
# DNS brute-force
puhi -d example.com -w wordlist.txt -a --resp
# JSON output
puhi -l hosts.txt --recon -jThe shark — one pass and it knows everything about the target.
Replaces httpx (ProjectDiscovery) | GitHub
| Metric | httpx | mano | Delta |
|---|---|---|---|
| Binary size | 69 MB | 4.9 MB | 93% smaller |
| Wall clock | 1.59s | 0.25s | 6.4x faster |
| CPU time | 1.98s | 0.04s | 49x less |
| nanosleep calls | 1,222 | 3 | 407x fewer |
| CPU utilization | 124% | 15% | 88% less CPU |
Key bottlenecks eliminated:
DisableKeepAlives: true+MaxIdleConnsPerHost: -1→ shared connection pool with keep-alive- Go runtime scheduler overhead (124% CPU for 17 targets) → tokio async (15% CPU)
- 69MB binary (wappalyzer, headless Chrome, 3 DB drivers) → 4.9MB with only what's needed
- 5 DNS resolvers queried per target → system resolver with caching
Extracts: status codes, page titles, server headers, content length, technology fingerprints (nginx, Cloudflare, WordPress, React, Django, etc.), TLS certificates (CN, SANs, issuer), body hashes (MD5, SHA-256), line/word counts, response time
# Basic probe
leviathan -d example.com -s | mano -s --status-code --title
# Full fingerprint
leviathan -d example.com -s | mano -a
# JSON output with TLS
mano -l hosts.txt --json --tls-grab
# Filter by status code
mano -l hosts.txt --mc 200,301 -s --title --tech-detect┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ leviathan │────▶│ puhi │────▶│ mano │
│ 5.9 MB │ │ 2.1 MB │ │ 4.9 MB │
│ │ │ │ │ │
│ find subs │ │ map DNS │ │ probe HTTP │
│ 28 found │ │ 200 records │ │ 11 alive │
│ 4.8s │ │ 0.1s │ │ 0.25s │
└─────────────┘ └─────────────┘ └─────────────┘
replaces replaces replaces
subfinder dnsx httpx
42 MB 41 MB 69 MB
One-liner:
leviathan -d hackerone.com -s | puhi --resp --recon | mano -s --title --status-code --tech-detectThis isn't a language war. It's a measurement.
| What we measured | Go (ProjectDiscovery) | Rust (Kai Moana) |
|---|---|---|
| Combined binary | 152 MB | 12.9 MB |
| Futex calls (subfinder) | 214,744 | 690 |
| epoll calls (dnsx) | 16,005 | 639 |
| nanosleep calls (httpx) | 1,222 | 3 |
| CPU for 17 HTTP probes | 124% | 15% |
| Subdomains found | 16 | 28 |
| DNS records found | 120 | 163 |
The Go runtime's goroutine scheduler, garbage collector, and sysmon thread create measurable overhead that compounds at scale. When you're scanning thousands of targets from a VPS, Lambda function, or jump box during a pentest, that overhead becomes the bottleneck — not the network.
Every number above came from strace -c -f. Every design decision traces to a syscall count.
Each tool in the fleet was built using the same process:
- Clone the Go tool from ProjectDiscovery
- Build the binary, note the size
- strace -c -f — run with real targets, capture full syscall summary
- strace -f -e trace=futex,nanosleep,connect — deep dive into contention, sleep patterns, network behavior
- Analyze — identify the top 5 bottlenecks by wall-clock time
- Map each bottleneck to a Rust architectural decision
- Build the replacement with zero-overhead async, shared resources, and minimal dependencies
- Benchmark — head-to-head on identical targets with identical flags
- strace the replacement — verify the bottlenecks are eliminated
- Publish — with full strace data in the README
No guesswork. No "Rust is faster because Rust." Measured, mapped, eliminated.
Each tool is standalone. Install what you need:
# The whole fleet
git clone https://github.com/copyleftdev/leviathan.git && cd leviathan && cargo build --release && sudo cp target/release/leviathan /usr/local/bin/ && cd ..
git clone https://github.com/copyleftdev/puhi.git && cd puhi && cargo build --release && sudo cp target/release/puhi /usr/local/bin/ && cd ..
git clone https://github.com/copyleftdev/mano.git && cd mano && cargo build --release && sudo cp target/release/mano /usr/local/bin/ && cd ..Requires Rust 1.70+. No runtime dependencies.
All tools are named from Hawaiian ocean life — Kai Moana means "food from the sea."
| Tool | Hawaiian | English | Role |
|---|---|---|---|
| leviathan | — | Biblical sea monster | Drags subdomains from the deep |
| puhi | puhi | Moray eel | Probes every crevice of DNS |
| mano | mano | Shark | Devours HTTP targets on the surface |
The fleet follows one rule: measure first, build second.
If you want to add a tool:
- Pick a Go recon tool (naabu, katana, ffuf, nuclei, etc.)
strace -c -fit with real targets- Identify the top bottlenecks
- Build the Rust replacement
- Show the head-to-head numbers
- Name it after an ocean creature
PRs welcome.
MIT — all tools in the fleet.