code: func (n *Networking) GetIfacesByIP(ifaceIP net.IP) ([]net.Interface, error) {
  	ifaces, err := net.Interfaces()
  	if err != nil {
  		return nil, err
  	}
  
  	searchAddr := strings.Split(ifaceIP.String(), "/")[0]
  	resultInterfaces := make([]net.Interface, 0)
  
  	for _, iface := range ifaces {
  		if iface.Flags&net.FlagLoopback != 0 {
  			continue
  		}
  
  		addrs, err := iface.Addrs()
  		if err != nil {
  			return nil, errwrap.Wrap(fmt.Errorf("cannot get addresses for interface %v", iface.Name), err)
  		}
  
  		for _, addr := range addrs {
  			currentAddr := strings.Split(addr.String(), "/")[0]
  			if searchAddr == currentAddr {
  				resultInterfaces = append(resultInterfaces, iface)
  				break
  			}
  		}
  	}
  
  	if len(resultInterfaces) == 0 {
  		return nil, fmt.Errorf("no interface found with IP %q", ifaceIP)
  	}
  
  	return resultInterfaces, nil
  }
docs: // GetIfacesByIP searches for and returns the interfaces with the given IP
  // Disregards the subnet mask since not every net.IP object contains
  // On success it will return the list of found interfaces