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  }