From 416ca80a8b344c7b37e1e6a6507022ed14b79654 Mon Sep 17 00:00:00 2001 From: Mathew Kamkar <578302+matkam@users.noreply.github.com> Date: Fri, 14 Jan 2022 17:49:45 -0800 Subject: [PATCH] get all local ip addresses (#340) --- pkg/config/ip.go | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/pkg/config/ip.go b/pkg/config/ip.go index a10c0d70f..ec41211c2 100644 --- a/pkg/config/ip.go +++ b/pkg/config/ip.go @@ -30,28 +30,32 @@ func (conf *Config) determineIP() (string, error) { } // use local ip instead - return GetLocalIPAddress() + addresses, err := GetLocalIPAddresses() + if len(addresses) > 0 { + return addresses[0], err + } + return "", err } -func GetLocalIPAddress() (string, error) { +func GetLocalIPAddresses() ([]string, error) { ifaces, err := net.Interfaces() if err != nil { - return "", err + return nil, err } - // handle err - var loopBack string - for _, i := range ifaces { - addrs, err := i.Addrs() + loopBacks := []string{} + addresses := []string{} + for _, iface := range ifaces { + addrs, err := iface.Addrs() if err != nil { continue } for _, addr := range addrs { var ip net.IP - switch v := addr.(type) { + switch typedAddr := addr.(type) { case *net.IPNet: - ip = v.IP.To4() + ip = typedAddr.IP.To4() case *net.IPAddr: - ip = v.IP.To4() + ip = typedAddr.IP.To4() default: continue } @@ -59,17 +63,20 @@ func GetLocalIPAddress() (string, error) { continue } if ip.IsLoopback() { - loopBack = ip.String() + loopBacks = append(loopBacks, ip.String()) } else { - return ip.String(), nil + addresses = append(addresses, ip.String()) } } } - if loopBack != "" { - return loopBack, nil + if len(addresses) > 0 { + return addresses, nil } - return "", fmt.Errorf("could not find local IP address") + if len(loopBacks) > 0 { + return loopBacks, nil + } + return nil, fmt.Errorf("could not find local IP address") } func GetExternalIP(stunServers []string) (string, error) {