Un avvertimento con la mia risposta (vale anche per la maggior parte degli altri): non conosco lo scopo della tua candidatura. Se si tratta di un'applicazione usa e getta per risolvere un particolare problema o per comprendere meglio la rete, per non essere mai più utilizzata, fare affidamento sulla prima lettera dell'interfaccia potrebbe essere un'ottima opzione rapida e sporca. Se stai pianificando di scrivere il prossimo concorrente su Wireshark o tcpdump, devi essere sicuro di farlo bene per tutti i tipi di casi limite.
E se l'applicazione che stai scrivendo si colloca da qualche parte tra questi estremi, solo tu (e i tuoi clienti) potete sapere con quanta cura avete bisogno per implementare la vostra logica.
Altri hanno già sottolineato che i nomi non sono mai affidabili, per una serie di motivi. Il problema finale è molto comune nel software: ipotesi di codifica rigida invece di basarsi su fatti noti / documentati.
Il secondo problema che non è stato menzionato si basa anche su un'ipotesi relativa alle vostre esigenze: che l'elenco delle interfacce che si desidera elencare sia sempre esattamente "interfacce ethernet hardware" e "interfacce wifi".
Il terzo problema è l'ennesimo presupposto: tutte le interfacce rientreranno nelle categorie a cui puoi pensare ora. Che ne dici di Infiniband, come menzionato da @ user4556274? Che ne dite di interfacce tunnel per una VPN? Che ne dici di interfacce a ponte? Che ne dici di interfacce a ponte che combinano interfacce fisiche e logiche?
Ma potrebbero esserci delle opzioni per realizzare ciò che stai cercando. Innanzitutto, definisci esattamente ciò che caratterizza un'interfaccia che desideri elencare, rispetto a quella che non hai.
Nella maggior parte dei casi, una caratteristica su cui puoi fare affidamento è la tabella di routing (tuttavia, funzionerà solo finché l'interfaccia è attiva, quindi potrebbe non essere quello che stai effettivamente cercando).
Qualsiasi interfaccia che ha una route predefinita (ovvero una route a 0.0.0.0) è probabilmente quella che stai cercando.
Si noti che anche questo si basa ancora su un presupposto, solo più affidabile: è concepibile che un sistema sia configurato per instradare tutto il traffico in uscita attraverso una macchina virtuale o un contenitore docker (ad esempio, se è presente un contenitore che esegue un firewall ). E anche il contrario è vero: un amministratore di sistema potrebbe potenzialmente bloccare il traffico esterno eliminando il percorso predefinito.
Un'altra opzione è quella di passare dall'hardware effettivo e vedere quale driver utilizza. È quindi possibile escludere alcuni driver noti