Lassen Sie OS X automatisch nach WLAN suchen

Meine Schule hat PowerCloud installiert, das OS X offiziell nicht unterstützt. Manchmal funktioniert es, manchmal nicht. Ich habe versucht, es einzugrenzen, aber es ist unmöglich. Ich habe mich gefragt, ob es eine Möglichkeit gibt, ein Automater/AppleScript-Skript zu schreiben, um eine Verbindung zu einem Netzwerk herzustellen, und dann zu sehen, ob es den ! im WLAN-Symbol, und versuchen Sie dann das nächste, und wechseln Sie dann. Gibt es eine Möglichkeit, dies zu tun?

Es könnte nützlich sein, wenn Sie hinzufügen, was genau PowerCloud tut. Obwohl OS X möglicherweise nicht unterstützt wird, kann eine bessere Vorstellung davon, was Sie erreichen möchten, es jemandem ermöglichen, eine Lösung anzubieten.

Antworten (1)

Ich würde es stattdessen über ein Bash-Skript tun, da die Unix-Grundlage von OSX alles bietet, was Sie brauchen, und Sie nicht mit der GUI herumspielen müssen, was nicht einfach ist.

Die beiden wichtigsten Dinge sind

  1. Konnektivität testen.
  2. Wiederverbindung mit einem AP erzwingen.

Für das erste sollte ein einfaches pingausreichen und für das zweite können Sie den folgenden Befehl verwenden.

networksetup -setairportnetwork en1 "BLAH" "mypassword"

Das Skript würde also so aussehen ...

#!/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

Sie müssen es wahrscheinlich ein wenig optimieren, um die richtigen Verzögerungen und so weiter zu erhalten, aber für mich funktioniert es ziemlich gut.

Wenn die APs keine Passwörter teilen, müssen Sie ihnen ein zweites Array hinzufügen.

Wenn Sie sich Sorgen um die Sicherheit von Passwörtern machen, können Sie es so einrichten, dass es als root ausgeführt wird, und die Berechtigungen so ändern, dass nur root es lesen kann.

EDIT: Das Skript ist ziemlich dumm. Es kann eine Weile dauern, einen funktionierenden AP zu finden, wenn die Liste lang ist. Sie können Verzögerungen reduzieren, indem Sie es intelligenter machen. Beispielsweise könnten Sie mit dem Flughafen- Tool nach einer Liste verfügbarer APs suchen und dann einen auswählen, mit dem Sie sich verbinden möchten.