s6-dns
Software
skarnet.org
The s6-dnsip4-filter program
s6-dnsip4-filter reads domain names on its standard input and
prints the corresponding IPv4 addresses on its standard output.
Interface
s6-dnsip4-filter [ -l maxlines ] [ -c maxconn ] [ -t timeout ] [ -f normalfmt ] [ -e errorfmt ]
- s6-dnsip4-filter reads lines from its stdin, processes them, and prints
the processed lines to its stdout, in the same order. It exits 0 when it
reads EOF on stdin.
- Every line starting with a domain name is processed. Lines not
starting with a domain name are not, and the formatting rules treat them
as a pure "remainder".
- For every processed line, an A query is made, and the result is
printed according to the formatting rules. The domain is not qualified
before being resolved.
- By default, s6-dnsip4-filter looks for DNS cache addresses in the
/etc/resolv.conf file. If the DNSCACHEIP environment variable is set
and contains a list of IP (v4 or v6) addresses, separated by commas,
semicolons, spaces, tabs, newlines or carriage returns, then this list
is used instead.
Options
- -l maxlines : maximum lines. s6-dnsip4-filter
will keep at most maxlines lines in memory at the same time. If line
n is still waiting for resolution and cannot be printed, then
s6-dnsip4-filter will stop reading from stdin before line n+maxlines,
until the result arrives for line n. By default, maxlines
is 256.
- -c maxconn : maximum concurrent resolutions.
s6-dnsip4-filter will perform at most maxconn resolutions in
parallel at the same time. maxlines cannot be lesser than maxconn.
By default, maxconn is 128.
- -t timeout : if any resolution takes more
than timeout milliseconds, then it is aborted and printed as a
timeout error. By default, timeout is 0, which means no timeout.
- -f normalfmt : print the positive results according to
the normalfmt format string. By default, normalfmt is
%s=%d%w%r, which means: print the original domain name, then an equal
sign, then the corresponding IPv4 address, then the remainder of the line.
- -e errorfmt : print the negative results according to
the errorfmt format string. By default, errorfmt is
%s=<%e%>%w%r, which means: print the original domain name, then an equal
sign, then the error message between angle brackets, then the remainder of the line.
Formatting rules
normalfmt and errorfmt are format strings, i.e. they tell the
program how a line must be printed. The following sequences are recognized:
- %% prints a single % character
- %s prints the original domain name
- %d prints the IP address, if any
- %e prints the error message, if any
- %w%r prints the remainder of the input line
Example
s6-dnsns google.com | s6-dnsip4-filter -f "%d"
prints all the nameserver addresses for the google.com
domain. This is useful, for instance, to give the result as an
argument to s6-dnsq.
Notes
s6-dnsip4-filter does not perform DNS resolutions itself. Instead, it forks
a skadnsd child and sends it queries, getting
the results asynchronously. The s6-dns filter programs have actually been
written as example uses of the skadns library.