Acceso programático para conectarse a una networking wifi

Muy similar a esta pregunta , pero como me animé a hacer mi @bmike, quería volver a hacer esta pregunta, ya que no era un duplicado de la networking Create AirPort desde la command-line .

Estoy buscando una forma programática para conectarme a una networking wifi. Se puede save (recordar) o desconocido, preferiblemente en Apple Script o a través de Automator.

Lo he hecho en una PC con Windows a través del siguiente command:

netsh wlan add profile wifi.xml user=current 

(creándolo, como la única networking wifi disponible, intentaría conectarse a él)

El verdadero problema que estoy teniendo es: tengo un Mac Book, OSX 10.10, compartido por dos usuarios. Un usuario debería poder acceder (y preferiblemente conectarse por defecto) al SSID "Wifi1" y el segundo usuario debería poder acceder al SSID "Wifi2", pero ninguno de los usuarios debe conectarse al wifi del otro usuario. Windows netsh wlan con la opción user=current logra esto, pero no veo que esto sea compatible con una Mac.

Desactivar el recuerdo de SSID y hacer que los usuarios escriban la contraseña en cada momento, por supuesto, lograría este objective, pero estoy buscando una solución más automatizada.

No he encontrado una manera de lograr esto a través de preferences, prioridades wifi, recordando networkinges o cualquier otra cosa.

También para tener en count, el cambio rápido de usuario está habilitado (esto parece dificultar la creación de scripts en mi investigación porque no hay un desencadenador o evento confiable para escuchar la ejecución del script).

2 Solutions collect form web for “Acceso programático para conectarse a una networking wifi”

Esto debería hacerlo, aunque puede necesitar algunas modificaciones. Cada vez que un usuario cambia, se crea una input de logging del sistema. Sabiendo esto, puede monitorear los cambios de usuario sin esfuerzo:

 global wifi_device on run set wifi_device to do shell script "networksetup -listllhardwareports|grep -A1 'Wi-Fi'|grep Device|sed 's;Device: ;;'" end run on idle set user_name to do shell script "tail -n0 -f /var/log/system.log|grep -om1 'context values set for .*'|sed -e 's;context values set for ;;'" if user_name is equal to "presaccount" then do shell script "networksetup -setairportnetwork " & wifi_device & " presaccount_network password" else if user_name is equal to "other_account" then do shell script "networksetup -setairportnetwork " & wifi_device & " other_account_network password" end if return 1 end idle 

Simplemente cambie los nombres de networking, las passwords y los nombres de count a lo que necesite que sean.

Básicamente, estamos buscando la input de logging que contenga "valores de context establecidos para", que ocurre en cada interruptor, y contiene el nombre de usuario cambiado a. Usamos este nombre de usuario para determinar a qué networking join, ¡y eso es todo! Recomiendo solo permitir que los administradores cambien la networking wifi en las preferences del sistema. En realidad, esto no usa casi ningún recurso, porque el script no puede continuar más allá de la primera línea, hasta que el usuario cambie. Tenga en count que esto se hizo el 10.11. No puedo verificar si la input de logging está presente en 10.10, entonces YMMV. Deberá save esto como una aplicación de permanencia abierta en el Editor de scripts.

Mi idea (basada en esto ) es un poco diferente a la de William.

No funciona con el Cambio rápido de usuario, pero tal vez uno podría usar partes de las cosas de William para mezclarlo.

Este script de shell debe colocarse en el ejecutable / usr / local / bin y en el propietario root. Las diferentes ubicaciones (en Preferences de networking) deben tener los nombres de los usuarios y deben configurarse / rellenarse. También deben establecerse los nombres propios de user1 / 2 y SSID1 / 2. También puede necesitar algunas otras mejoras / modificaciones.

 #!/bin/bash # automatically change location and ssid based on user # networkingirect all IO to /dev/null (comment this out if you want to debug) # exec 1>/dev/null 2>/dev/null # get a little breather before we get data for things to settle down sleep 2 # get/set various system information DEVICEEN="networksetup -listllhardwareports|grep -A1 'Wi-Fi'|grep Device|sed 's;Device: ;;'" CURRENT_USER=$USER SSID1=wifi1 SSID2=wifi2 # basic pattern matching to get all location names separated by newlines LOCATION_NAMES=`scselect | tail -n +2 | cut -d "(" -f 2 | cut -d ")" -f 1` CURRENT_LOCATION=`scselect | grep " \* " | cut -d "(" -f 2 | cut -d ")" -f 1` # no brackets as the grep will return a status code depending on whether the SSID has an own Location if echo "$LOCATION_NAMES" | egrep -q "^$CURRENT_USER$"; then NEW_LOCATION="$CURRENT_USER" else # auto does not seem to be working on Mac OS X Lion, but Automatic does if echo Automatic | grep -q "$LOCATION_NAMES"; then NEW_LOCATION=Automatic elif echo auto | grep -q "$LOCATION_NAMES"; then NEW_LOCATION=auto else echo "Automatic location was not found!" echo "The following locations are known:" echo "$LOCATION_NAMES" fi fi if [ "x$NEW_LOCATION" != "x" -a "x$NEW_LOCATION" != "x$CURRENT_LOCATION" ]; then echo "Changing to $NEW_LOCATION" scselect "$NEW_LOCATION" fi if [ "$NEW_LOCATION" = "user1" ]; then echo "Changing to $SSID1" networksetup -setairportnetwork "$DEVICEEN" "$SSID1" elif [ "$NEW_LOCATION" = "user2" ]; then echo "Changing to $SSID2" networksetup -setairportnetwork "$DEVICEEN" "$SSID2" else echo "SSID was not found!" fi 

El script de shell debe ser iniciado por un agente de lanzamiento plist en / Users / $ User / Library / LaunchAgents.

Configurar networksetup -setairportnetwork en1 "$SSID1/2" no funciona correctamente para mí. Esto podría resolverse desactivando el SSID recordando y agregando la contraseña de Wi-Fi en los commands networksetup...

  • Wi-Fi constantemente lento y poco confiable donde sea que vaya. 2012 MBP
  • Desconnection aleatoria de la networking Wi-Fi, generalmente después de la inactividad
  • Mac no mostrará el cuadro de inicio de session WiFi después de la actualización a El Capitán
  • AFP a través de Internet?
  • ¿Cómo elimino todos los datos de synchronization de iCloud sin crear una nueva ID de Apple?
  • El server L2TP-VPN no respondió: OS X Mountain Lion (sucedió después del cambio de enrutador)
  • Wi-Fi interfiriendo con el mouse Bluetooth
  • Solución de problemas de un iPhone 4 conectado a wifi, pero no se puede conectar a Internet
  • Ethernet (en0) pierde la dirección IP cuando se inicia / se detiene WiFi (en1)
  • ¿Hay una forma segura de utilizar curl --interface?
  • ¿Cómo arreglo los maps OSX teniendo la location incorrecta (Next Door)?
  • La command-line DNS utiliza el trabajo, Chrome y Safari no pueden resolver los nombres de host en El Capitán. ¿Por qué?
  • Ayuda con VNC (a través del Wi-Fi de la escuela) sin consentimiento? Opsec
  • Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).