dnsviz-probe(1)
๐ dnsviz-probe โ the manual page, but make it slay ๐
okay bestie, so this is the tea on dnsviz-probe(1), a general commands manual page, and it's literally about issuing diagnostic DNS queries. sit with me, we're gonna get through this together ๐ซถ
โจ NAME โจ
dnsviz-probe โ issue diagnostic DNS queries. that's it, that's the whole vibe. it runs diagnostic DNS queries. iconic behavior honestly ๐
๐ SYNOPSIS ๐
dnsviz probe [ options ] [ domain_name... ]
look at her. so simple. so powerful. the way she just probes ๐ฅ
๐ DESCRIPTION ๐
so here's the whole situation, bestie. dnsviz probe does a whole series of diagnostic queries for the names you specify, and it hits up either recursive DNS servers (that's the default, she's the default for a reason) or authoritative DNS servers. then it takes all those results and serializes them into JSON format. so cute, so structured, so JSON ๐ฆ
and what is that output even for, you ask? it's used to assess the health of DNS deployments, using stuff like dnsviz-grok(1) and dnsviz-graph(1). so like, it's the diagnostics queen and those two are the ones who read her notes. main character energy all around ๐
now, the domain names you want processed? you can hand them over in two ways:
- as command-line arguments, or
- in a file, using the
-foption.
and there's a third little trick: when you use the -r option, the domain names can just be implied using the diagnostic query input. like, the input already knows, she doesn't need to be told twice ๐
okay but here's the rules, and you gotta listen, fr fr. domain names get extracted from the diagnostic query input in conjunction with-ronly when-fis not used and no domain names are supplied on the command line. and if you do use the-foption? then names may not be specified on the command line. periodt. no mixing. pick a lane ๐
๐ธ so what even counts as a domain name here ๐ธ
the domain names you pass as input are fully-qualified domain names, like for real fully qualified. examples, because I know you want them:
example.comwww.example.com_443._tcp.example.com1.2.0.192.in-addr.arpa8.b.d.0.1.0.0.2.ip6.arpa
and because it's implied that the domain names you specify are fully qualified, you do not need a trailing dot. no dot needed. save the dot for later, she's not required โจ
and that's the setup bestie, we're not done yet โ more of this page is coming, so don't go anywhere ๐
โจ OPTIONS โจ
okay bestie, this is the part where it gets good. every flag, every vibe, let's go ๐
-f,--names-filefilename โ read names from a file instead, one name per line, instead of grabbing them off the command line. and listen โ if you use this, you literally can't also pass names on the command line. pick a lane babe ๐-d,--debuglevel โ set the debug level, anywhere from0to3, and the higher you go the more it yaps. the default is"2", which is the informational-level output. so like, normal amount of talking ๐ฃ-r,--input-filefilename โ read diagnostic query input from this file instead of actually querying servers. pass"-"if you want it to read from standard input. stream it, queen ๐-t,--threadsthreads โ issue diagnostic queries for different names in parallel, using however many threads you say. default? totally serial, one at a time, no multitasking energy. give it threads and watch it go โก-4,--ipv4โ IPv4 only. that's it. that's the whole flag ๐ซถ-6,--ipv6โ IPv6 only. slay ๐-b,--source-ipaddress โ use this specific source IPv4 or IPv6 address for your queries instead of letting it figure out the source on its own.
you can stack this option more than once to hand it both an IPv4 and an IPv6 address, no problem.
this one's sometimes a whole necessity when you're on a dual-homed machine and you wanna use the non-default interface for queries. main character interface only ๐
-u,--looking-glass-urlurl โ issue your queries through the DNS looking glass at this URL (HTTP(S) or SSH). the queries will look like they're coming from the looking glass instead of from your local machine. catfish but make it DNS ๐
Examples:
Issue DNS queries from www.example.com using the cgi script dnsviz-lg.cgi:
http://www.example.com/cgi-bin/dnsviz-lg.cgi
Same, but use HTTP Basic authentication:
http://username:password@www.example.com/cgi-bin/dnsviz-lg.cgi
Issue DNS queries from host.example.com on which DNSViz is also installed.
ssh://username@host.example.com
heads up bestie: a looking glass that uses https is only supported when you're running python version 2.7.9 or greater. no cap.
-k,--insecureโ do NOT verify the server-side TLS certificate for an HTTPS-based DNS looking glass that you specified with-u. living dangerously, i see ๐ญ-a,--ancestorancestor โ issue diagnostic queries for each domain name through the specified ancestor. default for recursive mode is"."(like, go all the way to the root, babe). default for authoritative mode (aka when you're using-A) is the domain name itself.-R,--rr-typestype[,type...] โ only issue diagnostic queries for these specific type(s), likeA,AAAA, etc. the default is to be smart about it and pick query types based on the nature of the name (think: how many labels it has, whether it's a subdomain of.arpa, labels indicating association to TLSA or SRV records, etc.) plus whether there are NS records detected (i.e., it's a zone). it's giving psychic ๐ฎ-s,--recursive-serversserver[,server...] โ query these specific recursive resolver(s) instead of whatever's sitting in/etc/resolv.conf.
each server can be an address (IPv4 or IPv6), a domain name (which gets resolved to an address through the standard resolution process), or both, using the syntax name=address. and real talk: when you give both a name and an address (name=address), the name is only for identification purposes โ it doesn't matter whether the name resolves to the corresponding address, or at all, honestly. IPv6 addresses gotta be wrapped in square brackets, like "[2001:db8::1]".
each server value can optionally have a numeric port suffixed to it, telling you which port to hit. if you don't specify, the standard DNS port, 53, is used.
here's what example server values look like:
ns1.example.com
ns1.example.com:5333
ns1.example.com=192.0.2.1
ns1.example.com=[2001:db8::1]
ns1.example.com=[2001:db8::1]:5333
192.0.2.1
this option cannot be used in conjunction with -A. they do not coexist, periodt.
-A,--authoritative-analysisโ query authoritative servers, instead of (the default) recursive servers. switching up the whole energy ๐-x,--authoritative-serversdomain[+]:server[,server...] โ treat these servers as authoritative for a domain, instead of learning authoritative servers by following delegations. this option dictates which servers get queried for a domain, BUT the servers you specify won't be used to check NS or glue record consistency with the child โ for that behavior, see-N.
default behavior is to identify and query servers authoritative for ancestors of the specified domain, if other options so dictate. however, if the domain ends in "+", then queries aren't issued for servers authoritative for ancestor domains of the domain. for example, with this command:
dnsviz probe -A -x example.com:ns1.example.com example.com
the com servers will be queried for DS records for example.com. but if you use this instead:
dnsviz probe -A -x example.com+:ns1.example.com example.com
no queries are performed at com servers or above, including DS records for example.com. bye bye ancestors ๐ฆ
see -s for the syntax used for designating servers. BUT unlike -s, a zone file may be specified in lieu of a server name and/or address โ in which case an instance of named(8) is started, the zone is served from that instance, and queries for the domain get directed to the local instance of named(8) serving that zone. for example, if example.com.zone is a file containing the contents of the example.com zone, you could use this command to say "yeah use the zone file":
dnsviz probe -A -x example.com:example.com.zone example.com
this option may be used multiple times on the command line. stack it, bestie โจ
this option can only be used in conjunction with -A. don't try it solo, it will not work.
-N,--delegation-informationdomain:server[,server...] โ use this delegation information for a domain, i.e., the NS and glue records for the domain, which would be served by the domain's parent. this is for testing new delegations or testing a potential change to a delegation. very "trying on outfits before the party" of you ๐
this option has similar usage to -x. the major difference? the server names you supply comprise the NS record set, and the addresses you supply represent glue records. so if there are discrepancies between the authoritative responses for the NS RRset and glue and what you supplied on the command line, an error will be reported when the output is subsequently assessed, e.g., using dnsviz-grok(1). drama will be detected ๐
in lieu of specifying the record data itself on the command line, a file may be specified, which contains the delegation NS and glue records for the domain.
-D,--dsdomain:ds[,ds...] โ use these delegation signer (DS) records for a domain. this is used in conjunction with the-Noption for testing the introduction or change of DS records.
the DS records themselves are specified using the textual representation of their record data. for example, these DS records for example.com:
31589 8 1 3490A6806D47F17A34C29E2CE80E8A999FFBE4BE
31589 8 2 CDE0D742D6998AA554A92D890F8184C698CFAC8A26FA59875A990C03E576343C
would be specified by passing this value to -D:
"31589 8 1 3490A6806D47F17A34C29E2CE80E8A999FFBE4BE, 31589 8 2 CDE0D742D6998AA554A92D890F8184C698CFAC8A26FA59875A990C03E576343C"
in lieu of specifying the record data itself on the command line, a file may be specified, which contains the DS records. for example:
dnsviz probe -D example.com:dsset-example.com.
this option must be used in conjunction with the -N option. they're a package deal, fr fr.
-n,--nsidโ use the NSID EDNS option with every DNS query issued. every single one. consistent queen ๐-e,--client-subnetsubnet[:prefix_len] โ use the EDNS Client Subnet option with every DNS query issued, using the specified subnet and prefix_len as values. if the prefix isn't specified, the prefix is the length of the entire address. defaults are doing their thing ๐ซถ-c,--cookiecookie โ send this specific DNS client cookie with every DNS query issued. the value specified is for a client cookie only and thus should be exactly 64 bits long. it's specified using hexadecimal representation, e.g.,deadbeef1580f00d. cute hex ๐
if the -c option isn't used, the default behavior is for a DNS client cookie to be generated randomly and sent with queries. if an empty string is specified, then DNS cookies are disabled. your call, babe.
-E,--ednsโ issue queries to check EDNS compatibility of servers.
if this option is used, each server probed will be queried with "future" EDNS settings, and the respective responses can later be assessed for proper behavior. these settings include future EDNS versions (i.e., > 0), unknown options, and unknown flags. sending servers into the future, lowkey iconic โญ
-o,--output-filefilename โ write the output to this file instead of to standard output, which is the default. redirect that energy ๐-p,--pretty-outputโ output"pretty"instead of minimal JSON output, i.e., using indentation and newlines. note that this is the default when the output is a TTY. glow-up for your JSON โจ-hโ display the usage and exit. help, bestie! ๐
๐ช EXIT CODES ๐ช
the exit codes are:
0โ program terminated normally. we ate and left no crumbs ๐1โ incorrect usage. you did the syntax wrong, babes ๐ญ2โ the network was unavailable for diagnostic queries. no wifi, no vibes ๐3โ there was an error processing the input or saving the output. something broke on the way in or out ๐ซ4โ program execution was interrupted, or an unknown error occurred. rude. mysterious. chaotic ๐5โ no recursive resolvers found inresolv.confnor given on command line. nobody to talk to, bestie ๐ฅฒ
๐ SEE ALSO ๐
go read the whole friend group:
and that's the whole page, bestie ๐ซถ this one's from version 0.11.1, dated 21 April 2025, and it's the dnsviz-probe(1) manual โ now go probe something and slay ๐
๐ธ
๐ฆ where this page comes from
- debian trixie: dnsviz 0.11.1-1 ยท GPL-2.0-or-later
- fedora 43: dnsviz 0.11.1-5.fc43 ยท GPL-2.0-or-later
- fedora 44: dnsviz 0.11.1-7.fc44 ยท GPL-2.0-or-later
- nixos 26.05: dnsviz 0.11.1
- ubuntu resolute: dnsviz 0.11.1-1 ยท GPL-2.0-or-later
- ubuntu stonking: dnsviz 0.11.1-1 ยท GPL-2.0-or-later
- Copyright 2015-2016 VeriSign, Inc
- Copyright 2016-2024 Casey Deccio
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms