Unbound
Unbound is an implementation of a DNS resolver, that performs caching and DNSSEC validation. Together with unbound, the libunbound library is provided. This library can be used to convert hostnames to ip addresses, and back, as well as obtain other information. Since the resolver allows to specify the class and type of a query (A record, NS, MX, ...), this library offers powerful resolving tool. The library also performs public-key validation of results with DNSSEC.
pyUnbound
The pyUnbound is an extension module for Python which provides an object-oriented interface to libunbound. It is the first Python module which offers thread-safe caching resolver.
The interface was designed with the emphasis on the simplicity of use. There are two main classes unbound.ub_ctx (a validation and resolution context) and unbound.ub_result which contains the validation and resolution results. The objects are thread-safe, and a context can be used in non-threaded as well as threaded environment. Resolution can be performed blocking and non-blocking (i.e. asynchronous). The asynchronous method returns from the call immediately, so that processing can go on, while the results become available later.