shovel

Explore complex DNS records by making and aggregating DNS requests

MIT License

Stars
5

shovel

Make a lot of DNS requests and count the results! Useful for testing complex dynamic DNS records.

Pass multiple qnames, nameservers, record types, and client subnets, either via command line flags, a config, or a combo of both. shovel will dig all combinations of those and show you the results.

Use

Also see examples.md

With different client subnets

With different record types

This uses the same config as the above gif. No subnets passed, so that column is excluded from the output.

$ shovel dig --qname linkedin.com --rtype A --rtype AAAA
╭──────────────┬───────┬──────────────────┬─────────────────┬───────╮
 QNAME         │ RTYPE │ NAMESERVER       │ ANS/ERR         │ COUNT │
├──────────────┼───────┼──────────────────┼─────────────────┼───────┤
 linkedin.com │ A     │ # ns1            │ 13.107.42.14    │    10 │
              │       │ 198.51.45.9:53   │                 │       │
              │       ├──────────────────┼─────────────────┼───────┤
              │       │ # dyn            │ 13.107.42.14    │    10 │
              │       │ 108.59.161.43:53 │                 │       │
              ├───────┼──────────────────┼─────────────────┼───────┤
              │ AAAA  │ # ns1            │ 2620:1ec:21::14 │    10 │
              │       │ 198.51.45.9:53   │                 │       │
              │       ├──────────────────┼─────────────────┼───────┤
              │       │ # dyn            │ 2620:1ec:21::14 │    10 │
              │       │ 108.59.161.43:53 │                 │       │
╰──────────────┴───────┴──────────────────┴─────────────────┴───────╯

Install

scoop bucket add bbkane https://github.com/bbkane/scoop-bucket
scoop install bbkane/shovel
  • Download Mac/Linux/Windows executable: GitHub releases
  • Go: go install go.bbkane.com/shovel@latest
  • Build with goreleaser after cloning: goreleaser --snapshot --skip-publish --clean

Notes

See Go Developer Tooling for notes on development tooling.

Run the webapp locally with OpenObserve

Export env vars:

export SHOVEL_SERVE_OPENOBSERVE_PASS='...';
export SHOVEL_SERVE_OPENOBSERVE_USER='...';
export ZO_ROOT_USER_EMAIL='...';
export ZO_ROOT_USER_PASSWORD='...';

Run OpenObserve (in another terminal) after downloading:

./openobserve

Open OpenObserve at: http://localhost:5080/web/traces?period=15m&query=&org_identifier=default

Run shovel. Check go run . serve --help to see all flags available. Also see [format_jsonl.py]https://github.com/bbkane/dotfiles/blob/master/bin_common/bin_common/format_jsonl.py)

go run . serve | format_jsonl.py fmt

Open shovel at: http://127.0.0.1:8080/?count=1&nameservers=dns3.p09.nsone.net%3A53&protocol=udp&qnames=linkedin.com+www.linkedin.com&rtypes=A&subnetMap=&subnets=

Install shovel + OpenObserve as systemd services, on a local dev VM or production VM with shovel_ansible

Dev Notes