Skip to content

bbkane/shovel

Repository files navigation

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.

Project Status (2025-06-14)

shovel works well, but I don't use it anymore. I'm watching issues; please open one for any questions and especially BEFORE submitting a Pull Request.

Use

Also see examples.md

./demo.gif

You can save these flags to a config:

# tmp.yaml
# see config paths with `shovel dig combine -h`
dig:
  combine:
    count: 10
    qnames:
      - example.com
      - www.example.com
    nameservers:
      - 1.1.1.1:53
    rtypes:
      - A

Run with:

shovel dig combine --config ./tmp.yaml

Proxy DNS Traffic through a separate server with sshuttle

In one tab:

sshuttle --dns -r username@host --ns-hosts=8.8.8.8 0/0:53 ::/0:53

In another tab:

shovel dig combine -q example.com -r TXT -p tcp4 -n 8.8.8.8: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

About

Explore complex DNS records by making and aggregating DNS requests

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •