Hola is a minimalist Java implementation of Multicast DNS Service Discovery (mDNS-SD)
Java

README.md

Hola Build Status

Hola is a minimalist Java implementation of Multicast DNS Service Discovery (mDNS-SD). The purpose of Hola is to give Java developers a dead-simple API for finding Zeroconf-enabled services on a local network. It follows RFCs 6762 and 6763 and is compatible with Apple's Bonjour mDNS-SD implementation.

Features

Hola is a work-in-progress. The following features are currently supported:

  • Browse (synchronously) for instances of services on a local network
  • Retrieve information about discovered services, including network addresses, ports, and user-friendly names
  • Supports both IPv4 and IPv6 networks

API Example

To search for services, create a Query specifying the type of service you're looking for and the domain to search. You can execute a blocking search with the runOnce() method; this will return a set of Instance objects representing the discovered instances. As an example, the following code will search for TiVo devices on the user's local network:

public class TivoFinder {
    final static Logger logger = LoggerFactory.getLogger(TivoFinder.class);

    public static void main(String[] args) {
        try {
            Service service = Service.fromName("_tivo-mindrpc._tcp");
            Query query = Query.createFor(service, Domain.LOCAL);
            Set<Instance> instances = query.runOnce();
            instances.stream().forEach(System.out::println);
        } catch (UnknownHostException e) {
            logger.error("Unknown host: ", e);
        } catch (IOException e) {
            logger.error("IO error: ", e);
        }
    }
}

Each Instance will have a user-visible name, a set of IP addresses, a port number, and a map of attributes:

String userVisibleName = instance.getName();
Set<InetAddress> addresses = instance.getAddresses();
int port = instance.getPort();
if (instance.hasAttribute("platform")) {
    String platform = instance.lookupAttribute("platform");
}

An asynchronous run() method is planned for performing a continuous service discovery operation, but this feature is not yet implemented.

Requirements

Hola requires Java 8 or higher. It handles logging via SLF4J, so the slf4j-api.jar must also be in your Hola-enabled project's class path.

License

Hola is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.