Одне застереження з моєю відповіддю (стосується і більшості інших): Я не знаю мети вашої заяви. Якщо це викидне додаток для усунення однієї конкретної проблеми або для кращого розуміння мереж, більше ніколи не використовуватися, то покладаючись на першу букву інтерфейсу може бути чудовим швидким і брудним варіантом. Якщо ви плануєте написати наступного конкурента на Wireshark або tcpdump, вам потрібно бути впевненим, що ви правильно його вирішите для всіх видів крайових справ.
І якщо програма, яку ви пишете, потрапляє десь між цими крайнощами, тільки ви (і ваші клієнти) можете знати, як ретельно вам потрібно реалізувати свою логіку.
Інші вже вказували, що імена ніколи не є достовірними з будь-якої кількості причин. Кінцева проблема є дуже поширеною у програмному забезпеченні: жорстке кодування припущень замість того, щоб покладатися на відомі / задокументовані факти.
Друге питання, про яке не згадувалося, також ґрунтується на припущенні щодо ваших вимог: що список інтерфейсів, який ви хочете перелічити, завжди є саме "апаратними інтерфейсами Ethernet" та "wifi інтерфейсами".
Третє питання - це ще одне припущення: весь інтерфейс потрапить до категорій, про які ви можете думати зараз. Як щодо Infiniband, як згадував @ user4556274? Як щодо інтерфейсів тунелю для VPN? Як щодо мостових інтерфейсів? Як щодо мостових інтерфейсів, що поєднують фізичний та логічний інтерфейси?
Але можуть бути варіанти зробити те, що ви шукаєте. По-перше, визначте, що саме характеризує інтерфейс, який ви хочете перелічити, порівняно з тим, який ви не маєте.
У більшості випадків однією характеристикою, на яку можна покластися, є таблиця маршрутизації (однак, це працюватиме лише до тих пір, поки інтерфейс не працює, тому він може бути не тим, що ви насправді шукаєте).
Будь-який інтерфейс, який має маршрут за замовчуванням (тобто маршрут до 0,0.0.0), швидше за все, буде таким, який ви шукаєте.
Зауважте, що навіть це все ще базується на припущенні, просто більш надійному: можливо, система налаштована для маршрутизації всього вихідного трафіку через віртуальну машину або контейнер докер (наприклад, якщо контейнер працює з брандмауером) ). І зворотне також вірно: sysadmin може потенційно заблокувати зовнішній трафік, видаливши маршрут за замовчуванням.
Ще один варіант - пройти власне обладнання та подивитися, який драйвер він використовує. Потім можна виключити певні відомі драйвери