aeus/pkg/net/ip.go

46 lines
885 B
Go

package net
import (
"net"
"strings"
)
// get internal ip
func LocalIP() string {
var (
err error
addrs []net.Addr
inters []net.Interface
)
if inters, err = net.Interfaces(); err != nil {
return ""
}
for _, inter := range inters {
if inter.Flags&net.FlagUp != net.FlagUp {
continue
}
if !strings.HasPrefix(inter.Name, "lo") {
if addrs, err = inter.Addrs(); err != nil {
continue
}
for _, addr := range addrs {
if ipNet, ok := addr.(*net.IPNet); ok && !ipNet.IP.IsLoopback() {
if ipNet.IP.To4() != nil {
return ipNet.IP.String()
}
}
}
}
}
return "localhost"
}
// extract ip address
func Extract(addr string) (string, error) {
// if addr is already specified then it's directly returned
if len(addr) > 0 && (addr != "0.0.0.0" && addr != "[::]" && addr != "::") {
return addr, nil
}
return LocalIP(), nil
}