# WTFnet WTFnet is a pure CLI toolbox for diagnosing network problems on Linux and Windows. ## Highlights - System snapshot: interfaces, IPs, routes, DNS config. - Ports, neighbors, and trusted root certificates. - Probing: ping, tcping, traceroute (best-effort). - DNS: query/detect/watch with GeoIP, DoT/DoH, and SOCKS5 support. - GeoIP offline lookup via GeoLite2 Country/ASN. - Subnet calculator: subnet/contains/overlap/summarize. ## Quickstart ```bash cargo run -p wtfnet-cli -- sys ifaces cargo run -p wtfnet-cli -- dns query example.com A cargo run -p wtfnet-cli -- calc subnet 192.168.1.10 255.255.255.0 ``` ## Usage examples ```bash # System snapshot wtfn sys ifaces wtfn sys ip --all wtfn sys route --ipv4 wtfn sys dns # Ports and neighbors wtfn ports listen --tcp wtfn ports who 443 wtfn neigh list --ipv6 # GeoIP and probing wtfn geoip lookup 8.8.8.8 wtfn probe ping example.com --count 4 wtfn probe tcping example.com:443 --count 4 wtfn probe tcping example.com:443 --socks5 socks5://127.0.0.1:9909 wtfn probe trace example.com:443 --max-hops 20 # DNS wtfn dns query example.com A wtfn dns query example.com AAAA --server 1.1.1.1 wtfn dns query example.com A --transport doh --server 1.1.1.1 --tls-name cloudflare-dns.com wtfn dns query example.com A --transport dot --server 1.1.1.1 --tls-name cloudflare-dns.com --socks5 socks5://127.0.0.1:9909 wtfn dns detect example.com --transport doh --servers 1.1.1.1 --tls-name cloudflare-dns.com wtfn dns watch --duration 10s --filter example.com # TLS wtfn tls handshake example.com:443 wtfn tls handshake example.com:443 --socks5 socks5://127.0.0.1:9909 wtfn tls cert example.com:443 wtfn tls verify example.com:443 wtfn tls alpn example.com:443 --alpn h2,http/1.1 # Discover wtfn discover mdns --duration 3s wtfn discover ssdp --duration 3s # Diag wtfn diag --out report.json --json wtfn diag --bundle report.zip # Calc wtfn calc contains 192.168.0.0/16 192.168.1.0/24 wtfn calc overlap 10.0.0.0/24 10.0.1.0/24 wtfn calc summarize 10.0.0.0/24 10.0.1.0/24 ``` ## Supported flags Global flags: - `--json` / `--pretty` - `--no-color` / `--quiet` - `-v` / `-vv` - `--log-level ` - `--log-format ` - `--log-file ` Command flags (implemented): - `sys ip`: `--all`, `--iface ` - `sys route`: `--ipv4`, `--ipv6`, `--to ` - `ports listen`: `--tcp`, `--udp`, `--port ` - `neigh list`: `--ipv4`, `--ipv6`, `--iface ` - `probe ping`: `--count `, `--timeout-ms `, `--interval-ms `, `--no-geoip` - `probe tcping`: `--count `, `--timeout-ms `, `--socks5 `, `--prefer-ipv4`, `--no-geoip` - `probe trace`: `--max-hops `, `--timeout-ms `, `--udp`, `--port `, `--no-geoip` - `dns query`: `--server `, `--transport `, `--tls-name `, `--socks5 `, `--prefer-ipv4`, `--timeout-ms ` - `dns detect`: `--servers `, `--transport `, `--tls-name `, `--socks5 `, `--prefer-ipv4`, `--repeat `, `--timeout-ms ` - `dns watch`: `--duration `, `--iface `, `--filter ` - `http head|get`: `--timeout-ms `, `--follow-redirects `, `--show-headers`, `--show-body`, `--max-body-bytes `, `--http1-only`, `--http2-only`, `--geoip`, `--socks5 ` - `tls handshake|cert|verify|alpn`: `--sni `, `--alpn `, `--timeout-ms `, `--insecure`, `--socks5 `, `--prefer-ipv4` - `discover mdns`: `--duration `, `--service ` - `discover ssdp`: `--duration ` - `diag`: `--out `, `--bundle `, `--dns-detect `, `--dns-timeout-ms `, `--dns-repeat ` ## GeoIP data files GeoLite2 mmdb files should live in `data/`. Lookup order: 1) `NETTOOL_GEOIP_COUNTRY_DB` / `NETTOOL_GEOIP_ASN_DB` 2) `data/` next to the CLI binary 3) `data/` in the current working directory ## Build and package ```bash cmake -S . -B build cmake --build build cmake --build build --target package ``` Install: ```bash cmake --build build --target install ``` ## Roadmap ### v0.1 (MVP) - sys: ifaces/ip/route/dns - ports: listen/who - probe: ping + tcping - calc: subnet/contains/overlap - basic logging + --json everywhere ### v0.2 (current requirements) - dns: query + detect + watch (best-effort) - geoip: local Country+ASN mmdb integration - http: head/get (HTTP/2 required; HTTP/3 best-effort optional) - tls: handshake/verify/cert/alpn - neigh: ARP/NDP snapshot - discover: mdns + ssdp (bounded) - diag: bundle export (zip) ### v0.3 (future upgrades) - richer trace output (reverse lookup, per-hop loss) - TLS extras: OCSP stapling indicator, more chain parsing - ports conns improvements (top talkers / summary) - better baseline/diff for system roots - smarter "diagnose " workflow mode ## Current stage Implemented: - Core CLI with JSON output and logging. - sys, ports, neigh, cert roots. - geoip, probe, dns query/detect/watch. - http head/get with timing and GeoIP. - tls handshake/verify/cert/alpn. - DoT/DoH + SOCKS5 proxy support. - discover mdns/ssdp. - diag report + bundle. - calc subcrate with subnet/contains/overlap/summarize. - CMake/Makefile build + package + install targets. - Basic unit tests for calc and TLS parsing. In progress: - none. See `docs/implementation_status.md` for a design-vs-implementation view. ## License MIT (see `LICENSE`).