LinuxCommandLibrary

dog

Display file content

TLDR

Lookup the IP(s) associated with a hostname (A records)

$ dog [example.com]
copy

Query the MX records type associated with a given domain name
$ dog [example.com] MX
copy

Specify a specific DNS server to query (e.g. Cloudflare)
$ dog [example.com] MX @[1.1.1.1]
copy

Query over TCP rather than UDP
$ dog [example.com] MX @[1.1.1.1] [[-T|--tcp]]
copy

Query the MX records type associated with a given domain name over TCP using explicit arguments
$ dog [[-q|--query]] [example.com] [[-t|--type]] MX [[-n|--nameserver]] [1.1.1.1] [[-T|--tcp]]
copy

Lookup the IP(s) associated with a hostname (A records) using DNS over HTTPS (DoH)
$ dog [example.com] [[-H|--https]] @[https://cloudflare-dns.com/dns-query]
copy

SYNOPSIS

dog [OPTIONS] [TYPE] [@SERVER]

PARAMETERS

-h, --help
    Displays a help message and exits.


-V, --version
    Prints version information.


-q, --quiet
    Suppresses printing of the question section in the output.


-v, --verbose
    Prints the full DNS packet, including raw header details.


-J, --json
    Formats the DNS answer output as JSON, suitable for programmatic parsing.


-C, --color
    Controls when to colorize the output. Options include 'auto' (default), 'always', or 'never'.


-1, --short
    Prints only the first answer in a concise format.


-Q, --question
    Explicitly prints the question section of the DNS query.


-A, --answer
    Explicitly prints the answer section of the DNS response.


-N, --authority
    Explicitly prints the authority section of the DNS response.


-E, --additional
    Explicitly prints the additional section of the DNS response.


-Z, --no-id
    Does not print the DNS message ID, useful for scripting.


-U, --udp
    Forces DNS queries over UDP (Do53). This is often the default.


-T, --tcp
    Forces DNS queries over TCP (Do53), useful for larger responses.


-S, --tls
    Uses DNS-over-TLS (DoT) for encrypted DNS queries.


-H, --https
    Uses DNS-over-HTTPS (DoH) for encrypted DNS queries.


-L, --locate
    Locates DNS servers by querying the root servers, providing a server list.


-D, --dnssec
    Enables DNSSEC checking and displays DNSSEC-related records (RRSIG, NSEC, etc.).


-t , --type
    Specifies the type of DNS record to look up (e.g., A, AAAA, MX, TXT, CNAME, ANY).


-s , --server
    Specifies the DNS server to query. Can be an IP address or hostname. Alias for @SERVER.


-p , --port
    Specifies the port number to use for DNS queries. Defaults to 53 for Do53, 853 for DoT, 443 for DoH.


--timeout
    Sets the maximum time to wait for a DNS response (e.g., 2s, 500ms).


--retries
    Sets the number of times to retry a query if it fails.


--edns
    Enables EDNS (Extension Mechanisms for DNS), which allows for larger DNS messages.


--class
    Specifies the DNS class for the query (e.g., IN for Internet, CH for Chaos).


--check
    Verifies that the server can resolve the given name, reporting success or failure.


--homenet
    Uses DNS servers configured in the system's resolv.conf for home network lookups.


DESCRIPTION

dog (sometimes referred to as doggo) is a modern, open-source command-line DNS client written in Rust. It serves as an intuitive alternative to traditional DNS lookup tools like dig or nslookup, aiming to provide a more user-friendly experience with clear, colorized output by default.

dog supports a wide range of DNS record types and features, including DNS-over-TLS (DoT), DNS-over-HTTPS (DoH), and traditional DNS-over-UDP/TCP (Do53). It also offers options for JSON output, concise short-form output, and detailed query introspection, making it a versatile tool for network troubleshooting, development, and general DNS queries. Its design prioritizes readability and ease of use, making complex DNS lookups more accessible to a broader audience.

CAVEATS

  • Not a Default Command: dog is not typically pre-installed on most Linux distributions and needs to be installed separately, unlike dig or host.
  • Active Development: As a relatively new and actively developed tool, its features, options, and output format may evolve with new versions, potentially leading to minor inconsistencies between different installed versions.
  • Dependencies: While Rust-based, its installation might require Rust's toolchain or pre-built binaries specific to your architecture.

RUST IMPLEMENTATION

dog is written entirely in Rust, which contributes to its reputation for speed, reliability, and security. Rust's memory safety guarantees help prevent common programming errors, making dog a robust tool for critical network diagnostics.

MODERN PROTOCOLS SUPPORT

A key advantage of dog is its native support for modern, encrypted DNS protocols like DNS-over-TLS (DoT) and DNS-over-HTTPS (DoH). These protocols provide a layer of encryption for DNS queries, significantly enhancing user privacy and security by preventing eavesdropping and manipulation of DNS traffic.

USER-FRIENDLY EXPERIENCE

Designed with a strong focus on readability and ease of use, dog provides colorized output by default, making it easier to distinguish different parts of a DNS response. Its options for structured JSON output also facilitate integration into scripts and automated workflows, simplifying data parsing and analysis.

HISTORY

dog was initiated by a community of developers in 2018, aiming to create a modern, more user-friendly command-line DNS client as an alternative to the long-standing, often complex dig utility. Leveraging the Rust programming language, its development focused on performance, memory safety, and concurrency, alongside a strong emphasis on user experience through features like colorized output and native support for contemporary DNS protocols. Its creation addressed the growing need for easily accessible tools capable of performing DNS-over-TLS (DoT) and DNS-over-HTTPS (DoH) queries, which are crucial for enhancing privacy and security in current internet environments. Since its inception, dog has steadily gained traction among network administrators and developers seeking a more ergonomic and powerful tool for their DNS troubleshooting and querying needs.

SEE ALSO

dig(1), host(1), nslookup(1), drill(1)

Copied to clipboard