Improve get local IP impl
This commit is contained in:
parent
6318f50b59
commit
7128572b0a
37
util/net.go
37
util/net.go
|
@ -27,42 +27,19 @@ var Net = mynet{}
|
||||||
|
|
||||||
// LocalIP gets the first NIC's IP address.
|
// LocalIP gets the first NIC's IP address.
|
||||||
func (*mynet) LocalIP() (string, error) {
|
func (*mynet) LocalIP() (string, error) {
|
||||||
tt, err := net.Interfaces()
|
addrs, err := net.InterfaceAddrs()
|
||||||
|
|
||||||
if err != nil {
|
if nil != err {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, t := range tt {
|
for _, address := range addrs {
|
||||||
aa, err := t.Addrs()
|
if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
|
||||||
|
if nil != ipnet.IP.To4() {
|
||||||
if err != nil {
|
return ipnet.IP.String(), nil
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, a := range aa {
|
|
||||||
switch ip := a.(type) {
|
|
||||||
case *net.IPAddr:
|
|
||||||
v4 := ip.IP.To4()
|
|
||||||
|
|
||||||
if v4 == nil || v4.IsLoopback() || v4.IsUnspecified() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
return v4.String(), nil
|
|
||||||
case *net.IPNet:
|
|
||||||
v4 := ip.IP.To4()
|
|
||||||
|
|
||||||
if v4 == nil || v4.IsLoopback() || v4.IsUnspecified() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
return v4.String(), nil
|
|
||||||
default:
|
|
||||||
return "", errors.New("cannot find local IP address")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return "", errors.New("cannot find local IP address")
|
return "", errors.New("can't get local IP")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue