Uma ressalva com minha resposta (também se aplica à maioria dos outros): não sei o propósito da sua inscrição. Se for um aplicativo descartável para solucionar um problema específico 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ê está planejando escrever o próximo concorrente para o Wireshark ou o tcpdump, você precisa ter certeza de que está certo para todos os tipos de casos extremos.
E se o aplicativo que você está escrevendo estiver em algum ponto entre esses extremos, somente 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ários motivos. O problema final é muito comum no software: suposições de codificação 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 seja sempre exatamente "interfaces ethernet de hardware" e "interfaces wifi".
A terceira questão é outra suposição: que toda a interface se enquadra nas categorias que você pode imaginar agora. Como cerca de Infiniband, como mencionado por @ user4556274? Como sobre interfaces de túnel para uma VPN? Como sobre interfaces em ponte? Que tal interfaces em 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, em vez de uma que você não deseja.
Na maioria dos casos, uma característica na qual você pode confiar é a tabela de roteamento (no entanto, isso só funcionará enquanto a interface estiver ativa, então pode não ser o que você está realmente 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 mais confiável: é concebível que um sistema seja configurado para rotear todo o tráfego de saída através de uma máquina virtual ou de um contêiner docker (por exemplo, se houver um contêiner executando um firewall). E o contrário também é verdadeiro: um sysadmin poderia bloquear o tráfego externo excluindo a rota padrão.
Outra opção é ir pelo hardware real e ver qual driver ele usa. Você pode então excluir certos drivers conhecidos