DOGE

license Say thanks! last-commit repo-top-language repo-language-count

YAML PowerShell Docker GitHub%20Actions JSON Rust

A screenshot of dog making a DNS request

Doge can look up!

doge is a command-line DNS client, like dig forked from the amazing work done here. It has colourful output, understands normal command-line argument syntax, supports the DNS-over-TLS and DNS-over-HTTPS protocols, and can emit JSON. I believe this is an amazing project and should be improved on.

Examples

    doge example.net                          Query a domain using default settings
    doge example.net MX                       ...looking up MX records instead
    doge example.net MX @1.1.1.1              ...using a specific nameserver instead
    doge example.net MX @1.1.1.1 -T           ...using TCP rather than UDP
    doge exapple.net MX @1.1.1.1 -p 69        ...using a nonstandard port
    doge -q example.net -t MX -n 1.1.1.1 -T   As above, but using explicit arguments
  

Command-line options

Query options

      <arguments>              Human-readable host names, nameservers, types, or classes
      -q, --query=HOST             Host name or domain name to query
      -t, --type=TYPE              Type of the DNS record being queried (A, MX, NS...)
      -n, --nameserver=ADDR        Address of the nameserver to send packets to
      -p, --port=PORT                Port options for sending queries on nonstandard ports
      --class=CLASS                 Network class of the DNS record being queried (IN, CH, HS)
    

Sending options

      --edns=SETTING           Whether to OPT in to EDNS (disable, hide, show)
      --txid=NUMBER            Set the transaction ID to a specific value
      -Z=TWEAKS                Set uncommon protocol-level tweaks
    

Protocol options

      -U, --udp                Use the DNS protocol over UDP
      -T, --tcp                Use the DNS protocol over TCP
      -S, --tls                Use the DNS-over-TLS protocol
      -H, --https              Use the DNS-over-HTTPS protocol
    

Output options

      -1, --short              Short mode: display nothing but the first result
      -J, --json               Display the output as JSON
      --color, --colour=WHEN   When to colourise the output (always, automatic, never)
      --seconds                Do not format durations, display them as seconds
      --time                   Print how long the response took to arrive
    

Installation

Current and Upcoming packages

        Cargo: cargo install dns-doge
        ArchLinux: yay -S dns_doge
        Ubuntu/Debian: Comming Soon
        RHEL/Fedora/Cenos: Publishing rpm
    

Docker/Podman

To build the container image of doge, you can use Docker or Podman. Here an example using Docker:

$ docker build -t doge .

You can then run it using the following command:

$ docker run -it --rm doge

To run doge directly, you can then define the following alias:

$ alias doge="docker run -it --rm doge"

Notes

I am not a Rust expert at all, Honestly I'm the opposite, just learning coding. I used dog on my Arch system and a few random *nix Laptops that I perpetually fix and break. As such parts of maintaining and improving this project will be outside of my understanding. Learning packaging, docker stuff and CI/CD. I'm too broke for a mac book, and currently refuse to install windows 10/11, Small fixes and improvements I'll try to fix timely but major things especially on my non target machines might take awhile - forever to fix ( please drop a PR ) in those cases :).

Website

I will make a website at some point... for the time being nothing to drastic has changed from the dog website