Una advertencia con mi respuesta (también se aplica a la mayoría de los demás): no sé el propósito de su solicitud. Si se trata de una aplicación descartable para solucionar un problema en particular, o para comprender mejor las redes, para nunca volver a usarse, entonces confiar en la primera letra de la interfaz puede ser una excelente opción rápida y sucia. Si planea escribir el próximo competidor a Wireshark o tcpdump, debe asegurarse de hacerlo bien para todo tipo de casos extremos.
Y si la aplicación que está escribiendo cae en algún punto entre esos extremos, solo usted (y sus clientes) pueden saber con qué cuidado necesita implementar su lógica.
Otros ya han señalado que los nombres nunca son confiables, por varias razones. El último problema es muy común en el software: suposiciones de codificación dura en lugar de confiar en hechos conocidos / documentados.
El segundo problema que no se ha mencionado también se basa en una suposición acerca de sus requisitos: que la lista de interfaces que desea enumerar siempre es exactamente "interfaces de ethernet de hardware" e "interfaces wifi".
El tercer problema es otra suposición: que todas las interfaces se incluirán en las categorías que se te ocurran en este momento. ¿Qué tal Infiniband, como lo mencionó @ user4556274? ¿Qué hay de las interfaces de túnel para una VPN? ¿Qué hay de las interfaces puenteadas? ¿Qué hay de las interfaces puenteadas que combinan interfaces físicas y lógicas?
Pero puede haber opciones para lograr lo que está buscando. Primero, defina exactamente qué caracteriza una interfaz que desea enumerar, frente a una que no tiene.
En la mayoría de los casos, una característica en la que puede confiar es la tabla de enrutamiento (sin embargo, esto solo funcionará mientras la interfaz esté activa, por lo que puede no ser lo que realmente está buscando).
Es probable que cualquier interfaz que tenga una ruta predeterminada (es decir, una ruta a 0.0.0.0) sea la que está buscando.
Tenga en cuenta que incluso esto todavía se basa en una suposición, solo una más confiable: es concebible que un sistema esté configurado para enrutar todo el tráfico saliente a través de una máquina virtual o un contenedor acoplable (por ejemplo, si hay un contenedor que ejecuta un firewall) ) Y lo contrario también es cierto: un administrador de sistemas podría bloquear el tráfico externo al eliminar la ruta predeterminada.
Otra opción es ir por el hardware real y ver qué controlador usa. Luego puede excluir ciertos controladores conocidos