Avere auto-ricerca per OS X per WiFi

2

La mia scuola ha installato PowerCloud, che non supporta ufficialmente OS X. Funziona a volte, a volte no. Ho provato a restringerlo ma è impossibile. Mi chiedevo se c'è un modo per scrivere uno script Automater / AppleScript per connettersi a 1 rete, e quindi vedere se ottiene il! nel simbolo WiFi, quindi prova il successivo e poi fai un ciclo. C'è un modo per farlo?

    
posta Ian 11.03.2013 - 16:09
fonte

1 risposta

1

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

  1. Verifica della connettività.
  2. 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.

    
risposta data 17.10.2015 - 15:07
fonte

Leggi altre domande sui tag