72 lines
3.0 KiB
Plaintext
72 lines
3.0 KiB
Plaintext
Script Breakdown:
|
|
Check Internet: Pings Google's DNS (8.8.8.8) to verify the connection.
|
|
Scan Wi-Fi: Scans available Wi-Fi networks using iw dev radio2 scan.
|
|
Attempt Connections: Tries to connect to each SSID using its MAC address as the password.
|
|
Notify on Success: If successful, sends a notification via NTFY with the SSID and the used MAC address as the password.
|
|
Script:
|
|
bash
|
|
Copy code:
|
|
---------
|
|
|
|
#!/bin/sh
|
|
|
|
# Check if there is an internet connection
|
|
if ! ping -c 3 8.8.8.8 > /dev/null 2>&1; then
|
|
# Scan for available Wi-Fi networks using radio2
|
|
iw dev radio2 scan | grep "SSID\|BSSID" | while read -r line; do
|
|
if echo "$line" | grep "SSID" > /dev/null; then
|
|
ssid=$(echo "$line" | cut -d ":" -f2 | sed 's/^ *//g')
|
|
elif echo "$line" | grep "BSSID" > /dev/null; then
|
|
bssid=$(echo "$line" | cut -d ":" -f2- | sed 's/://g' | tr 'a-z' 'A-Z')
|
|
# Try to connect to the SSID using the BSSID as password
|
|
uci set wireless.@wifi-iface[1].ssid="$ssid"
|
|
uci set wireless.@wifi-iface[1].key="$bssid"
|
|
uci set wireless.@wifi-iface[1].encryption='psk2'
|
|
uci commit wireless
|
|
wifi down radio2 && wifi up radio2
|
|
sleep 30 # Wait for connection
|
|
|
|
# Check if the router has internet access
|
|
if ping -c 3 8.8.8.8 > /dev/null 2>&1; then
|
|
# Send a notification via NTFY
|
|
curl -d "Connected to SSID: $ssid with password: $bssid" https://ntfy.asadqi.eu.org/Router
|
|
sleep 300 # Wait for 5 minutes before retrying
|
|
exit 0
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
|
|
|
|
------------
|
|
|
|
Explanation:
|
|
Internet Check: The script first pings 8.8.8.8. If it fails, it proceeds to scan for available SSIDs.
|
|
Wi-Fi Scan: It uses iw dev radio2 scan to list all available SSIDs and BSSIDs (MAC addresses).
|
|
Connect Attempt: For each SSID, it sets the SSID and uses the MAC address (without : and in uppercase) as the password. It commits these settings, brings down the radio, and brings it back up to apply the new settings.
|
|
Wait and Check: After 30 seconds, it checks if the connection is successful by pinging 8.8.8.8 again. If successful, it sends a notification with the SSID and password via NTFY.
|
|
Retry: If the connection fails, it continues with the next SSID.
|
|
Cron Job to Run Every 30 Minutes:
|
|
To schedule this script to run every 30 minutes, add the following line to your Scheduled Tasks in the OpenWRT GUI:
|
|
|
|
bash
|
|
Copy code:
|
|
---------
|
|
|
|
*/30 * * * * /usr/bin/wifi_connect.sh
|
|
|
|
------------
|
|
|
|
How to Apply:
|
|
Save the Script: Save the above script as /usr/bin/wifi_connect.sh:
|
|
|
|
bash
|
|
Copy code
|
|
nano /usr/bin/wifi_connect.sh
|
|
chmod +x /usr/bin/wifi_connect.sh
|
|
Set the Cron Job:
|
|
|
|
Go to System -> Scheduled Tasks in the OpenWRT GUI.
|
|
Add the cron line: */30 * * * * /usr/bin/wifi_connect.sh
|
|
Click Save & Apply.
|
|
This setup will run the script every 30 minutes to check for internet, scan SSIDs, and attempt to connect using the MAC address as the password. |