Lookup the IP(s) associated with a hostname (A records)
$ dog [example.com]Query the MX records type associated with a given domain name$ dog [example.com] MXSpecify a specific DNS server to query (e.g. Cloudflare)$ dog [example.com] MX @[1.1.1.1]Query over TCP rather than UDP$ dog [example.com] MX @[1.1.1.1] [[-T|--tcp]]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]]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] SYNOPSISdog [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.
DESCRIPTIONdog (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.
CEATS 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 IMPLEMENTATIONdog 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 SUPPORTA 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 eesdropping and manipulation of DNS traffic.
USER-FRIENDLY EXPERIENCEDesigned 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.
HISTORYdog 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 ALSOdig(1), host(1), nslookup(1), drill(1)