Domanda:
Come posso ottenere in modo programmatico e affidabile il nome dell'interfaccia di AirPort?
Robottinosino
2013-05-05 12:21:00 UTC
view on stackexchange narkive permalink

Ho bisogno di en0, en1, enN, en Qualunque sia il nome del mio aeroporto in uno script.

Come posso ottenerlo in modo affidabile?

Ecco cosa ho messo insieme, ma sembra brutto e fragile poiché è "text parsing":

  airport_hardware_name = 'Porta hardware: Wi-Fi'networksetup -listallhardwareports | awk -v p = "$ airport_hardware_name" '$ 0 ~ p {getline; stampa $ 2; } " 
Cinque risposte:
Lri
2013-05-05 14:07:10 UTC
view on stackexchange narkive permalink

Se è necessario supportare le vecchie versioni di OS X, il servizio di rete Wi-Fi si chiamava Airport nella 10.6 e nelle versioni precedenti.

networksetup -listallhardwareports | awk '/ ^ Porta hardware: (Wi-Fi | AirPort) $ / {getline; print $ 2}'

Puoi anche usare -listnetworkserviceorder :

networksetup -listnetworkserviceorder | sed -En 's / ^ \ (Porta hardware: (Wi-Fi | AirPort), Dispositivo: (en.) \) $ / \ 2 / p'

Oppure leggi /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist :

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

upvoting per Snow Leopard compat! bel tocco!
→ Lauri: la seconda versione non funziona se l'interfaccia wireless è spenta.
@danielAzuelos Vuoi dire come quando il Wi-Fi è disattivato dalle Preferenze di Sistema? Ha funzionato per me anche dopo aver spento il Wi-Fi e riavviato.
→ Lauri: volevo dire quando uso una posizione dedicata dove c'è solo Ethernet e definita. Questa è una configurazione che utilizzo tutti i giorni per analizzare i problemi di rete.
markhunte
2013-05-05 15:05:38 UTC
view on stackexchange narkive permalink

Che ne dici di

  / usr / sbin / networksetup -listnetworkserviceorder | grep -i "Wi-Fi \ | AirPort" | grep -iow en.  
fallisce per en10, per esempio
Non credo di aver mai visto un en10. Ma buono a sapersi
che2cbs
2013-05-06 01:26:44 UTC
view on stackexchange narkive permalink

Giocando sul tema di Lauri che Apple potrebbe cambiare il nome dei dispositivi Wi-Fi in futuro:

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

Poiché 'networksetup -getairportpower zero dev' restituisce un ritorno non valore quando dev non è un dispositivo aeroportuale, possiamo trovare quello / i che funziona / i.

Questo è il migliore finora .. affidabilità aggiuntiva incorporata !! Grandi cose ..
TJ Luoma
2013-05-08 02:46:15 UTC
view on stackexchange narkive permalink

Solo per completare le risposte (non per suggerire che ci sia qualcosa di sbagliato nelle altre risposte, ma solo per mostrare che esiste un altro modo per farlo), butto via questo:

Usa il comando airport disponibile in:

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

che è presente almeno dal 10.6. (Lo collego sempre a / usr / local / bin / ogni volta che imposto un nuovo Mac).

Uno dei vantaggi di airport è che non devi sapere qual è l'interfaccia, perché:

"Se un'interfaccia non è specificata, airport utilizzerà la prima interfaccia AirPort sul sistema."

Pertanto, se eseguo questo comando:

  airport prefs 2>&1  

ottengo questo output:

  Preferenze AirPort per en1: DisconnectOnLogout = NO Impossibile recuperare JoinMode Impossibile recuperare JoinModeFallbackRememberRecentNetworks = NORequireAdminIBSS = NORequireAdminNetworkChange = NORequireAdminPowerToggle = NOWoWEnabled = YES  nome del dispositivo cercando l'ultima parola sulla prima riga, meno i due punti.  
  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

Ho trovato accidentalmente un altro modo per farlo:

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

Come / perché funziona:

networksetup -setairportpower enX off

dà questo risultato:

enX non è un'interfaccia Wi-Fi.

Disattivando l'unica interfaccia dell'aeroporto trovata: en1

Non sono sicuro che lo classificherei in alto in termini di affidabilità , ma lo includerò qui come opzione.

(Funziona su 10.8 .3.)



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...