Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # === Config ===
- EMAIL="youremail"
- IP_FILE="$HOME/.last_public_ip"
- IP_CHECK_URL="https://api.ipify.org"
- LOGFILE="$HOME/ip_check.log"
- # === Ensure msmtp and expressvpn are installed ===
- command -v msmtp >/dev/null 2>&1 || { echo "â msmtp not found. Exiting."; exit 1; }
- command -v expressvpn >/dev/null 2>&1 || { echo "â expressvpn not found. Exiting."; exit 1; }
- # === Optional: Check if VPN is active ===
- VPN_STATUS=$(expressvpn status)
- echo "đ VPN status: $VPN_STATUS" >> "$LOGFILE"
- if echo "$VPN_STATUS" | grep -q "Connected"; then
- echo "đ´ Disconnecting ExpressVPN to fetch real IP..." >> "$LOGFILE"
- expressvpn disconnect
- sleep 5
- fi
- # === Get current real public IP ===
- CURRENT_IP=$(curl -s "$IP_CHECK_URL" | tr -d '[:space:]')
- [ -z "$CURRENT_IP" ] && echo "â Error: Could not retrieve IP." >> "$LOGFILE" && exit 1
- # === Reconnect VPN ===
- echo "đ Reconnecting ExpressVPN..." >> "$LOGFILE"
- expressvpn connect
- sleep 5
- # === Load last known IP ===
- [ -f "$IP_FILE" ] && LAST_IP=$(tr -d '[:space:]' < "$IP_FILE") || LAST_IP=""
- # === Debug Output ===
- echo "đĄ Current IP: [$CURRENT_IP] | Last IP: [$LAST_IP]" >> "$LOGFILE"
- # === Compare and act ===
- if [ "$CURRENT_IP" != "$LAST_IP" ]; then
- printf "%s\n" "$CURRENT_IP" > "$IP_FILE"
- HOSTNAME=$(hostname)
- TIMESTAMP=$(date)
- echo -e "From: $EMAIL\nTo: $EMAIL\nSubject: [${HOSTNAME}] Public IP Changed to $CURRENT_IP\n\nDate: $TIMESTAMP\nHostname: $HOSTNAME\nNew Public IP: $CURRENT_IP" | msmtp "$EMAIL"
- echo "â IP changed to $CURRENT_IP. Email sent. [$TIMESTAMP]" >> "$LOGFILE"
- else
- echo "âšī¸ IP unchanged. No email sent. [$TIMESTAMP]" >> "$LOGFILE"
- fi
Advertisement
Add Comment
Please, Sign In to add comment