Одно предостережение с моим ответом (относится и к большинству других): я не знаю цели вашего заявления. Если это одноразовое приложение для устранения одной конкретной проблемы или для лучшего понимания работы сети, которое никогда не будет использоваться снова, то использование первой буквы интерфейса может быть отличным вариантом для быстрого и грязного использования. Если вы планируете записать следующего конкурента в Wireshark или tcpdump, вы должны быть уверены, что получите его правильно для всех видов крайних случаев.
И если приложение, которое вы пишете, находится где-то между этими крайностями, только вы (и ваши клиенты) могут знать, насколько тщательно вам нужно реализовать свою логику.
Другие уже указывали, что имена никогда не бывают достоверными по ряду причин. Конечная проблема очень распространена в программном обеспечении: жесткие предположения вместо того, чтобы полагаться на известные / документированные факты.
Вторая проблема, которая не была упомянута, также основана на предположении о ваших требованиях: список интерфейсов, которые вы хотите перечислить, это всегда именно «аппаратные интерфейсы Ethernet» и «интерфейсы wifi».
Третья проблема - это еще одно предположение: все интерфейсы попадут в категории, о которых вы можете подумать прямо сейчас. Как насчет Infiniband, как упомянуто @ user4556274? Как насчет туннельных интерфейсов для VPN? Как насчет мостовых интерфейсов? Как насчет мостовых интерфейсов, которые объединяют физические и логические интерфейсы?
Но могут быть варианты, чтобы выполнить то, что вы ищете. Во-первых, определите, что именно характеризует интерфейс, который вы хотите перечислить, а не тот, который вы не хотите.
В большинстве случаев одной характеристикой, на которую можно положиться, является таблица маршрутизации (однако она будет работать только до тех пор, пока работает интерфейс, поэтому она может не соответствовать тому, что вы на самом деле ищете).
Любой интерфейс, который имеет маршрут по умолчанию (т. Е. Маршрут к 0.0.0.0), вероятно, будет тем, который вы ищете.
Обратите внимание, что даже это по-прежнему основано на предположении, только более надежном: возможно, что система настроена на маршрутизацию всего исходящего трафика через виртуальную машину или док-контейнер (например, если есть контейнер с брандмауэром) ). И обратное также верно: системный администратор может заблокировать внешний трафик, удалив маршрут по умолчанию.
Другой вариант - перейти к реальному оборудованию и посмотреть, какой драйвер он использует. Вы можете исключить некоторых известных водителей