{"id":16651136,"url":"https://github.com/gatkin/dnssd","last_synced_at":"2025-06-20T16:07:14.995Z","repository":{"id":57611326,"uuid":"123743034","full_name":"gatkin/dnssd","owner":"gatkin","description":"DNS Service Discovery for Go","archived":false,"fork":false,"pushed_at":"2018-03-13T02:05:15.000Z","size":66,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-19T08:27:03.918Z","etag":null,"topics":["dns-sd","go","golang","mdns","service-discovery"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gatkin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-03-04T00:23:39.000Z","updated_at":"2022-01-10T12:20:16.000Z","dependencies_parsed_at":"2022-09-15T20:51:41.023Z","dependency_job_id":null,"html_url":"https://github.com/gatkin/dnssd","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gatkin%2Fdnssd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gatkin%2Fdnssd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gatkin%2Fdnssd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gatkin%2Fdnssd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gatkin","download_url":"https://codeload.github.com/gatkin/dnssd/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243238974,"owners_count":20259132,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dns-sd","go","golang","mdns","service-discovery"],"created_at":"2024-10-12T09:23:51.215Z","updated_at":"2025-03-12T15:15:11.539Z","avatar_url":"https://github.com/gatkin.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DNS-Based Service Discovery for Go\n\n[![Go Doc](https://godoc.org/github.com/gatkin/dnssd?status.svg)](http://godoc.org/github.com/gatkin/dnssd)\n[![Build Status](https://travis-ci.org/gatkin/dnssd.svg?branch=master)](https://travis-ci.org/gatkin/dnssd)\n[![Go Report Card](https://goreportcard.com/badge/github.com/gatkin/dnssd)](https://goreportcard.com/report/github.com/gatkin/dnssd)\n\nDNS-Based service discovery, or DNS-SD ([RFC 6763](https://tools.ietf.org/html/rfc6763)), can be used to discover services on a local area network advertised over Multicast DNS, or mDNS ([RFC 6762](https://tools.ietf.org/html/rfc6762)), enabling peer-to-peer discovery.\n\nThis 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.\n\n```go\nifi, err := net.InterfaceByName(\"en0\")\nif err != nil {\n    log.Fatal(err)\n}\n\nresolver, err := dnssd.NewResolver(dnssd.AddrFamilyIPv4, []net.Interface{*ifi})\nif err != nil {\n    log.Fatal(err)\n}\ndefer resolver.Close()\n```\n\nNext, 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.\n\n```go\nresolver.BrowseService(\"_http._tcp.local.\")\nresolver.BrowseService(\"_googlecast._tcp.local.\")\n```\n\nFinally, 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.\n\n```go\ninstances := resolver.GetAllResolvedInstances()\nfor _, instance := range instances {\n    fmt.Printf(\"%v\\n\", instance)\n}\n\nchromecasts := resolver.GetResolvedInstances(\"_googlecast._tcp.local.\")\nfor _, instance := range instances {\n    fmt.Printf(\"%v\\n\", instance)\n}\n```\n\nWe can put all of this together to discover all instances of the `_http._tcp` service on the local network\n\n```go\npackage main\n\nimport (\n    \"fmt\"\n    \"log\"\n    \"net\"\n    \"time\"\n\n    \"github.com/gatkin/dnssd\"\n)\n\nfunc main() {\n    ifi, err := net.InterfaceByName(\"en0\")\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    resolver, err := dnssd.NewResolver(dnssd.AddrFamilyIPv4, []net.Interface{*ifi})\n    if err != nil {\n        log.Fatal(err)\n    }\n    defer resolver.Close()\n\n    resolver.BrowseService(\"_http._tcp.local.\")\n    resolver.BrowseService(\"_googlecast._tcp.local.\")\n\n    // Wait some time to allow all service instances to be discovered.\n    time.Sleep(1 * time.Second)\n\n    instances := resolver.GetAllResolvedInstances()\n    for _, instance := range instances {\n        fmt.Printf(\"%v\\n\", instance)\n    }\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgatkin%2Fdnssd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgatkin%2Fdnssd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgatkin%2Fdnssd/lists"}