dog(1)
๐ถ dog(1) โ like, the manual page, bestie
okay so this is the manual page for dog, a command-line DNS client, and honestly? she's iconic. colourful output, DNS-over-TLS and DNS-over-HTTPS support, and she can even emit JSON. we're gonna go through the whole thing together, no skips, no cap ๐
โจ NAME โจ
dog โ a command-line DNS client ๐
๐ธ SYNOPSIS ๐ธ
dog [options] [domains...]
dog is a command-line DNS client. It has colourful output, supports the DNS-over-TLS and DNS-over-HTTPS protocols, and can emit JSON. Literally all of that. In one little binary. ๐
๐ EXAMPLES ๐
dog example.netโ Query the A record of a domain using default settings. the classic starter pack ๐ซถdog example.net MXโ ...looking up MX records instead. glow up, different record type โจdog example.net MX @1.1.1.1โ ...using a specific nameserver instead. picking your own fave resolver, we love agency ๐dog example.net MX @1.1.1.1 -Tโ ...using TCP rather than UDP. switching it up ๐dog -q example.net -t MX -n 1.1.1.1 -Tโ As above, but using explicit arguments. the "I like to be precise about things" version, and honestly? valid.
๐ฆ QUERY OPTIONS ๐ฆ
okay bestie, these are the main character options โ the ones that decide what you're even asking:
-q,--query=HOSTโ Host name or domain name to query. the thing you're actually curious about ๐-t,--type=TYPEโ Type of the DNS record being queried (A,MX,NS...) โ pick your fighter โญ-n,--nameserver=ADDRโ Address of the nameserver to send packets to. who's getting your question ๐--class=CLASSโ Network class of the DNS record being queried (IN,CH,HS). yes these exist, yes they're a vibe ๐
By default, dog will request A records using the system default resolver. At least one domain name must be passed โ dog will not automatically query the root nameservers. so don't come crying to her with zero arguments, she's not doing that ๐ญ
Query options can be passed in using a command-line option, such as --query lookup.dog or --type MX, or as plain arguments, such as lookup.dog or MX. dog will make an intelligent guess as to what plain arguments mean (MX is quite clearly a type), which makes it easier to compose ad-hoc queries quickly. If precision is desired, use the long-form options. she's smart but she's not gonna read your mind forever ๐ง
If more than one domain, type, nameserver, or class is specified, dog will perform one query for each combination, and display the combined results in a table. For example, passing three type arguments and two domain name arguments will send six requests. math is mathing, she's booked and busy ๐ฅ
DNS traditionally uses port 53 for both TCP and UDP. To use a resolver with a different port, include the port number after a colon (:) in the nameserver address. iykyk ๐ฉท
๐ SENDING OPTIONS ๐
--edns=SETTINGโ Whether to opt in to DNS. This can bedisable,hide, orshow. three whole choices, pick wisely ๐ซ--txid=NUMBERโ Set the transaction ID to a specific value. for the control freaks (affectionate) ๐-Z=TWEAKSโ Set uncommon protocol-level tweaks. the secret menu, lowkey ๐ฎ
๐ TRANSPORT 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.
By default, dog will use the UDP protocol, automatically re-sending the request using TCP if the response indicates that the message is too large for UDP. Passing --udp will only use UDP and will fail in this case; passing --tcp will use TCP by default. so like, --udp is committed to the bit, for better or worse ๐
The DNS-over-TLS (DoT) and DNS-over-HTTPS (DoH) protocols are available with the --tls and --https options. Bear in mind that the system default resolver is unlikely to respond to requests using these protocols โ so don't be shocked, she warned you ๐ซถ
Note that if a hostname or domain name is given as a nameserver, rather than an IP address, the resolution of that host is performed by the operating system, not by dog. she's outsourcing that one, respectfully ๐ธ
Unlike the others, the HTTPS transport type requires an entire URL, complete with protocol, domain name, and path. full lewk required, no half measures ๐
๐ OUTPUT OPTIONS ๐
-1,--shortโ Short mode: display nothing but the first result. minimalism era โจ-J,--jsonโ Display the output as JSON. for the devs ๐ง--color,--colour=WHENโ When to colourise the output. This can bealways,automatic, ornever. (both spellings, she's inclusive ๐ณ๏ธโ๐)--secondsโ Do not format durations as hours and minutes; instead, display them as seconds. raw numbers, no frills ๐ซ--timeโ Print how long the response took to arrive. the "how long did u take" of it all ๐ญ
โญ META OPTIONS โญ
--helpโ Displays an overview of the command-line options. your lil map ๐บ๏ธ--versionโ Displays the version ofdogbeing invoked. identity check ๐ช
๐ ENVIRONMENT VARIABLES ๐
dog responds to the following environment variables:
๐ DOG_DEBUG
Set this to any non-empty value to have dog emit debugging information to standard error. For more in-depth output, set this to the exact string trace. yes, literally trace. she said what she said ๐
๐ RECORD TYPES ๐
dog understands and can interpret the following record types:
Aโ IPv4 addressesAAAAโ IPv6 addressesCAAโ permitted certificate authoritiesCNAMEโ canonical domain aliasesHINFOโ system information and, sometimes, forbidden request explanationsLOCโ location informationMXโ e-mail server addressesNAPTRโ DDDS rulesNSโ domain name serversOPTโ extensions to the DNS protocolPTRโ pointers to canonical names, usually for reverse lookupsSOAโ administrative information about zonesSRVโ IP addresses with port numbersSSHFPโ SSH key fingerprintsTLSAโ TLS certificates, public keys, and hashesTXTโ arbitrary textual information
When a response DNS packet contains a record of one of these known types, dog will display it in a table containing the type name and a human-readable summary of its contents. readable and cute, we stan ๐
Records with a type number that does not map to any known record type will still be displayed. As they cannot be interpreted, their contents will be displayed as a series of numbers instead. she's not ignoring them, she just doesn't speak that language ๐
dog also contains a list of record type names that it knows the type number of, but is not able to interpret, such as IXFR or ANY or AFSDB. These are acceptable as command-line arguments, meaning you can send an AFSDB request with dog AFSDB. However, their response contents will still be displayed as numbers. They may be supported in future versions of dog. future era, not yet ๐
๐ง PROTOCOL TWEAKS ๐ง
The -Z command-line argument can be used one or more times to set some protocol-level options in the DNS queries that get sent. It accepts the following values:
aaโ Sets theAA(Authoritative Answers) bit in the query.adโ Sets theAD(Authentic Data) bit in the query.bufsize=NUMโ Sets the UDP payload size field in theOPTfield in the query. This has no effect if EDNS is diabled. (yes, that's how it's spelled in the original, she's keeping it fr fr ๐ญ)cdโ Sets theCD(Checking Disabled) bit in the query.
๐จ EXIT STATUSES ๐จ
0โ If everything goes OK. slay ๐1โ If there was a network, I/O, or TLS error during operation. rough.2โ If there is no result from the server when running in short mode. This can be any received server error, not justNXDOMAIN. so don't assume, bestie ๐3โ If there was a problem with the command-line arguments. we've all been there ๐ซ
๐ AUTHOR ๐
dog is maintained by Benjamin ogham Sago. the icon behind the icon โจ
- Website:
https://dns.lookup.dog/ - Source code:
https://github.com/ogham/dog
and that's the whole page, bestie ๐ this was dog, version v0.1.0, living in the General Commands Manual โ go query something iconic and remember: the vibe changes, the facts do not. mwah ๐๐ถ
๐ฆ where this page comes from
- opensuse-leap 16.0: dog 0.1.0-bp160.1.13 ยท EUPL-1.2
- opensuse-leap 16.0: dog 0.1.0-bp160.1.13 ยท EUPL-1.2
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms