Uma ressalva com a minha resposta (também se aplica à maioria das outras): não sei o objetivo do seu aplicativo. Se for um aplicativo descartável para solucionar um problema em particular, ou para entender melhor a rede, para nunca mais ser usado novamente, confiar na primeira letra da interface pode ser uma ótima opção, rápida e suja. Se você planeja escrever o próximo concorrente no Wireshark ou no tcpdump, precisa ter certeza de que está certo para todos os tipos de casos extremos.
E se o aplicativo que você está escrevendo estiver entre esses extremos, apenas você (e seus clientes) poderão saber com que cuidado você precisa implementar sua lógica.
Outros já apontaram que os nomes nunca são confiáveis, por várias razões. O problema final é muito comum no software: suposições codificadas em vez de confiar em fatos conhecidos / documentados.
A segunda questão que não foi mencionada também se baseia em uma suposição sobre seus requisitos: que a lista de interfaces que você deseja listar é sempre exatamente "interfaces Ethernet de hardware" e "interfaces Wi-Fi".
A terceira questão é mais uma suposição: que toda interface cairá nas categorias em que você pode pensar agora. Que tal Infiniband, como mencionado por @ user4556274? E as interfaces de túnel para uma VPN? E as interfaces em ponte? E as interfaces com ponte que combinam interfaces físicas e lógicas?
Mas pode haver opções para realizar o que você está procurando. Primeiro, defina exatamente o que caracteriza uma interface que você deseja listar, versus uma que você não deseja.
Na maioria dos casos, uma característica em que você pode confiar é a tabela de roteamento (no entanto, isso funcionará apenas enquanto a interface estiver ativa, portanto, pode não ser o que você está procurando).
Qualquer interface que tenha uma rota padrão (ou seja, uma rota para 0.0.0.0) provavelmente será a que você está procurando.
Observe que mesmo isso ainda é baseado em uma suposição, apenas uma mais confiável: é possível que um sistema esteja configurado para rotear todo o tráfego de saída por meio de uma máquina virtual ou de um contêiner de encaixe (por exemplo, se houver um contêiner executando um firewall ) E o contrário também é verdadeiro: um administrador de sistemas pode bloquear o tráfego externo excluindo a rota padrão.
Outra opção é seguir o hardware real e ver qual driver ele usa. Você pode excluir determinados drivers conhecidos