From 077063c21209ad3019e1da5b731294607fe6550f Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Sat, 7 Mar 2020 21:05:00 +0300 Subject: [PATCH 1/3] util/addr: check ip addrs before return Signed-off-by: Vasiliy Tolstov --- util/addr/addr.go | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/util/addr/addr.go b/util/addr/addr.go index fafe8b56..2fa52b25 100644 --- a/util/addr/addr.go +++ b/util/addr/addr.go @@ -79,8 +79,8 @@ func Extract(addr string) (string, error) { } addrs = append(addrs, loAddrs...) - var ipAddr []byte - var publicIP []byte + var ipAddr string + var publicIP string for _, rawAddr := range addrs { var ip net.IP @@ -94,22 +94,30 @@ func Extract(addr string) (string, error) { } if !isPrivateIP(ip.String()) { - publicIP = ip + publicIP = ip.String() continue } - ipAddr = ip + ipAddr = ip.String() break } // return private ip - if ipAddr != nil { - return net.IP(ipAddr).String(), nil + if len(ipAddr) > 0 { + a := net.ParseIP(ipAddr) + if a == nil { + return "", fmt.Errorf("ip addr %s is invalid", ipAddr) + } + return a.String(), nil } // return public or virtual ip - if publicIP != nil { - return net.IP(publicIP).String(), nil + if len(publicIP) > 0 { + a := net.ParseIP(publicIP) + if a == nil { + return "", fmt.Errorf("ip addr %s is invalid", publicIP) + } + return a.String(), nil } return "", fmt.Errorf("No IP address found, and explicit IP not provided") From 55c19afb0b98eb35afb491cbaaff107e10cb25e2 Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Sat, 7 Mar 2020 21:28:48 +0300 Subject: [PATCH 2/3] registry/mdns: fix ipv6 addr in mdns registry Signed-off-by: Vasiliy Tolstov --- registry/mdns_registry.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/registry/mdns_registry.go b/registry/mdns_registry.go index fe952d22..44bb6c47 100644 --- a/registry/mdns_registry.go +++ b/registry/mdns_registry.go @@ -148,7 +148,6 @@ func (m *mdnsRegistry) Register(service *Service, opts ...RegisterOption) error continue } - // host, pt, err := net.SplitHostPort(node.Address) if err != nil { gerr = err @@ -270,10 +269,20 @@ func (m *mdnsRegistry) GetService(service string) ([]*Service, error) { Endpoints: txt.Endpoints, } } - + addr := "" + // prefer ipv4 addrs + if e.AddrV4 != nil { + addr = e.AddrV4.String() + // else use ipv6 + } else if e.AddrV6 != nil { + addr = "[" + e.AddrV6.String() + "]" + } else { + // broken endpoint + continue + } s.Nodes = append(s.Nodes, &Node{ Id: strings.TrimSuffix(e.Name, "."+p.Service+"."+p.Domain+"."), - Address: fmt.Sprintf("%s:%d", e.AddrV4.String(), e.Port), + Address: fmt.Sprintf("%s:%d", addr, e.Port), Metadata: txt.Metadata, }) From 8ecbdc1cd62ce2c875611679376eda81d23d98ff Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Sat, 7 Mar 2020 23:19:48 +0300 Subject: [PATCH 3/3] registry/mdns: add logging for invalid endpoint Signed-off-by: Vasiliy Tolstov --- registry/mdns_registry.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/registry/mdns_registry.go b/registry/mdns_registry.go index 44bb6c47..8563ecac 100644 --- a/registry/mdns_registry.go +++ b/registry/mdns_registry.go @@ -11,6 +11,7 @@ import ( "time" "github.com/google/uuid" + log "github.com/micro/go-micro/v2/logger" "github.com/micro/mdns" ) @@ -277,7 +278,7 @@ func (m *mdnsRegistry) GetService(service string) ([]*Service, error) { } else if e.AddrV6 != nil { addr = "[" + e.AddrV6.String() + "]" } else { - // broken endpoint + log.Infof("[mdns]: invalid endpoint received: %v", e) continue } s.Nodes = append(s.Nodes, &Node{