1
0
Fork 0
mirror of https://gitlab.com/pnx-tools/dns-updater.git synced 2026-06-16 05:54:56 +02:00
dns-updater/ip/helpers.go
2023-04-28 16:43:49 +02:00

49 lines
936 B
Go

package ip
import (
"errors"
"net"
)
// Resolver is a function that gets the ip from a interface name
type NetInterfaceIPResolver func(iface string) (net.IP, error)
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")
}