github.com/chaowen112/go-lib@v0.0.0-20231018124935-124cd26d7cbe/linkutils/link.go (about) 1 package link 2 3 import ( 4 "fmt" 5 "net" 6 7 "github.com/pkg/errors" 8 ) 9 10 func GetInterfaceIpAddr(interfaceName string) (net.IP, error) { 11 var ( 12 ief *net.Interface 13 addrs []net.Addr 14 ipv4Addr net.IP 15 ) 16 17 ief, err := net.InterfaceByName(interfaceName) 18 19 if err != nil { // get interface 20 return nil, errors.Wrap(err, "not found") 21 } 22 23 addrs, err = ief.Addrs() 24 25 if err != nil { 26 return nil, err 27 } 28 29 for _, addr := range addrs { // get ipv4 address 30 if ipv4Addr = addr.(*net.IPNet).IP.To4(); ipv4Addr != nil { 31 break 32 } 33 } 34 if ipv4Addr == nil { 35 return nil, errors.New(fmt.Sprintf("interface %s doesn't have an ipv4 address\n", interfaceName)) 36 } 37 38 return ipv4Addr, nil 39 }