package utils import ( "errors" "fmt" "net" "strings" ) // NetworkLister List all network interface available func NetworkLister() { // Retrieve Interfaces inter, err := net.Interfaces() // Process errors if err != nil { println("[ERROR] An error occurred : " + err.Error()) return } // Display items println("\n\nNetwork interface list :") for i, val := range inter { fmt.Printf("%d. %s\n", i, val.Name) addrs, _ := val.Addrs() for _, addr := range addrs { println("-- ", addr.String()) } } print("\n") } // RetrieveIPv4FromInterface Retrieve the first IPv4 from an interface. func RetrieveIPv4FromInterface(inter string) (net.IP, error) { ief, err := net.InterfaceByName(inter) addrs, err := ief.Addrs() if err != nil { return nil, err } for _, addr := range addrs { switch v := addr.(type) { case *net.IPNet: //if !v.IP.IsLoopback() { if v.IP.To4() != nil { //Verify if IP is IPV4 return v.IP, nil } //} } } return nil, errors.New("no IPv4 found") } // IsIPv4 Check if the ip is a v4 or v6 ip func IsIPv4(addr string) bool { return strings.Count(addr, ":") < 2 }