DNS library for Android and Java SE
Clone or download
Permalink
Failed to load latest commit information.
config Update copyright to 2018 Jan 17, 2018
minidns-android21 Make AndroidUsingLinkProperties.setup() return the mechanism May 4, 2018
minidns-async Introduce DnsQueryResult Jul 4, 2018
minidns-client Move DNS root server information in minidns-core Jul 22, 2018
minidns-core Add TLSA test Aug 28, 2018
minidns-dane-java7 Introduce DnsQueryResult Jul 4, 2018
minidns-dnssec Add TODO comment to Verifier Jul 24, 2018
minidns-hla Fix ResolverApi.resolveSrv(DnsName) Oct 15, 2018
minidns-integration-test Fix ResolverApi.resolveSrv(DnsName) Oct 15, 2018
minidns-iterative-resolver Move DNS root server information in minidns-core Jul 22, 2018
minidns-repl Allow DnsMessage.writeTo() to skip the length information Jul 24, 2018
misc Follow common Camel Case style for class names Apr 30, 2018
.gitignore Move MiniDNS package from de.measite.minidns into org.minidns Mar 27, 2018
.travis.yml Travis: Use gradle 4.4.1 Jan 17, 2018
LICENCE Initial commit Apr 2, 2014
LICENCE_APACHE Initial commit Apr 2, 2014
LICENCE_LGPL2.1 Initial commit Apr 2, 2014
LICENCE_WTFPL Initial commit Apr 2, 2014
README.md README: Fix "records" typo Aug 31, 2018
build.gradle build.gradle: Remove gradle-nexus-plugin May 5, 2018
gradle.properties.example Add missing property Jun 23, 2014
repl minidns-repl: Bump ammonite to 1.1.0 (and scala to 2.12.4) Mar 27, 2018
settings.gradle Create minidns-client, make minidns-core a pure functional core Mar 26, 2018
version.gradle MiniDNS 0.4.0-alpha4-SNAPSHOT Oct 15, 2018

README.md

MiniDNS - A DNSSEC enabled DNS library

Build Status Coverage Status

MiniDNS is a minimal DNS client client library for Android and Java SE. It can parse resource records (A, AAAA, NS, SRV, …) and is easy to use and extend. MiniDNS aims to be secure, modular, leightweight and as simple as possible. It also provides support for DNSSEC and DANE, and is thus the ideal resolver if you want to bring DNSSEC close to your application.

It comes with a pluggable cache mechanism, a pre-configured cache and an easy to use high-level API (minidns-hla) for those who just want to perform a reliable lookup of a domain name.

Notice: DNSSEC/DANE support has not yet undergo a security audit. If you find the project useful and if you are able to provide the resources for a security audit, then please contact us.

If you are looking for a DNSSEC-enabled resolver in C (and/or Lua) then hava a look at the Knot Resolver. Also this library is not intended to be used as a DNS server. You might want to look into dnsjava for such functionality.

MiniDNS release resources (javadoc, …) an be found at https://minidns.org/releases

Quickstart

The easiest way to use MiniDNS is by its high-level API provided by the minidns-hla Maven artifact. Simply add the artifact to your projects dependencies. For example with gradle

compile "org.minidns:minidns-hla:$minidnsVersion"

Then you can use the ResolverApi or DnssecResolverApi class to perform DNS lookups and check if the result was authenticated via DNSSEC. The following example shows a lookup of A records of 'verteiltesysteme.net'.

ResolverResult<A> result = DnssecResolverApi.INSTANCE.resolve("verteiltesysteme.net", A.class);
if (!result.wasSuccessful()) {
	RESPONSE_CODE responseCode = result.getResponseCode();
	// Perform error handling.return;
}
if (!result.isAuthenticData()) {
	// Response was not secured with DNSSEC.return;
}
Set<A> answers = result.getAnswers();
for (A a : answers) {
  InetAddress inetAddress = a.getInetAddress();
  // Do someting with the InetAddress, e.g. connect to.
  …
}

MiniDNS also provides full support for SRV resource records and their handling.

SrvResolverResult result = DnssecResolverApi.INSTANCE.resolveSrv(SrvType.xmpp_client, "example.org")
if (!result.wasSuccessful()) {
	RESPONSE_CODE responseCode = result.getResponseCode();
	// Perform error handling.return;
}
if (!result.isAuthenticData()) {
	// Response was not secured with DNSSEC.return;
}
List<ResolvedSrvRecord> srvRecords = result.getSortedSrvResolvedAddresses();
// Loop over the domain names pointed by the SRV RR. MiniDNS will return the list
// correctly sorted by the priority and weight of the related SRV RR.
for (ResolvedSrvRecord srvRecord : srvRecord) {
	// Loop over the Internet Address RRs resolved for the SRV RR. The order of
	// the list depends on the prefered IP version setting of MiniDNS.
	for (InternetAddressRR inetAddressRR : srvRecord.addresses) {
		InetAddress inetAddress = inetAddressRR.getInetAddress();
		int port = srvAddresses.port;
		// Try to connect to inetAddress at port.
		…
	}
}

REPL

MiniDNS comes with a REPL which can be used to perform DNS lookups and to test the library. Simple use ./repl to start the REPL. The loaded REPL comes with some predefined variables that you can use to perform lookups. For example c is a simple DNS client. See minidns-repl/scala.repl for more.

minidns $ ./repl
...
scala> c query ("measite.de", TYPE.A)
res0: dnsqueryresult.DnsQueryResult = DnsMessage@54653(QUERY NO_ERROR qr rd ra) { \
  [Q: measite.de.	IN	A] \
  [A: measite.de.	3599	IN	A	85.10.226.249] \
  [X: EDNS: version: 0, flags:; udp: 512]
}