¿Cómo obtengo el nombre de la interfaz de AirPort de manera programática y confiable?

5

Necesito el en0, en1, enN, cualquier nombre de mi aeropuerto en un script.

¿Cómo puedo obtenerlo de manera confiable?

Esto es lo que armé, pero se ve feo y quebradizo como "análisis de texto":

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

5 respuestas

5

Si necesita admitir versiones anteriores de OS X, el servicio de red Wi-Fi se llamó Aeropuerto en 10.6 y versiones anteriores.

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

También puedes usar -listnetworkserviceorder :

networksetup -listnetworkserviceorder | sed -En 's/^\(Hardware Port: (Wi-Fi|AirPort), Device: (en.)\)$//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"]'

    
respondido por el user495470 05.05.2013 - 11:07
1

¿Qué tal

/usr/sbin/networksetup -listnetworkserviceorder | grep -i 'Wi-Fi\|AirPort' | grep -iow en.
    
respondido por el markhunte 05.05.2013 - 12:05
1

Jugando con el tema de Lauri, Apple podría 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 (s).

    
respondido por el che2cbs 05.05.2013 - 22:26
1

Solo para redondear las respuestas (no para sugerir que hay algo mal con las otras respuestas, sino solo para mostrar que hay otra forma de hacerlo), lanzaré esto:

Use el comando airport que se encuentra en:

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

que ha estado allí desde al menos 10.6. (Siempre lo vinculo a /usr/local/bin/ cuando estoy configurando una nueva Mac).

Uno de los beneficios del comando airport 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 en el sistema."

Por lo tanto, si ejecuto este comando:

airport prefs 2>&1

Obtengo esta salida:

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 en la primera línea, menos los dos puntos.

airport prefs 2>&1 | awk -F' ' '/for/{print $NF}' | tr -d ':'
    
respondido por el TJ Luoma 07.05.2013 - 23:46
0

Encontré accidentalmente otra forma de hacer esto:

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

Cómo / por qué funciona esto:

networksetup -setairportpower enX off

da este resultado:

  

enX no es una interfaz Wi-Fi.

     

Desactivando la única interfaz de aeropuerto encontrada: en1

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

(Funciona en 10.8.3.)

    
respondido por el TJ Luoma 16.05.2013 - 20:55

Lea otras preguntas en las etiquetas