MCPcopy Index your code
hub / github.com/brutella/dnssd

github.com/brutella/dnssd @v1.2.14

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.2.14 ↗ · + Follow
207 symbols 589 edges 23 files 81 documented · 39% 1 cross-repo links updated 4mo agov1.2.14 · 2024-10-22★ 2385 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

DNS-SD

Build Status

This library implements Multicast DNS and DNS-Based Service Discovery to provide zero-configuration operations. It lets you announce and find services in a specific link-local domain.

Usage

Create a mDNS responder

The following code creates a service with name "My Website._http._tcp.local." for the host "My Computer" which has all IPs from network interface "eth0". The service is added to a responder.

import (
    "context"
    "github.com/brutella/dnssd"
)

cfg := dnssd.Config{
    Name:   "My Website",
    Type:   "_http._tcp",
    Domain: "local",
    Host:   "My Computer",
    Ifaces: []string{"eth0"},,
    Port:   12345,
}
sv, _ := dnssd.NewService(cfg)

In most cases you only need to specify the name, type and port of the service.

cfg := dnssd.Config{
    Name:   "My Website",
    Type:   "_http._tcp",
    Port:   12345,
}
sv, _ := dnssd.NewService(cfg)

Then you create a responder and add the service to it.

rp, _ := dnssd.NewResponder()
hdl, _ := rp.Add(sv)

ctx, cancel := context.WithCancel(context.Background())
defer cancel()

rp.Respond(ctx)

When calling Respond the responder probes for the service instance name and host name to be unqiue in the network. Once probing is finished, the service will be announced.

Update TXT records

Once a service is added to a responder, you can use the hdl to update properties.

hdl.UpdateText(map[string]string{"key1": "value1", "key2": "value2"}, rsp)

dnssd command

The command line tool in cmd/dnssd lets you browse, register and resolve services similar to dns-sd.

Install

You can install the tool with

go install github.com/brutella/dnssd/cmd/dnssd

Usage

Registering a service on your local machine

Lets register a printer service (_printer._tcp) running on your local computer at port 515 with the name "Private Printer".

dnssd register -Name="Private Printer" -Type="_printer._tcp" -Port=515

Registering a proxy service

If the service is running on a different machine on your local network, you have to specify the hostname and IP. Lets say the printer service is running on the printer with the hostname ABCD and IPv4 address 192.168.1.53, you can register a proxy which announce that service on your network.

dnssd register -Name="Private Printer" -Type="_printer._tcp" -Port=515 -IP=192.168.1.53 -Host=ABCD

Use option -Interface, if you want to announce the service only on a specific network interface. This might be necessary if your local machine is connected to multiple subnets and your announced service is only available on a specific subnet.

dnssd register -Name="Private Printer" -Type="_printer._tcp" -Port=515 -IP=192.168.1.53 -Host=ABCD -Interface=en0

Browsing for a service

If you want to browse for a service type, you can use the browse command.

dnssd browse -Type="_printer._tcp"

Resolving a service instance

If you know the name of a service instance, you can resolve its hostname with the resolve command.

dnssd resolve -Name="Private Printer" -Type="_printer._tcp"

Conformance

This library passes the multicast DNS tests of Apple's Bonjour Conformance Test.

TODO

  • [ ] Support hot plugging
  • [ ] Support negative responses (RFC6762 6.1)
  • [ ] Handle txt records case insensitive
  • [ ] Remove outdated services from cache regularly
  • [ ] Make sure that hostnames are FQDNs

Contact

Matthias Hochgatterer

Github: https://github.com/brutella

Twitter: https://twitter.com/brutella

License

dnssd is available under the MIT license. See the LICENSE file for more info.

Extension points exported contracts — how you extend this code

Core symbols most depended-on inside this repo

Shape

Function 97
Method 88
Struct 13
FuncType 3
Interface 3
TypeAlias 3

Languages

Go100%

Modules by API surface

mdns.go40 symbols
service.go33 symbols
responder.go26 symbols
probe.go24 symbols
service_test.go12 symbols
dns.go12 symbols
probe_test.go11 symbols
cache.go10 symbols
serviceHandle.go8 symbols
browse.go7 symbols
cmd/dnssd/dnssd.go5 symbols
log/log.go3 symbols

Used by 1 indexed graphs manifest dependencies, hub-wide

For agents

$ claude mcp add dnssd \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page