私の答えの1つの警告(他のほとんどにも適用されます):私はあなたのアプリケーションの目的を知りません。特定の問題のトラブルシューティングや、ネットワークの理解を深めるために二度と使用されない使い捨てアプリケーションである場合、インターフェイスの最初の文字に頼ることは、素早いオプションです。次の競合他社をWiresharkまたはtcpdumpに書き込む予定がある場合は、あらゆる種類のエッジケースに対応できるようにする必要があります。
また、作成中のアプリケーションがこれらの極端な範囲のどこかにある場合、ロジックを実装するためにどれだけ慎重に必要かを知ることができるのは、あなた(および顧客)だけです。
他の人たちは、いくつかの理由で名前が決して信頼できるものではないことをすでに指摘しています。究極の問題は、ソフトウェアでは非常に一般的なものです。既知/文書化された事実に依存するのではなく、前提をハードコーディングします。
言及されていない2番目の問題は、要件に関する仮定にも基づいています。リストするインターフェイスのリストは、常に「ハードウェアイーサネットインターフェイス」および「wifiインターフェイス」であるということです。
3番目の問題は、さらに別の仮定です。すべてのインターフェイスが、今考えられるカテゴリに分類されるということです。@ user4556274によると、Infinibandはどうですか?VPNのトンネルインターフェイスはどうですか?ブリッジドインターフェースはどうですか?物理インターフェースと論理インターフェースを組み合わせたブリッジインターフェースはどうですか?
しかし、探していることを達成するためのオプションがあるかもしれません。最初に、リストしたいインターフェースとそうでないインターフェースの特徴を正確に定義します。
ほとんどの場合、信頼できる特性の1つはルーティングテーブルです(ただし、これはインターフェイスが起動している間のみ機能するため、実際に探しているものではない場合があります)。
デフォルトルート(つまり、0.0.0.0へのルート)を持つインターフェースは、おそらく探しているものです。
これはまだより信頼性の高い仮定に基づいていることに注意してください:すべての送信トラフィックを仮想マシンまたはdockerコンテナー(ファイアウォールを実行しているコンテナーがある場合など)を経由するようにシステムを構成することが考えられます)。また、その逆も当てはまります。システム管理者は、デフォルトルートを削除することにより、外部のトラフィックをロックダウンする可能性があります。
別のオプションは、実際のハードウェアを調べて、使用するドライバーを確認することです。その後、特定の既知のドライバーを除外できます