Une mise en garde avec ma réponse (s'applique à la plupart des autres aussi): je ne connais pas le but de votre candidature. S'il s'agit d'une application jetable pour résoudre un problème particulier ou pour mieux comprendre la mise en réseau, pour ne plus jamais être utilisée, alors s'appuyer sur la première lettre de l'interface peut être une excellente option rapide et sale. Si vous envisagez d'écrire le prochain concurrent sur Wireshark ou tcpdump, vous devez être sûr de le faire pour toutes sortes de cas de bord.
Et si l'application que vous écrivez se situe quelque part entre ces extrêmes, vous seul (et vos clients) pouvez savoir avec quelle prudence vous devez mettre en œuvre votre logique.
D'autres ont déjà souligné que les noms ne sont jamais fiables, pour un certain nombre de raisons. Le problème ultime est très courant dans le logiciel: les hypothèses de codage en dur au lieu de s'appuyer sur des faits connus / documentés.
Le deuxième problème qui n'a pas été mentionné est également basé sur une hypothèse concernant vos besoins: que la liste des interfaces que vous souhaitez répertorier est toujours exactement «interfaces Ethernet matérielles» et «interfaces wifi».
Le troisième problème est une autre hypothèse: toutes les interfaces tomberont dans les catégories auxquelles vous pouvez penser en ce moment. Qu'en est-il d'Infiniband, comme mentionné par @ user4556274? Que diriez-vous des interfaces de tunnel pour un VPN? Et les interfaces pontées? Que diriez-vous des interfaces pontées qui combinent des interfaces physiques et logiques?
Mais il peut y avoir des options pour accomplir ce que vous recherchez. Tout d'abord, définissez exactement ce qui caractérise une interface que vous souhaitez lister, par rapport à une interface que vous n'avez pas.
Dans la plupart des cas, une caractéristique sur laquelle vous pouvez compter est la table de routage (cependant, cela ne fonctionnera que tant que l'interface est en place, donc ce n'est peut-être pas ce que vous recherchez réellement).
Toute interface qui a une route par défaut (c'est-à-dire une route vers 0.0.0.0) est probablement celle que vous recherchez.
Notez que même cela est toujours basé sur une hypothèse, juste une plus fiable: il est concevable qu'un système soit configuré pour acheminer tout le trafic sortant via une machine virtuelle ou un conteneur Docker (par exemple, s'il existe un conteneur exécutant un pare-feu ). Et l'inverse est également vrai: un administrateur système peut potentiellement bloquer le trafic extérieur en supprimant l'itinéraire par défaut.
Une autre option consiste à utiliser le matériel réel et à voir quel pilote il utilise. Vous pouvez ensuite exclure certains pilotes connus