dnssd

package module
v0.0.0-...-409b352 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 13, 2018 License: MIT Imports: 6 Imported by: 0

README

DNS-Based Service Discovery for Go

Go Doc Build Status Go Report Card

DNS-Based service discovery, or DNS-SD (RFC 6763), can be used to discover services on a local area network advertised over Multicast DNS, or mDNS (RFC 6762), enabling peer-to-peer discovery.

This library provides DNS-SD capabilities in Go. To use it, you first create a resolver by specifying the interfaces and address family on which to browse for services.

ifi, err := net.InterfaceByName("en0")
if err != nil {
    log.Fatal(err)
}

resolver, err := dnssd.NewResolver(dnssd.AddrFamilyIPv4, []net.Interface{*ifi})
if err != nil {
    log.Fatal(err)
}
defer resolver.Close()

Next, you provide the names of the services which you wish to browse for to the resolver. The same resolver can be used to browse for multiple services.

resolver.BrowseService("_http._tcp.local.")
resolver.BrowseService("_googlecast._tcp.local.")

Finally, you can query the resolver for the set of fully resolved service instances by either retrieving all resolved instances or only instances for a particular service.

instances := resolver.GetAllResolvedInstances()
for _, instance := range instances {
    fmt.Printf("%v\n", instance)
}

chromecasts := resolver.GetResolvedInstances("_googlecast._tcp.local.")
for _, instance := range instances {
    fmt.Printf("%v\n", instance)
}

We can put all of this together to discover all instances of the _http._tcp service on the local network

package main

import (
    "fmt"
    "log"
    "net"
    "time"

    "github.com/gatkin/dnssd"
)

func main() {
    ifi, err := net.InterfaceByName("en0")
    if err != nil {
        log.Fatal(err)
    }

    resolver, err := dnssd.NewResolver(dnssd.AddrFamilyIPv4, []net.Interface{*ifi})
    if err != nil {
        log.Fatal(err)
    }
    defer resolver.Close()

    resolver.BrowseService("_http._tcp.local.")
    resolver.BrowseService("_googlecast._tcp.local.")

    // Wait some time to allow all service instances to be discovered.
    time.Sleep(1 * time.Second)

    instances := resolver.GetAllResolvedInstances()
    for _, instance := range instances {
        fmt.Printf("%v\n", instance)
    }
}

Documentation

Overview

Package dnssd discovers services on a local area network over mDNS.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AddrFamily

type AddrFamily int

AddrFamily represents an address family on which to browse for services.

const (
	AddrFamilyIPv4 AddrFamily = iota
	AddrFamilyIPv6
	AddrFamilyAll
)

Indicates the address families on which to browse for services.

type Resolver

type Resolver struct {
	// contains filtered or unexported fields
}

Resolver browses for services on a local area network advertised via mDNS.

func NewResolver

func NewResolver(addrFamily AddrFamily, interfaces []net.Interface) (resolver Resolver, err error)

NewResolver creates a new resolver listening for mDNS messages on the specified interfaces.

func (*Resolver) BrowseService

func (r *Resolver) BrowseService(name string)

BrowseService adds the given service to the set of services the resolver is browsing for. This has no effect if the resolver is already browsing for the service.

func (*Resolver) Close

func (r *Resolver) Close()

Close closes the resolver and cleans up all resources owned by it.

func (*Resolver) GetAllResolvedInstances

func (r *Resolver) GetAllResolvedInstances() []ServiceInstance

GetAllResolvedInstances returns all fully resolved instances of all services being browsed for.

func (*Resolver) GetResolvedInstances

func (r *Resolver) GetResolvedInstances(serviceName string) []ServiceInstance

GetResolvedInstances returns all fully resolved instances for the specified service.

type ServiceInstance

type ServiceInstance struct {
	Address      net.IP
	InstanceName string
	Port         uint16
	ServiceName  string
	TextRecords  map[string]string
}

ServiceInstance represents a discovered instance of a service.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL