Added additional function to check and report when the VPN connectivity is restored
This commit is contained in:
		
							parent
							
								
									7185f3b395
								
							
						
					
					
						commit
						8975e81c7e
					
				
							
								
								
									
										91
									
								
								run_check.sh
									
									
									
									
									
								
							
							
						
						
									
										91
									
								
								run_check.sh
									
									
									
									
									
								
							| @ -1,14 +1,17 @@ | ||||
| #!/bin/bash | ||||
| 
 | ||||
| # Mullvad_VPN_Check | ||||
| # A script that checks for a Mullvad VPN connection and if there isn't one, will send and alert | ||||
| 
 | ||||
| # A script that checks for a Mullvad VPN connection, logs the status, | ||||
| # and sends alerts if the VPN status changes. | ||||
| 
 | ||||
| # Set Discord webhook | ||||
| WEBHOOK_URL="DISCORD_WEBHOOK_URL" | ||||
| 
 | ||||
| # Function to run alert | ||||
| run_alert() { | ||||
| # Temp file to store the VPN connection status | ||||
| STATUS_FILE="/tmp/vpn_status.log" | ||||
| 
 | ||||
| # Function to send VPN down alert | ||||
| vpn_down_alert() { | ||||
| curl -H "Content-Type: application/json" -X POST --data @- "$WEBHOOK_URL" <<EOF | ||||
| { | ||||
|   "content": null, | ||||
| @ -38,29 +41,85 @@ curl -H "Content-Type: application/json" -X POST --data @- "$WEBHOOK_URL" <<EOF | ||||
| EOF | ||||
| } | ||||
| 
 | ||||
| # Function to check if "mullvad_exit_ip" is false | ||||
| check_mullvad_exit_ip() { | ||||
| # Function to send VPN restored alert | ||||
| vpn_up_alert() { | ||||
| curl -H "Content-Type: application/json" -X POST --data @- "$WEBHOOK_URL" <<EOF | ||||
| { | ||||
|   "content": null, | ||||
|   "embeds": [ | ||||
|     { | ||||
|       "title": "VPN Connectivity - RESTORED", | ||||
|       "description": "\"$(hostname)\" is now going through a Mullvad VPN connection", | ||||
|       "color": 3066993, | ||||
|       "fields": [ | ||||
|         { | ||||
|           "name": "Date and Time of Test:", | ||||
|           "value": "$(date +'%Y-%m-%d %H:%M:%S')" | ||||
|         }, | ||||
|         { | ||||
|           "name": "Current ISP", | ||||
|           "value": "$ORG" | ||||
|         }, | ||||
|         { | ||||
|           "name": "Current IP", | ||||
|           "value": "$IP" | ||||
|         } | ||||
|       ] | ||||
|     } | ||||
|   ], | ||||
|   "attachments": [] | ||||
| } | ||||
| EOF | ||||
| } | ||||
| 
 | ||||
| # Function to check the VPN status and act accordingly | ||||
| check_vpn_status() { | ||||
|     mullvad_exit_ip="$1" | ||||
| 
 | ||||
|     # Check the current status (true for VPN, false for no VPN) | ||||
|     if [ "$mullvad_exit_ip" = "false" ]; then | ||||
|         run_alert | ||||
|         echo "Alert sent!" | ||||
|         echo "VPN not connected, sending alert..." | ||||
|          | ||||
|         # Send alert if VPN was connected last time | ||||
|         if [ "$previous_status" = "true" ]; then | ||||
|             vpn_down_alert | ||||
|             echo "VPN down alert sent!" | ||||
|         fi | ||||
| 
 | ||||
|         # Log the current status | ||||
|         echo "false" > "$STATUS_FILE" | ||||
|     else | ||||
|         echo "VPN connection through Mullvad detected." | ||||
|         exit 1 # Exit with error code to indicate condition not met | ||||
|         echo "VPN connected." | ||||
| 
 | ||||
|         # Send a "VPN restored" alert if VPN was not connected last time | ||||
|         if [ "$previous_status" = "false" ]; then | ||||
|             vpn_up_alert | ||||
|             echo "VPN restored alert sent!" | ||||
|         fi | ||||
| 
 | ||||
|         # Log the current status | ||||
|         echo "true" > "$STATUS_FILE" | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| # Fetch JSON data | ||||
| # Fetch JSON data from Mullvad API | ||||
| json=$(curl -s https://ipv4.am.i.mullvad.net/json) | ||||
| 
 | ||||
| # Get Reported IP | ||||
| # Get Reported IP and ISP | ||||
| IP=$(echo "$json" | grep -oE '"ip":\s*"[^"]+"' | grep -oE '[0-9.]+') | ||||
| # Get Reported ISP | ||||
| ORG=$(echo "$json" | grep -oP '(?<="organization":")[^"]+') | ||||
| 
 | ||||
| # Parse JSON and extract "mullvad_exit_ip" | ||||
| # Parse JSON and extract "mullvad_exit_ip" (true if VPN, false if not) | ||||
| mullvad_exit_ip=$(jq -r '.mullvad_exit_ip' <<< "$json") | ||||
| 
 | ||||
| # Check if "mullvad_exit_ip" is false | ||||
| check_mullvad_exit_ip "$mullvad_exit_ip" | ||||
| # Check if the status log file exists, if not create it with a default value (false) | ||||
| if [ ! -f "$STATUS_FILE" ]; then | ||||
|     echo "false" > "$STATUS_FILE" | ||||
| fi | ||||
| 
 | ||||
| # Read the previous VPN status from the log file | ||||
| previous_status=$(cat "$STATUS_FILE") | ||||
| 
 | ||||
| # Check the current VPN status and take action | ||||
| check_vpn_status "$mullvad_exit_ip" | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user