Haga que OS X realice una búsqueda automática de WiFi

2

Mi escuela ha instalado PowerCloud, que no es oficialmente compatible con OS X. A veces funciona, a veces no. He tratado de reducirlo pero es imposible. Me preguntaba si hay una manera de escribir un script de Automater / AppleScript para conectarse a 1 red, y luego ver si obtiene el! en el símbolo de WiFi, y luego intente el siguiente, y luego realice un ciclo. ¿Hay alguna manera de hacer esto?

    
pregunta Ian 11.03.2013 - 16:09

1 respuesta

1

Lo haría a través de un script bash, ya que la base Unix de OSX proporciona todo lo que necesita y no tiene que jugar con la GUI, lo cual no es fácil.

Las dos cosas más importantes son

  1. Probando la conectividad.
  2. Forzar la reconexión a un AP.

Para el primero, un simple ping debería ser suficiente y para el segundo puedes usar el siguiente comando.

networksetup -setairportnetwork en1 "BLAH" "mypassword"

Entonces, el script se vería así ...

#!/bin/sh

whotest[0]='test' || (echo 'Failure: arrays not supported in this version of bash.' && exit 2)

# Assuming all APs use the same pass code
myAPpass="mypassword"

# List of APs
myAPlist=(
'NetFasteR WLAN 3'
'WiFi HRC7dE'
'BLAH'
)

myAPcount=0
while [ "x${myAPlist[myAPcount]}" != "x" ]
do
   myAPcount=$(( $myAPcount + 1 ))
done
echo "There are $myAPcount APs available."

# IP address to target
myIntIP="192.168.0.1"

# Which AP in the list to attempt next
myAPnum=0

# We'll loop forever
while true ; do

   # Monitor connection; Loop until ping fails
   while true ; do
      # Test connection. If non zero status it failed.
      ping -c 1 -t 1 $myIntIP >/dev/null 2>&1 || break

      echo "Successfull heart beat at 'date'\t\r\c"

      # Wait # secs before testing again.
      sleep 2
   done

   echo " "
   echo "Failed to contact internal IP. Reconnecting..."

   # Try to connect to an AP in the list
   while true; do
      # Get next AP in the list
      if [ $myAPnum -eq $myAPcount ] ; then
     myAPnum=0
      else
     myAPnum=$(( $myAPnum + 1 ))
      fi
      myNewAP=${myAPlist[myAPnum]}

      echo "Trying AP '$myNewAP' : \c"

      # Connect to new network
      networksetup -setairportnetwork en1 "$myNewAP" "$myAPpass" >/dev/null 2>&1
      if [ "x$?" = "x0" ] ; then
     echo "Success!" 

     # Wait for DHCP etc...
     sleep 2 

     break
      else
     echo "Failed :("
      fi
   done
done

Es probable que tengas que modificarlo un poco para obtener los retrasos correctos y demás, pero para mí funciona bastante bien.

Si los puntos de acceso no comparten contraseñas, deberá agregar una segunda matriz con ellos.

Si le preocupa que las contraseñas sean seguras, puede configurarlo para que se ejecute como root y cambiar los permisos para que solo el root pueda leerlo.

EDITAR: El guión es bastante tonto. Puede tomar un tiempo encontrar un AP que esté funcionando si la lista es larga. Puedes reducir los retrasos haciéndolo más inteligente. Por ejemplo, puede verificar el uso del airport herramienta para obtener una lista de los puntos de acceso disponibles y luego elija uno para conectarse.

    
respondido por el Vic 17.10.2015 - 15:07

Lea otras preguntas en las etiquetas