github.com/angenalZZZ/gofunc@v0.0.0-20210507121333-48ff1be3917b/f/net.go (about)

     1  package f
     2  
     3  import (
     4  	"log"
     5  	"net"
     6  	"strings"
     7  )
     8  
     9  // IP get internal IPs.
    10  func IP(prefixList ...string) (ip []string) {
    11  	adders, err := net.InterfaceAddrs()
    12  	if err != nil {
    13  		log.Fatal("Oops: " + err.Error())
    14  	}
    15  
    16  	i := len(prefixList)
    17  	for _, addr := range adders {
    18  		if ipNet, ok := addr.(*net.IPNet); ok && !ipNet.IP.IsLoopback() {
    19  			if ipNet.IP.To4() != nil {
    20  				s := ipNet.IP.String()
    21  				if i == 0 {
    22  					ip = append(ip, s)
    23  					continue
    24  				}
    25  				for _, prefix := range prefixList {
    26  					if strings.HasPrefix(s, prefix) {
    27  						ip = append(ip, s)
    28  					}
    29  				}
    30  			}
    31  		}
    32  	}
    33  	return
    34  }