#!/bin/bash # Mullvad_VPN_Check # 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" # 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" < "$STATUS_FILE" else 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 from Mullvad API json=$(curl -s https://ipv4.am.i.mullvad.net/json) # Get Reported IP and ISP IP=$(echo "$json" | grep -oE '"ip":\s*"[^"]+"' | grep -oE '[0-9.]+') ORG=$(echo "$json" | grep -oP '(?<="organization":")[^"]+') # Parse JSON and extract "mullvad_exit_ip" (true if VPN, false if not) mullvad_exit_ip=$(jq -r '.mullvad_exit_ip' <<< "$json") # 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"