1 <html><head><title>adns - advanced, alternative, asynchronous resolver</title>
2 <link rev="made" href="mailto:adns-maint@chiark.greenend.org.uk">
3 <meta name="keywords" content="adns">
8 <strong>Advanced, easy to use, asynchronous-capable DNS client
9 library and utilities.</strong>
11 <!-- Note: this file must contain portable HTML ! -->
13 <!-- It is served on the GNU site and also from my own system, -->
14 <!-- under the URL http://www.chiark.greenend.org.uk/adns/ -->
15 <!-- Please ensure that all links continine to be correct -->
16 <!-- both for www.gnu.org and chiark. -->
22 adns is a resolver library for C (and C++) programs, and a collection
23 of useful DNS resolver utilities.
28 In contrast with the standard interfaces, gethostbyname et al and
29 libresolv, it has the following features:
33 <li>It is reasonably easy to use for simple programs which just want
34 to translate names to addresses, look up MX records, etc.
36 <li>It can be used in an asynchronous, non-blocking, manner. Many
37 queries can be handled simultaneously.
39 <li>Responses are decoded automatically into a natural representation
40 for a C program - there is no need to deal with DNS packet and RRDATA
43 <li>Sanity checking (eg, name syntax checking, reverse/forward
44 correspondence, CNAME pointing to CNAME) is performed automatically
47 <li>Time-to-live, CNAME and other similar information is returned in
48 an easy-to-use form, without getting in the way.
50 <li>There is no global state in the library; resolver state is an
51 opaque data structure which the client creates explicitly. A program
52 can have several instances of the resolver.
54 <li>Errors are reported to the application in a way that distinguishes
55 the various causes of failure properly.
57 <li>adns understands conventional resolv.conf, but this can overridden
58 by environment variables.
60 <li>Flexibility. For example, the application can tell adns to:
61 ignore environment variables (for setuid programs), disable hostname
62 syntax sanity checks to return arbitrary data, override or ignore
63 resolv.conf in favour of supplied configuration, etc.
65 <li>Believed to be correct ! For example, will correctly back off to
66 TCP in case of long replies or queries, or to other nameservers if
67 several are available. It has sensible handling of bad responses etc.
71 <h2>DNS utility programs</h2>
73 adns also comes with a number of utility programs for use from the
74 command line and in scripts:
78 <li><code>adnslogres</code> is a much faster version of Apache's
81 <li><code>adnsresfilter</code> is a filter which copies its input to
82 its output, replacing IP addresses by the corresponding names, without
83 unduly delaying the output. For example, you can usefully pipe the
84 output of netstat -n, tcpdump -ln, and the like, into it.
86 <li><code>adnshost</code> is a general-purpose DNS lookup utility
87 which can be used easily in from the command line and from shell
88 scripts to do simple lookups. In a more advanced mode it can be used
89 as a general-purpose DNS helper program for scripting languages which
90 can invoke and communicate with subprocesses. See the
91 <A href="adnshost.txt">adnshost
92 usage message</A> for a summary of its capabilities.
96 <h2>Documentation</h2>
98 I'm afraid there is no manual yet. However, competent C programmers
99 should be able to use the library based on the
100 <A href="adns.h.txt">commented
101 adns.h header file</A>, and the usage messages for the programs should
106 I'd be pleased if you would let me know if you're using my library in
107 your project, and what you think of it.
111 Bug reports should be reported to the
112 <a href="http://debbugs.gnu.org/">GNU Debbugs</a>. Send an email
113 to <code>submit@debbugs.gnu.org</code> and at the top of your email,
114 in a paragraph of its own, write the single line
118 Your bug report will be published via to the adns-discuss list.
122 Feedback and discussion takes place on the <code>adns-discuss</code>
123 list. You can mail me privately
124 at <code>ijackson@chiark.greenend.org.uk</code>.
126 <h2>Mailinglists</h2>
128 I have set up mailinglists <code>adns-announce</code> and
129 <code>adns-discuss</code>. The announcements list is moderated and
130 will contain only announcements of important bugs, new versions, etc.
135 <A href="http://www.chiark.greenend.org.uk/mailman/listinfo">archives
136 and subscription web pages</A>, or you can subscribe by sending mail
137 containing the word `subscribe' to
138 <code>adns-announce-REQUEST@chiark.greenend.org.uk</code> or
139 <code>adns-discuss-REQUEST@chiark.greenend.org.uk</code>.
141 <h2>Documentation</h2>
144 <li><A href="adns.h.txt">adns.h
145 API header file with documentation comments</A>
146 <li><A href="adnshost.txt">usage
147 message for adnshost</A>
150 <h2>Download and source code</h2>
153 <li>The <A href="http://www.chiark.greenend.org.uk/~ian/adns/adns.tar.gz">current
154 release</A> as a gzipped tarfile.
155 <li><A href="http://www.chiark.greenend.org.uk/~ian/adns/ftp/">Previous
156 versions</A> and other files (including OpenPGP signatures).
157 <li><A href="http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git/adns.git/">master
158 git (version control) repository browser</a>.
161 adns is also available from the
162 <A href="http://www.gnu.org/">GNU Project</A> FTP servers and their
163 <A href="http://www.gnu.org/order/ftp.html">mirrors</A>.
165 <h2>Installation note</h2>
167 adns requires a real nameserver like BIND running on the same system
168 or a nearby one, which must be willing to provide `recursive service'.
169 I.e., adns is a `stub resolver'.
172 adns requires that your real nameserver is on the same machine, or
173 connected via a secure network, so that an attacker cannot fake the
174 replies to adns's queries.
176 <h2>References and related projects</h2>
179 <li><a href="http://code.google.com/p/adns-python">Python bindings</a>
181 <!-- <li><a href="http://cryp.to/hsdns/">Haskell bindings</a>
183 <li><a href="http://www.lysator.liu.se/liboop/">liboop event loop library</a>
184 has a built-in binding for adns.
185 <li><a href="http://adns.jgaa.com/">port to MS Visual Studio 6 C++</a>
189 <h2>Copyright and licensing</h2>
191 <kbd>adns</kbd> is Copyright 1997-2000,2003,2006,2014 Ian Jackson,
192 Copyright 2014 Mark Wooding, Copyright 1999-2000,2003,2006 Tony Finch,
193 and Copyright (C) 1991 Massachusetts Institute of Technology.
197 <kbd>adns</kbd> is free software; you can redistribute it and/or modify
198 it under the terms of the GNU General Public License as published by
199 the Free Software Foundation; either version 3 of the License, or (at
200 your option) any later version.
204 This program and documentation is distributed in the hope that it will
205 be useful, but <em>without any warranty</em>; without even the implied
206 warranty of <em>merchantability</em> or <em>fitness for a particular
207 purpose</em>. See the
208 <A href="COPYING.txt">GNU
209 General Public License</A> for more details.
213 You should have received a copy of the GNU General Public License
214 along with <kbd>adns</kbd>, or one should be available above; if not,
215 write to the <A href="http://www.fsf.org/">Free Software Foundation</A>
216 or email <code>ijackson@chiark.greenend.org.uk</code>.
221 Ian Jackson / <tt>ijackson@chiark.greenend.org.uk</tt>.
224 <A href="http://www.gnu.org/">GNU home page</A>;
225 <A href="http://www.chiark.greenend.org.uk/">chiark home page</A>;
226 <A href="/">site or mirror home page</A>
229 This web page is Copyright (C)1996-2005,2014 Ian Jackson. See the
230 <A href="http://www.chiark.greenend.org.uk/~ian/sw-www-copy.html">Copyright/acknowledgements</A>.