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
- 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
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
Install shovel + OpenObserve as systemd services, on a local dev VM or production VM with shovel_ansible
- Go doc: https://pkg.go.dev/github.com/miekg/dns
miekg/dns
exmple: https://github.com/miekg/exdns/blob/master/q/q.go- Look up IP subnets for a country: http://www.nirsoft.net/countryip/ or https://ipinfo.io/countries