Pytanie:
Jak programowo i niezawodnie uzyskać nazwę interfejsu AirPort?
Robottinosino
2013-05-05 12:21:00 UTC
view on stackexchange narkive permalink

Potrzebuję en0, en1, enN, enNiezależnie od nazwy mojego lotniska w skrypcie.

Jak uzyskać to niezawodnie?

Oto, co utworzyłem, ale wygląda brzydko i krucho, ponieważ „analizuje tekst”:

  airport_hardware_name = 'Port sprzętowy: Wi-Fi'networksetup -listallhardwareports | awk -v p = "$ airport_hardware_name" '$ 0 ~ p {getline; print $ 2; } ' 
Pięć odpowiedzi:
Lri
2013-05-05 14:07:10 UTC
view on stackexchange narkive permalink

Jeśli potrzebujesz obsługiwać starsze wersje OS X, usługa sieci Wi-Fi nosiła nazwę Airport w 10.6 i wcześniejszych.

networksetup -listallhardwareports | awk '/ ^ Port sprzętowy: (Wi-Fi | AirPort) $ / {getline; print $ 2}'

Możesz także użyć -listnetworkserviceorder :

networksetup -listnetworkserviceorder | sed -En 's / ^ \ (Port sprzętowy: (Wi-Fi | AirPort), Urządzenie: (en.) \) $ / \ 2 / p'

Lub przeczytaj /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist :

ruby ​​-e 'require "plist"; puts Plist :: parse_xml ("/ Library / Preferences / SystemConfiguration / NetworkInterfaces .plist ") [" Interfejsy "]. select {| i | i [" SCNetworkInterfaceType "] ==" IEEE80211 "} [0] [" Nazwa BSD "] '

głosowanie za zgodą ze Snow Leopardem! miły dotyk!
→ Lauri: 2. wersja nie działa, jeśli interfejs bezprzewodowy jest wyłączony.
@danielAzuelos Czy masz na myśli sytuację, gdy Wi-Fi jest wyłączone w Preferencjach systemowych? Działało dla mnie nawet po wyłączeniu Wi-Fi i ponownym uruchomieniu.
→ Lauri: miałem na myśli, kiedy używam dedykowanej lokalizacji, w której jest włączony i zdefiniowany tylko Ethernet. Jest to konfiguracja, której używam na co dzień do analizy problemów sieciowych.
markhunte
2013-05-05 15:05:38 UTC
view on stackexchange narkive permalink

Co powiesz na

  / usr / sbin / networksetup -listnetworkserviceorder | grep -i 'Wi-Fi \ | AirPort' | grep -iow pl.  
nie udaje się na przykład dla en10
Nie myśl, że kiedykolwiek widziałem en10. Ale dobrze wiedzieć
che2cbs
2013-05-06 01:26:44 UTC
view on stackexchange narkive permalink

Odtwarzam z motywem Lauri, że Apple może zmienić nazwy urządzeń Wi-Fi w pewnym momencie w przyszłości:

  for d in `networksetup -listallhardwareports | awk '/ ^ Urządzenie: / {print $ 2}' `; do networksetup -getairportpower $ d > / dev / null 2>&1 && echo "Wi-Fi Device: $ {d}" done  

Ponieważ 'networksetup -getairportpower zero return rzuca wartość niezerową wartość, gdy dev nie jest urządzeniem lotniskowym, możemy znaleźć urządzenie, które działa.

To jest najlepsze jak dotąd. Dodatkowa niezawodność! Świetna sprawa..
TJ Luoma
2013-05-08 02:46:15 UTC
view on stackexchange narkive permalink

Wyłącznie po to, aby uzupełnić odpowiedzi (nie po to, aby sugerować, że coś jest nie tak z innymi odpowiedziami, ale tylko po to, aby pokazać, że istnieje inny sposób), wyrzucę to:

Użyj polecenie airport znalezione pod adresem:

  /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport  

który istnieje od co najmniej 10,6. (Zawsze łączę go z / usr / local / bin / za każdym razem, gdy konfiguruję nowego Maca).

Jedna z zalet airport jest takie, że nie musisz wiedzieć, jaki jest interfejs, ponieważ:

"Jeśli interfejs nie jest określony, lotnisko użyje pierwszego interfejsu AirPort w systemie."

Dlatego jeśli uruchomię to polecenie:

  airport prefs 2>&1  

Otrzymam takie dane wyjściowe:

  Preferencje AirPort dla en1: DisconnectOnLogout = NIE Nie można pobrać JoinModeUnable do pobrania JoinModeFallbackRememberRecentNetworks = NORequireAdminIBSS = NORequireAdminNetworkChange = NORequireAdminPowerToggle = NOWoWEnabled = YES  który oznacza / że mogę get the 

nazwa urządzenia, wyszukując ostatnie słowo w pierwszym wierszu bez dwukropka.

  airport prefs 2>&1 | awk -F '' '/ for / {print $ NF}' | tr -d ':'  
TJ Luoma
2013-05-16 23:55:38 UTC
view on stackexchange narkive permalink

Po prostu przypadkowo znalazłem inny sposób, aby to zrobić:

networksetup -setairportpower enX off 2>&1 | awk -F '' '/: / {print $ NF}'

Jak / dlaczego to działa:

networksetup -setairportpower enX off

daje taki wynik:

enX nie jest interfejsem Wi-Fi.

Wyłączenie jedynego znalezionego interfejsu lotniska: en1

Nie jestem pewien, czy oceniłbym go wysoko pod względem niezawodności , ale dołączę to tutaj jako opcję.

(Działa w wersji 10.8 .3.)



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...