36 lines
1.1 KiB
Bash
Executable File
36 lines
1.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# /usr/local/bin/opsec-banner-cache.sh — Background WAN IP Cache Updater
|
|
# Updates /var/cache/opsec/wan_ip every 5 minutes (via cron)
|
|
# Never blocks shell startup — the banner reads from cache only
|
|
|
|
CACHE_DIR="/var/cache/opsec"
|
|
CACHE_FILE="${CACHE_DIR}/wan_ip"
|
|
ENDPOINTS="https://icanhazip.com https://ifconfig.me https://api.ipify.org"
|
|
|
|
mkdir -p "$CACHE_DIR"
|
|
chmod 755 "$CACHE_DIR"
|
|
|
|
PUB_IP=""
|
|
|
|
# Try via Tor first if running
|
|
if pgrep -x tor >/dev/null 2>&1 && ss -tln 2>/dev/null | grep -q ':9050 '; then
|
|
for ep in $ENDPOINTS; do
|
|
PUB_IP=$(curl -s --max-time 10 --socks5-hostname 127.0.0.1:9050 "$ep" 2>/dev/null | tr -d '[:space:]')
|
|
[ -n "$PUB_IP" ] && break
|
|
done
|
|
fi
|
|
|
|
# Fallback to direct if Tor failed or not running
|
|
if [ -z "$PUB_IP" ]; then
|
|
for ep in $ENDPOINTS; do
|
|
PUB_IP=$(curl -s --max-time 5 "$ep" 2>/dev/null | tr -d '[:space:]')
|
|
[ -n "$PUB_IP" ] && break
|
|
done
|
|
fi
|
|
|
|
# Only write if we got a valid-looking IP
|
|
if echo "$PUB_IP" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'; then
|
|
echo "$PUB_IP" > "$CACHE_FILE"
|
|
chmod 644 "$CACHE_FILE"
|
|
fi
|