#!/bin/bash
#
# Print the IPv4 of the first active VPN tunnel interface, if any.
# Empty output when no VPN is up.
#
# macOS: utun*   Linux: tun*, wg*, ppp*

set -u

case "$(uname -s)" in
  Darwin)
    ifconfig 2>/dev/null | awk '
      /^utun[0-9]+:/   { iface=$1; sub(":", "", iface); next }
      /^[a-z]+[0-9]*:/ { iface="" }
      iface != "" && $1 == "inet" { print $2; exit }
    '
    ;;
  Linux)
    if command -v ip >/dev/null 2>&1; then
      ip -4 -o addr show 2>/dev/null \
        | awk '$2 ~ /^(tun|wg|ppp)[0-9]+/ { sub("/.*","",$4); print $4; exit }'
    fi
    ;;
esac
