Skip to content

Instantly share code, notes, and snippets.

@soh335
Created January 3, 2014 03:10
Show Gist options
  • Save soh335/8231957 to your computer and use it in GitHub Desktop.
Save soh335/8231957 to your computer and use it in GitHub Desktop.
search irkit device
package main
import (
"fmt"
"github.com/soh335/go-dnssd"
"net"
"strconv"
)
func main() {
bc := make(chan *dnssd.BrowseReply)
ctx, err := dnssd.Browse(dnssd.DNSServiceInterfaceIndexAny, "_irkit._tcp", bc)
if err != nil {
fmt.Println(err)
return
}
go dnssd.Process(ctx)
for {
browseReply, ok := <-bc
if !ok {
break
}
rc := make(chan *dnssd.ResolveReply)
rctx, err := dnssd.Resolve(
dnssd.DNSServiceFlagsForceMulticast,
browseReply.InterfaceIndex,
browseReply.ServiceName,
browseReply.RegType,
browseReply.ReplyDomain,
rc,
)
if err != nil {
fmt.Println(err)
return
}
go dnssd.Process(rctx)
resolveReply, _ := <-rc
qc := make(chan *dnssd.QueryRecordReply)
qctx, err := dnssd.QueryRecord(
dnssd.DNSServiceFlagsForceMulticast,
resolveReply.InterfaceIndex,
resolveReply.FullName,
dnssd.DNSServiceType_SRV,
dnssd.DNSServiceClass_IN,
qc,
)
if err != nil {
fmt.Println(err)
return
}
go dnssd.Process(qctx)
queryRecordReply, _ := <-qc
gc := make(chan *dnssd.GetAddrInfoReply)
gctx, err := dnssd.GetAddrInfo(
dnssd.DNSServiceFlagsForceMulticast,
0,
dnssd.DNSServiceProtocol_IPv4,
resolveReply.HostTarget,
gc,
)
if err != nil {
fmt.Println(err)
return
}
go dnssd.Process(gctx)
getAddrInfoReply, _ := <-gc
fmt.Println(getAddrInfoReply.HostName, "=>", net.JoinHostPort(getAddrInfoReply.Ip, strconv.Itoa((int)(queryRecordReply.SRV().Port))))
}
}
@soh335
Copy link
Author

soh335 commented Jan 3, 2014

irkitd2a6.local. => 10.0.1.15:80

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment