1
0
Fork 0
This commit is contained in:
Henrik Hautakoski 2023-12-07 19:18:03 +01:00
parent bd3aa5e948
commit 0f21902ffd
11 changed files with 96 additions and 80 deletions

46
ip/interface.go Normal file
View file

@ -0,0 +1,46 @@
package ip
import (
"errors"
"net"
)
func GetInterfaceIP(iface_name string) (net.IP, error) {
ip := net.IP{}
iface, err := net.InterfaceByName(iface_name)
if err != nil {
return ip, err
}
addrs, err := iface.Addrs()
if err != nil {
return ip, err
}
return GetPublicIp(addrs)
}
func GetPublicIp(list []net.Addr) (net.IP, error) {
for _, addr := range list {
ip, err := AddrToIP(addr)
if err == nil && !ip.IsPrivate() {
return ip, nil
}
}
return nil, errors.New("no public ip found on interface")
}
func AddrToIP(addr net.Addr) (net.IP, error) {
switch v := addr.(type) {
case *net.IPNet:
return v.IP, nil
case *net.IPAddr:
return v.IP, nil
case *net.UDPAddr:
return v.IP, nil
case *net.TCPAddr:
return v.IP, nil
}
return nil, errors.New("could not find ip")
}