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.
Also see examples.md
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 │ │ │
╰──────────────┴───────┴──────────────────┴─────────────────┴───────╯
scoop bucket add bbkane https://github.com/bbkane/scoop-bucket
scoop install bbkane/shovel
go install go.bbkane.com/shovel@latest
goreleaser --snapshot --skip-publish --clean
See Go Developer Tooling for notes on development tooling.
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
miekg/dns
exmple: https://github.com/miekg/exdns/blob/master/q/q.go