dog
Display file content
TLDR
Lookup the IP(s) associated with a hostname (A records)
Query the MX records type associated with a given domain name
Specify a specific DNS server to query (e.g. Cloudflare)
Query over TCP rather than UDP
Query the MX records type associated with a given domain name over TCP using explicit arguments
Lookup the IP(s) associated with a hostname (A records) using DNS over HTTPS (DoH)
SYNOPSIS
dog [OPTIONS]
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
Specifies the type of DNS record to look up (e.g., A, AAAA, MX, TXT, CNAME, ANY).
-s
Specifies the DNS server to query. Can be an IP address or hostname. Alias for @SERVER.
-p
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.