5 votos

¿Cómo puedo obtener de forma programática y fiable el nombre de la interfaz del AirPort?

Necesito el nombre en0, en1, enN, enWhatever de mi Aeropuerto en un script.

¿Cómo puedo conseguirlo de forma fiable?

Aquí está lo que puse juntos, pero se ve feo y frágil, ya que es "análisis de texto":

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

5voto

Si necesitas compatibilidad con versiones antiguas de OS X, el servicio de red Wi-Fi se llamaba Airport en 10.6 y anteriores.

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

También puede utilizar -listnetworkserviceorder :

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

O lea /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"]'

1voto

Malik hassan Puntos 16

¿Qué te parece

/usr/sbin/networksetup -listnetworkserviceorder | grep -i 'Wi-Fi\|AirPort' | grep -iow en.

1voto

Shawn Anderson Puntos 482

Jugando con el tema de Lauri de que Apple puede cambiar el nombre de los dispositivos Wi-Fi en algún momento en el futuro:

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

Dado que 'networksetup -getairportpower dev' arroja un valor de retorno distinto de cero cuando dev no es un dispositivo de aeropuerto, podemos encontrar el(los) que funciona(n).

1voto

moodforaday Puntos 2633

Sólo para completar las respuestas (no para sugerir que hay algo mal con las otras respuestas, sino sólo para mostrar que hay otra manera de hacerlo), voy a lanzar esto:

Utilice la airport que se encuentra en:

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

que ha estado ahí desde al menos 10.6. (Siempre lo enlazo a /usr/local/bin/ cada vez que configuro un nuevo Mac).

Una de las ventajas del airport comando es que no tienes que saber cuál es la interfaz, porque:

"Si no se especifica una interfaz, el aeropuerto utilizará la primera interfaz AirPort del sistema".

Por lo tanto, si ejecuto este comando

airport prefs 2>&1

Obtengo este resultado:

AirPort preferences for en1:

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

lo que significa que puedo obtener el nombre del puerto/dispositivo buscando la última palabra de la primera línea, menos los dos puntos.

airport prefs 2>&1 | awk -F' ' '/for/{print $NF}' | tr -d ':'

0voto

moodforaday Puntos 2633

Acabo de encontrar accidentalmente otra forma de hacerlo:

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

Cómo/por qué funciona:

networksetup -setairportpower enX off

da este resultado:

enX no es una interfaz Wi-Fi.

Apagado de la única interfaz de aeropuerto encontrada: en1

No estoy seguro de que lo clasificaría alto en términos de fiabilidad pero lo incluiré aquí como una opción.

(Funciona en 10.8.3.)

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X