Lookup by domain

This commit is contained in:
Neil Alexander 2020-05-09 21:57:08 +01:00
parent 7453c1cc06
commit 8c741e0e5a
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
3 changed files with 17 additions and 6 deletions

2
go.mod
View file

@ -11,7 +11,7 @@ require (
github.com/kardianos/minwinsvc v0.0.0-20151122163309-cad6b2b879b0
github.com/miekg/dns v1.1.27 // indirect
github.com/mitchellh/mapstructure v1.1.2
github.com/neilalexander/mdns v0.3.1-0.20200509190551-a13500818a93
github.com/neilalexander/mdns v0.3.1-0.20200509205547-9b2aa0712e91
github.com/vishvananda/netlink v1.0.0
github.com/vishvananda/netns v0.0.0-20190625233234-7109fa855b0f // indirect
golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d

4
go.sum
View file

@ -30,8 +30,8 @@ github.com/miekg/dns v1.1.27 h1:aEH/kqUzUxGJ/UHcEKdJY+ugH6WEzsEBBSPa8zuy1aM=
github.com/miekg/dns v1.1.27/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/neilalexander/mdns v0.3.1-0.20200509190551-a13500818a93 h1:XjPDiOX2MoRURK2OOa+5DeI6SVK+4WQdwXV3OI2C67Q=
github.com/neilalexander/mdns v0.3.1-0.20200509190551-a13500818a93/go.mod h1:aJ6mgvEacXD+y9JGp8jMaF8wcsTuSvR4YMU6agygcPQ=
github.com/neilalexander/mdns v0.3.1-0.20200509205547-9b2aa0712e91 h1:8/a+BIe+29iQPVAjHai+kvVHsiIAzTEHpxyF+ns3qi0=
github.com/neilalexander/mdns v0.3.1-0.20200509205547-9b2aa0712e91/go.mod h1:aJ6mgvEacXD+y9JGp8jMaF8wcsTuSvR4YMU6agygcPQ=
github.com/vishvananda/netlink v1.0.0 h1:bqNY2lgheFIu1meHUFSH3d7vG93AFyqg3oGbJCOJgSM=
github.com/vishvananda/netlink v1.0.0/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk=
github.com/vishvananda/netns v0.0.0-20190625233234-7109fa855b0f h1:nBX3nTcmxEtHSERBJaIo1Qa26VwRaopnZmfDQUXsF4I=

View file

@ -1,6 +1,7 @@
package mdns
import (
"bytes"
"encoding/hex"
"errors"
"fmt"
@ -36,6 +37,7 @@ type MDNS struct {
type mDNSServer struct {
mdns *MDNS
ourIP net.IP
intf net.Interface
server *mdns.Server
listener *yggdrasil.TcpListener
@ -282,6 +284,7 @@ func (m *MDNS) _startInterface(intf net.Interface, addr string) error {
m._servers[intf.Name][addr] = &mDNSServer{
mdns: m,
intf: intf,
ourIP: tcpaddr.IP,
stop: make(chan struct{}),
server: server,
listener: listener,
@ -323,7 +326,8 @@ func (s *mDNSServer) listen() {
incoming := make(chan *mdns.ServiceEntry)
go func() {
if err := mdns.Listen(incoming, s.stop, &s.intf); err != nil {
defer close(s.stop)
if err := mdns.Lookup(MDNSService, MDNSDomain, incoming); err != nil {
s.mdns.log.Errorln("Failed to initialize resolver:", err.Error())
}
}()
@ -334,10 +338,17 @@ func (s *mDNSServer) listen() {
s.mdns.log.Debugln("Stopped listening for mDNS on", s.intf.Name)
break
case entry := <-incoming:
if entry.AddrV6.IP.IsLinkLocalUnicast() && entry.AddrV6.Zone == "" {
if bytes.Equal(entry.Addr, s.ourIP) {
s.mdns.log.Warnln("That's us")
continue
}
addr := fmt.Sprintf("tcp://%s:%d", entry.AddrV6.IP, entry.Port)
if entry.AddrV6.IP.IsLinkLocalUnicast() && entry.AddrV6.Zone == "" {
s.mdns.log.Warnln("Not link-local")
continue
}
addr := fmt.Sprintf("tcp://[%s]:%d", entry.AddrV6.IP, entry.Port)
s.mdns.log.Println("Calling", addr, "via", entry.AddrV6.Zone)
if err := s.mdns.core.CallPeer(addr, entry.AddrV6.Zone); err != nil {
s.mdns.log.Warn("Failed to add peer from mDNS: ", err)
}