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
- Probando la conectividad.
- 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.