Come faccio a conoscere in modo programmato e affidabile il nome dell'interfaccia di AirPort?

5

Ho bisogno di en0, en1, enN, enQualunque nome del mio aeroporto in uno script.

Come posso farlo in modo affidabile?

Ecco cosa ho messo insieme, ma sembra brutto e fragile dato che è "analisi del testo":

airport_hardware_name='Hardware Port: Wi-Fi'
networksetup -listallhardwareports | awk -v p="$airport_hardware_name" '$0 ~ p { getline; print $2; }'
    
posta Robottinosino 05.05.2013 - 09:21
fonte

5 risposte

5

Se hai bisogno di supportare vecchie versioni di OS X, il servizio di rete Wi-Fi è stato chiamato Aeroporto in 10.6 e precedenti.

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

Potresti anche utilizzare -listnetworkserviceorder :

networksetup -listnetworkserviceorder | sed -En 's/^\(Hardware Port: (Wi-Fi|AirPort), Device: (en.)\)$//p'

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

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

    
risposta data 05.05.2013 - 11:07
fonte
1

Che ne dici di

/usr/sbin/networksetup -listnetworkserviceorder | grep -i 'Wi-Fi\|AirPort' | grep -iow en.
    
risposta data 05.05.2013 - 12:05
fonte
1

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

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

Poiché "networksetup -getairportpower dev" genera un valore di ritorno diverso da zero quando dev non è un dispositivo aeroportuale, possiamo trovare quello / i che funziona / i.

    
risposta data 05.05.2013 - 22:26
fonte
1

Solamente per completare le risposte (non per suggerire che c'è qualcosa di sbagliato con le altre risposte, ma solo per mostrare che c'è un altro modo per farlo), io butto fuori questo:

Utilizza il comando airport trovato in:

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

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

Uno dei vantaggi del comando airport è che non devi sapere cos'è l'interfaccia, perché:

"If an interface is not specified, airport will use the first AirPort interface on the system."

Pertanto, se eseguo questo comando:

airport prefs 2>&1

Ottengo questo risultato:

AirPort preferences for en1:

DisconnectOnLogout=NO
Unable to retrieve JoinMode
Unable to retrieve JoinModeFallback
RememberRecentNetworks=NO
RequireAdminIBSS=NO
RequireAdminNetworkChange=NO
RequireAdminPowerToggle=NO
WoWEnabled=YES

che significa che posso ottenere il nome della porta / dispositivo cercando l'ultima parola sulla prima riga, meno i due punti.

airport prefs 2>&1 | awk -F' ' '/for/{print $NF}' | tr -d ':'
    
risposta data 07.05.2013 - 23:46
fonte
0

Solo per sbaglio ho trovato 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 is not a Wi-Fi interface.

Turning off the only airport interface found: en1

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

(Funziona su 10.8.3.)

    
risposta data 16.05.2013 - 20:55
fonte

Leggi altre domande sui tag