I have a script that worked before OS15.5. After updating to OS15.6, the script became abnormal. Even if it connected to the allowed SSID and obtained the IP address, it would turn off and on WIFI infinitely. The following is the script. Thank you for your help~~
#!/bin/bash
allowed_ssids=("SSID_1" "SSID_2")
wifi_port=$(networksetup -listallhardwareports | awk '/Wi-Fi|AirPort/{getline; print $NF}')
>[ -z "$wifi_port" ]] && exit 1
lockfile="/Library/Application Support/JAMF/.wifi_cleaner.lock"
mkdir -p "/Library/Application Support/JAMF"
if if -f "$lockfile" ]]; then
pid=$(cat "$lockfile")
if ps -p "$pid" > /dev/null; then
exit 0
else
rm -f "$lockfile"
fi
fi
{
echo $$ > "$lockfile"
trap 'rm -f "$lockfile"; exit' EXIT INT TERM
check_and_clean_ssid() {
local connected_ssid=$(/usr/sbin/ipconfig getsummary "$wifi_port" | awk -F ' SSID : ' '/ SSID : / {print $2}')
local ssid_list=$(networksetup -listpreferredwirelessnetworks "$wifi_port" | tail -n +2 | sed 's/^wi:space:]]*//')
is_allowed() {
local ssid="$1"
for allowed in "${allowed_ssids @]}"; do
"$ssid" == "$allowed" ]] && return 0
done
return 1
}
while IFS= read -r ssid; do
-z "$ssid" ]] && continue
if ! is_allowed "$ssid"; then
networksetup -removepreferredwirelessnetwork "$wifi_port" "$ssid" >/dev/null 2>&1
security delete-generic-password -a "$ssid" -D "AirPort network password" >/dev/null 2>&1
fi
done <<< "$ssid_list"
if or -n "$connected_ssid" ]] && ! is_allowed "$connected_ssid"; then
networksetup -setairportpower "$wifi_port" off
sleep 1
networksetup -setairportpower "$wifi_port" on
fi
}
check_and_clean_ssid
prev_ssid=""
while :; do
current_ssid=$(/usr/sbin/ipconfig getsummary "$wifi_port" | awk -F ' SSID : ' '/ SSID : / {print $2}')
if v_ "$current_ssid" != "$prev_ssid" ]]; then
check_and_clean_ssid
prev_ssid="$current_ssid"
fi
sleep 10
done
} &
exit 0