Ich möchte herausfinden, welche der verfügbaren Netzwerkdienste (z. B. Ethernet oder Wi-Fi ) derzeit aktiv sind. In diesem Screenshot aus den Netzwerkeinstellungen können Sie sehen, dass Wi-Fi derzeit aktiv ist (der grüne Punkt):
Wie kann ich diese Informationen über die Befehlszeile abrufen?
Mit dem networksetup
Befehl kann ich die verfügbaren Netzwerkdienste auflisten:
$ networksetup -listallnetworkservices
An asterisk (*) denotes that a network service is disabled.
Ethernet
FireWire
Wi-Fi
Es können auch einige Details zum Dienst angezeigt werden, z. B. der Gerätename:
$ networksetup -listnetworkserviceorder
An asterisk (*) denotes that a network service is disabled.
(1) Ethernet
(Hardware Port: Ethernet, Device: en0)
(2) FireWire
(Hardware Port: FireWire, Device: fw0)
(3) Wi-Fi
(Hardware Port: Wi-Fi, Device: en1)
Leider ist die Information, welcher Dienst aktiv ist (der grüne Punkt auf dem Screenshot), in dieser Information nicht verfügbar. Gibt es einen anderen Befehl, mit dem ich diese Informationen abrufen kann?
status
Feld mitactive
oderinactive
als Wert.ifconfig | grep $(networksetup -listnetworkserviceorder | grep 'Ethernet, Device' | sed -E "s/.*(en[0-9]).*/\1/")
. Dann kann ich den Standort wechseln, wenn das oben Gesagte leer ist.Alles in allem habe ich ein Skript geschrieben, um diese Aufgabe zu erfüllen:
Das Skript ruft zuerst eine Dienstliste vom
networksetup
Befehl ab und prüft dann, ob sich jeder Dienst im aktiven Status von befindetifconfig
.Nennen Sie das Skript
networkservice.sh
beispielsweise so, dass es ausgeführt wird, um den aktuellen Netzwerkdienst abzurufen, auf dem Sie sich befinden.quelle
tac
umleiten, um die Schnittstellen in umgekehrter Reihenfolge zu durchlaufen, da ich häufig WLAN sowie einen USB-Ethernet-Adapter (der das bevorzugte Gerät im Netzwerk ist) angeschlossen habe. In diesem Fall möchte ich, dass das am meisten bevorzugte aktiveservices=$(networksetup -listnetworkserviceorder | grep 'Hardware Port' | tac)
networksetup -listnetworkserviceorder
gibt bereits "das am meisten bevorzugte Gerät" zuerst aus ...tac
damit später (nicht bevorzugte) Dienste nicht überschreiben$currentservice
. Sollte in diesem ursprünglichen Kommentar klarer sein.Mit diesem
scutil --dns
Befehl erhalten Sie alle Netzwerk-Routing-Informationen, die Sie zum Zuordnen von Hardwareschnittstellenbezeichnungen zu Netzwerkrouten benötigen.Ein wenig
awk
undgrep
kann es hübsch machen, wenn Sie die Informationen skripten oder abschneiden müssen. Beginnen Sie mit der Suche nach "if_index", wenn Sie neugierig sind.quelle
Ich werde nicht vorgeben, die Antwort auf diese Frage sortiert zu haben, aber dies, aber das ist vielleicht hilfreich.
Sie können sich fragen, wie Pakete derzeit an etwas weitergeleitet werden:
Und dann können Sie fragen, welcher "Netzwerkdienst" diese Schnittstelle verwaltet:
Aber ehrlich gesagt bezweifle ich, dass ein "Netzwerkdienst" eins zu eins mit einem Hardware-Port ist. Einige Schnittstellen, z. B. tun0, verfügen nicht über einen "Netzwerkdienst". Zumindest manchmal nicht.
quelle
Wenn nur jemand anderes darüber stolpert, wie ich es getan habe, könnte der folgende Code eher das sein, wonach Sie suchen.
Hiermit wird die Antwort von PeterVP erweitert
Auch sichtbar unter https://www.kittell.net/code/mac-os-x-get-network-information/
quelle
set public (dig +short myip.opendns.com @resolver1.opendns.com)
Folgendes ersetzt: Mein Grund dafür ist, dass ein DNS-Server (wie opendns) mit geringerer Wahrscheinlichkeit nicht verfügbar ist als eine Website und schneller ist. Und ich habe die Schlafanweisung entfernt. Warten Sie nicht auf die Antwort des DNS-Servers. Ausführungszeit für mein Skript 177 ms. Ihre dauert 5,237 Sekunden, macht aber natürlich mehr. Immer noch ein großer Unterschied.Entnommen aus Find Detailed Wi-Fi Connection History über die Befehlszeile von Mac OS X | OSXDaily :
Sie erhalten viele Informationen zum Verlauf der Verbindungen, einschließlich der Details für die aktuelle Verbindung.
Nicht perfekt, aber Sie erhalten die Informationen, die Sie suchen - und viele zusätzliche Informationen mehr!
quelle
Hier ist ein Skript für Fischschalen, das ich geschrieben habe:
Es zeigt alle aktiven Netzwerkschnittstellen und relevanten Daten.
Kommentieren Sie, was Sie nicht wollen / brauchen
quelle
echo_italic
Shell-Funktion zu definieren, als all dieseecho
s inset_color
Aufrufe zu packen.set_color
Befehle können entfernt werden. Sie sind nur "dekorativ".set_color
Befehle entfernt und Variablen in echo-AnweisungenIch bin mir nicht sicher, ob dies für jemanden hilfreich ist, aber als ich an der gleichen Frage bastelte, kam ich zu dieser Lösung:
ifconfig | grep flags=8863 | grep -v bridge
Die Ausgabe sieht ungefähr so aus und listet nur die Ethernet-Ports und das WLAN auf, die aktiv verwendet werden:
Wenn Sie auch die zugewiesene IPv4-Adresse sehen möchten:
ifconfig | grep 'flags=8863\|inet ' | grep -v 'bridge\|127.0.0.1'
Was so etwas hervorbringt;
Eine andere Alternative:
scutil --nwi
Was die Online-Netzwerkgeräte zeigt, zeigt die letzte Zeile tatsächlich die aktuell aktiven Netzwerkschnittstellen:
Die weitere Bearbeitung, falls erforderlich, liegt bei Ihnen. :-)
Hinweis:
Wohlgemerkt, ich bin kein Kenner der Flaggen (8863). Sie können die Flagge Details in dem finden if.h Header - Datei - Spotlight ist dein Freund „if.h“ zu finden. Ich habe meine zum Beispiel hier gefunden:
was Ihnen zeigt, was die Flags bedeuten (beachten Sie: hexadezimal);
quelle