Lo farei tramite uno script bash, poiché la base Unix di OSX fornisce tutto ciò di cui hai bisogno e non devi giocare con la GUI che non è facile.
Le due cose più importanti sono
- Verifica della connettività.
- Forza la riconnessione a un AP.
Per il primo un semplice ping
dovrebbe essere sufficiente e per il secondo puoi usare il seguente comando.
networksetup -setairportnetwork en1 "BLAH" "mypassword"
Quindi lo script sarebbe simile a questo ...
#!/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
Probabilmente dovrai modificarlo un po 'per ottenere i giusti ritardi e così via, ma per me funziona abbastanza bene.
Se gli AP non condividono le password, sarà necessario aggiungere un secondo array con loro.
Se sei preoccupato che le password siano sicure, puoi configurarle come root e modificare le autorizzazioni in modo che solo root possa leggerle.
EDIT: la sceneggiatura è piuttosto stupida. Può richiedere un po 'di tempo per trovare un AP che funziona se l'elenco è lungo. Puoi ridurre i ritardi rendendolo più intelligente. Ad esempio, puoi controllare utilizzando aeroporto strumento per un elenco di AP disponibili e quindi selezionarne uno a cui connettersi.