Refactor
This commit is contained in:
parent
bd3aa5e948
commit
0f21902ffd
11 changed files with 96 additions and 80 deletions
46
ip/interface.go
Normal file
46
ip/interface.go
Normal 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")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue