Skip to main content
Solved

WiFi switching script

  • September 20, 2017
  • 6 replies
  • 8 views

Forum|alt.badge.img+10
  • Valued Contributor
  • 224 replies

Someone had a script on here not too long ago and I can't find it now. Basically what it did was check to see if a specific wifi network was available it would switch to it. I'm looking to deploy this at my school to prevent students from switching over to our teacher network. Someone had some loose lips and the password spread. There was also a section of the script where if there was not network named "student" or whatever it would then do nothing instead. I.E. if the student is at home.

Best answer by Asnyder

@Marty @chris.hansen Found it

#!/bin/bash

# Monitor and Manage WiFi Networks                      
# Del Brown                                  
# 11/21/16                                
# delonline@icloud.com                     
#                                                            
# Begin Variable Definitions
#Replace WIFINAME with your school WiFi.  Leaving it empty will disconnect from any network.

WifiWhitelist="WIFINAME"

# End of Variable Definitions

# Begin Function Declarations
connect ()
{

for SchoolNetwork in $WifiWhitelist
    do
        #loop through whitelist and connect to whitelisted network found
        echo " Available Network ""$SchoolNetwork"
        networksetup -setairportnetwork en0 "$SchoolNetwork" &>/dev/null
    done
}

disconnect ()
{
echo "Time to disconnect"
# send disconnect command to en0
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -z
#exit 1
}

onSchoolNetwork ()
{
# test to see if the school network has been joined.  You can either use the networksetup command or the airport utility for this

MyWifi=`networksetup -getairportnetwork en0 | awk '{print $4}'`
#MyWifi=`/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport --getinfo | grep " SSID" | awk '{print $2}'`

# Call the disconnect function if a network outside of school is joined
for AllowedID in $WifiWhitelist
    do
        if [ "$AllowedID" == "$MyWifi" ]
            then # Asset is on the school network
            echo "I am connected to the School Network ""$AllowedID"
            exit 1  
        fi
    done

echo "Device is not connected to School Network so disconnect and reconnect to the school"
disconnect
connect
exit
}


atSchool ()
{
WifiAvailable=`/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -s | awk '{print $1}'`
# test to see if the Asset is at school by scanning for school networks and see if one is the school
for ScannedNetworks in $WifiAvailable
    do
        for SchoolNetwork in $WifiWhitelist
            do
                if [ "$SchoolNetwork" == "$ScannedNetworks" ]
                    then
                        AssetAtSchool="Yes"
                        echo "The Device is at school"
                        return
                fi
            done
    done
AssetAtSchool="No"
echo "asset is not at school so we don't care and we'll exit"
exit
}

# End Function Declarations

#########################

#program starts here
atSchool
onSchoolNetwork
View original
Did this topic help you find an answer to your question?

6 replies

Forum|alt.badge.img+3
  • New Contributor
  • 58 replies
  • September 20, 2017

Maybe this was it? https://www.jamf.com/jamf-nation/discussions/20271/wifi-ssid-prioritization


Forum|alt.badge.img+10
  • Author
  • Valued Contributor
  • 224 replies
  • September 21, 2017

@chris.hansen That isn't it unfortunately. I had a copy on my machine somewhere but it's nowhere to be found. I went through a ton of posts on here relating to wifi and couldn't find anything.


Forum|alt.badge.img+3
  • New Contributor
  • 3 replies
  • September 21, 2017

This is relevant to my interests. I keep looking around for something like this but do not have the chops to create it myself. I have found a script that blocks access to a set of networks. https://www.jamf.com/jamf-nation/discussions/5327/need-help-with-wifi-script This might help you get to where you want as you can put the teacher networks in a deny. But I need one that will force a connect to my main network over the others.


Forum|alt.badge.img+10
  • Author
  • Valued Contributor
  • 224 replies
  • September 21, 2017

I do have that script but it's a little invasive. The kids here will go day without coming to us to get back on the network (need admin to turn airport back on). That's why I was looking for that particular script. It just switched them back to their particular network.


Forum|alt.badge.img+10
  • Author
  • Valued Contributor
  • 224 replies
  • Answer
  • September 25, 2017

@Marty @chris.hansen Found it

#!/bin/bash

# Monitor and Manage WiFi Networks                      
# Del Brown                                  
# 11/21/16                                
# delonline@icloud.com                     
#                                                            
# Begin Variable Definitions
#Replace WIFINAME with your school WiFi.  Leaving it empty will disconnect from any network.

WifiWhitelist="WIFINAME"

# End of Variable Definitions

# Begin Function Declarations
connect ()
{

for SchoolNetwork in $WifiWhitelist
    do
        #loop through whitelist and connect to whitelisted network found
        echo " Available Network ""$SchoolNetwork"
        networksetup -setairportnetwork en0 "$SchoolNetwork" &>/dev/null
    done
}

disconnect ()
{
echo "Time to disconnect"
# send disconnect command to en0
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -z
#exit 1
}

onSchoolNetwork ()
{
# test to see if the school network has been joined.  You can either use the networksetup command or the airport utility for this

MyWifi=`networksetup -getairportnetwork en0 | awk '{print $4}'`
#MyWifi=`/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport --getinfo | grep " SSID" | awk '{print $2}'`

# Call the disconnect function if a network outside of school is joined
for AllowedID in $WifiWhitelist
    do
        if [ "$AllowedID" == "$MyWifi" ]
            then # Asset is on the school network
            echo "I am connected to the School Network ""$AllowedID"
            exit 1  
        fi
    done

echo "Device is not connected to School Network so disconnect and reconnect to the school"
disconnect
connect
exit
}


atSchool ()
{
WifiAvailable=`/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -s | awk '{print $1}'`
# test to see if the Asset is at school by scanning for school networks and see if one is the school
for ScannedNetworks in $WifiAvailable
    do
        for SchoolNetwork in $WifiWhitelist
            do
                if [ "$SchoolNetwork" == "$ScannedNetworks" ]
                    then
                        AssetAtSchool="Yes"
                        echo "The Device is at school"
                        return
                fi
            done
    done
AssetAtSchool="No"
echo "asset is not at school so we don't care and we'll exit"
exit
}

# End Function Declarations

#########################

#program starts here
atSchool
onSchoolNetwork

Forum|alt.badge.img+10
  • Valued Contributor
  • 193 replies
  • July 10, 2019

@Asnyder

Bit of an old thread but does this script still work?


Reply


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings