В моей школе установлен PowerCloud, который официально не поддерживает OS X. Иногда он работает, иногда нет. Я пытался сузить круг, но это невозможно. Мне было интересно, есть ли способ написать сценарий Automater/AppleScript для подключения к 1 сети, а затем посмотреть, получит ли он ! в символе WiFi, а затем попробуйте следующий, а затем выполните цикл. Есть ли способ сделать это?
Вместо этого я бы сделал это с помощью сценария bash, поскольку основа Unix для OSX предоставляет все, что вам нужно, и вам не нужно играть с графическим интерфейсом, что непросто.
Две самые важные вещи
Для первого должно быть достаточно простого ping
, а для второго вы можете использовать следующую команду.
networksetup -setairportnetwork en1 "BLAH" "mypassword"
Таким образом, сценарий будет выглядеть так...
#!/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
Вам, вероятно, придется немного настроить его, чтобы получить правильные задержки и т. д., но для меня это работает довольно хорошо.
Если точки доступа не используют общие пароли, вам потребуется добавить к ним второй массив.
Если вы беспокоитесь о безопасности паролей, вы можете настроить его для запуска от имени пользователя root и изменить разрешения, чтобы только root мог его прочитать.
РЕДАКТИРОВАТЬ: сценарий довольно глупый. Поиск работающей точки доступа может занять некоторое время, если список длинный. Вы можете уменьшить задержки, сделав его умнее. Например, вы можете проверить с помощью инструмента аэропорта список доступных точек доступа, а затем выбрать одну из них для подключения.
Морт