Ein Vorbehalt mit meiner Antwort (gilt auch für die meisten anderen): Ich kenne den Zweck Ihrer Bewerbung nicht. Wenn es sich um eine wegwerfbare Anwendung handelt, um ein bestimmtes Problem zu beheben oder das Netzwerk besser zu verstehen, und die Anwendung nie wieder verwendet werden soll, ist es möglicherweise eine gute und schnelle Option, sich auf den ersten Buchstaben der Benutzeroberfläche zu verlassen. Wenn Sie planen, den nächsten Konkurrenten an Wireshark oder tcpdump zu schreiben, müssen Sie sicherstellen, dass Sie es für alle Arten von Edge Cases richtig machen.
Und wenn die Anwendung, die Sie schreiben, irgendwo zwischen diesen Extremen liegt, können nur Sie (und Ihre Kunden) wissen, wie sorgfältig Sie Ihre Logik implementieren müssen.
Andere haben bereits darauf hingewiesen, dass die Namen aus einer Reihe von Gründen niemals zuverlässig sind. Das ultimative Problem ist eines der häufigsten bei Software: Annahmen werden hartcodiert, anstatt sich auf bekannte / dokumentierte Fakten zu stützen.
Das zweite Problem, das nicht erwähnt wurde, basiert ebenfalls auf einer Annahme über Ihre Anforderungen: Die Liste der Schnittstellen, die Sie auflisten möchten, lautet immer genau "Hardware-Ethernet-Schnittstellen" und "WLAN-Schnittstellen".
Das dritte Problem ist eine weitere Annahme: Alle Benutzeroberflächen fallen in die Kategorien, die Sie sich gerade vorstellen können. Wie wäre es mit Infiniband, wie von @ user4556274 erwähnt? Wie wäre es mit Tunnelschnittstellen für ein VPN? Wie wäre es mit überbrückten Schnittstellen? Wie wäre es mit überbrückten Schnittstellen, die physische und logische Schnittstellen kombinieren?
Möglicherweise gibt es jedoch Optionen, um das zu erreichen, wonach Sie suchen. Definieren Sie zunächst genau, was eine Schnittstelle kennzeichnet, die Sie auflisten möchten, und was nicht.
Ein Merkmal, auf das Sie sich in den meisten Fällen verlassen können, ist die Routing-Tabelle (dies funktioniert jedoch nur, solange die Schnittstelle aktiv ist, sodass es möglicherweise nicht das ist, wonach Sie tatsächlich suchen).
Jede Schnittstelle, die eine Standardroute hat (dh eine Route zu 0.0.0.0), ist wahrscheinlich eine, nach der Sie suchen.
Beachten Sie, dass auch dies auf einer nur zuverlässigeren Annahme beruht: Es ist denkbar, dass ein System so konfiguriert ist, dass der gesamte ausgehende Datenverkehr über eine virtuelle Maschine oder einen Docker-Container weitergeleitet wird (z. B. wenn auf einem Container eine Firewall ausgeführt wird) ). Das Gegenteil ist der Fall: Ein Systemadministrator kann möglicherweise den externen Datenverkehr sperren, indem er die Standardroute löscht.
Eine andere Möglichkeit besteht darin, anhand der tatsächlichen Hardware herauszufinden, welcher Treiber verwendet wird. Sie können dann bestimmte bekannte Treiber ausschließen