Chciałbym dowiedzieć się, która z dostępnych usług sieciowych (np. Ethernet lub Wi-Fi ) jest obecnie aktywna. Na tym zrzucie ekranu w Preferencjach sieciowych widać, że Wi-Fi jest obecnie aktywne (zielona kropka):
Jak mogę uzyskać te informacje z wiersza poleceń?
networksetup
Komenda pozwala mi listę dostępnych usług sieciowych:
$ networksetup -listallnetworkservices
An asterisk (*) denotes that a network service is disabled.
Ethernet
FireWire
Wi-Fi
Może także wyświetlać niektóre szczegóły usługi, takie jak nazwa urządzenia:
$ 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)
Niestety informacje o aktywnej usłudze (zielona kropka na zrzucie ekranu) nie są dostępne w tych informacjach. Czy istnieje inne polecenie, którego można użyć, aby uzyskać te informacje?
status
pole, które maactive
alboinactive
wartość.ifconfig | grep $(networksetup -listnetworkserviceorder | grep 'Ethernet, Device' | sed -E "s/.*(en[0-9]).*/\1/")
. Następnie mogę zmieniać lokalizacje w oparciu o powyższe, że są puste.Podsumowując, napisałem skrypt, aby wykonać to zadanie:
Skrypt najpierw pobiera listę usług z
networksetup
polecenia, a następnie sprawdza, czy każda usługa jest w stanie aktywnym odifconfig
.Nazwij skrypt
networkservice.sh
na przykład, a następnie uruchom go, aby uzyskać bieżącą usługę sieciową, z której korzystasz.źródło
tac
iterować przez interfejsy w odwrotnej kolejności, ponieważ często mam podłączone WiFi, a także adapter Ethernet Ethernet (który jest preferowanym urządzeniem w sieci). W tym przypadku chcę wydrukować najbardziej preferowane aktywne urządzenie:services=$(networksetup -listnetworkserviceorder | grep 'Hardware Port' | tac)
networksetup -listnetworkserviceorder
najpierw wypisuje „najbardziej preferowane urządzenie” ...tac
tak, aby późniejsze (niepreferencyjne) usługi nie były nadpisywane$currentservice
. Powinien być jaśniejszy w tym oryginalnym komentarzu.To
scutil --dns
polecenie zawiera wszystkie informacje o routingu sieciowym potrzebne do mapowania etykiet interfejsu sprzętowego na trasy sieciowe.Trochę
awk
igrep
może to urozmaicić, jeśli musisz napisać informacje lub parsować je. Zacznij od chwytania dla „if_index”, jeśli jesteś ciekawy.źródło
Nie będę udawał, że mam odpowiedź na to pytanie, ale to, ale może być pomocne.
Możesz zapytać, jak obecnie przekieruje pakiety do czegoś:
Następnie możesz zapytać, co „usługa sieciowa” zarządza tym interfejsem:
Ale szczerze mówiąc, wątpię, aby „Usługi sieciowe” były jeden do jednego z portem sprzętowym. Niektóre interfejsy, na przykład tun0, nie mają „usługi sieciowej”. Cóż, przynajmniej czasami nie.
źródło
Wystarczy, że ktoś natknie się na to, tak jak zrobiłem poniższy kod, może być więcej tego, czego szukasz.
Ma to na celu rozwinięcie odpowiedzi PeterVP
Widoczny również na https://www.kittell.net/code/mac-os-x-get-network-information/
źródło
set public (dig +short myip.opendns.com @resolver1.opendns.com)
argumentami : Moim powodem jest to, że serwer dns (taki jak opendns) ma mniejsze szanse na awarię niż strona internetowa i jest szybszy. I usunąłem oświadczenie dotyczące snu. Nie trzeba czekać na odpowiedź serwera DNS. Czas wykonania mojego skryptu 177 ms. Twój trwa 5,237 sekund, ale oczywiście więcej. Wciąż duża różnica.Zaczerpnięte ze Znajdź szczegółową historię połączeń Wi-Fi z wiersza poleceń Mac OS X | OSXDaily :
Otrzymasz wiele informacji na temat historii połączeń, w tym szczegóły dotyczące bieżącego.
Nie idealnie, ale masz informacje, których szukasz - i wiele dodatkowych informacji więcej!
źródło
Oto skrypt skorupy ryby, który napisałem:
Pokazuje wszystkie aktywne interfejsy sieciowe i odpowiednie dane.
Skomentuj, czego nie chcesz / potrzebujesz
źródło
echo_italic
powłoki zamiast owijać wszystkie teecho
znaki wset_color
wywołania.set_color
polecenia można usunąć. Są po prostu „dekoracyjne”.set_color
polecenia i wstawiono zmienne do instrukcji echa