From ad455f510d0496f6f7913b2787b402410f707c09 Mon Sep 17 00:00:00 2001 From: "manuel.maier" Date: Tue, 24 Mar 2026 23:06:45 +0100 Subject: [PATCH] wg-client-status.sh aktualisiert --- wg-client-status.sh | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/wg-client-status.sh b/wg-client-status.sh index f5c540e..5d6160f 100644 --- a/wg-client-status.sh +++ b/wg-client-status.sh @@ -4,27 +4,33 @@ URL="https://node-red.mgnt.vmd55888.de/vpn-status" MY_HOSTNAME=$(hostname) -# WICHTIG: Im Cron sind Pfade oft limitiert, daher suchen wir sie uns: +# Pfade absolut setzen für Cron-Kompatibilität NETCLIENT=$(which netclient || echo "/usr/sbin/netclient") CURL=$(which curl || echo "/usr/bin/curl") # --- DOPPEL-CHECK --- -# Falls netclient nicht gefunden wird oder der Server gerade rebootet [ ! -x "$NETCLIENT" ] && exit 1 # --- LOGIK --- -# Wir holen die Peers. -# "sudo" ist oft nötig, wenn das Script als normaler User im Cron läuft! -$NETCLIENT peers | grep -E "vpn|mdvpn" | while read -r line; do +# Wir nehmen die komplette Liste (ohne grep-Filter), +# damit wirklich jeder Peer verarbeitet wird. +$NETCLIENT peers | while read -r line; do # Spalte 4: Name, Spalte 7: Handshake CLIENT_RAW=$(echo "$line" | awk -F'|' '{print $4}' | xargs) HANDSHAKE=$(echo "$line" | awk -F'|' '{print $7}' | xargs) + # Überspringen, falls die Zeile keinen Client-Namen enthält (z.B. Header/Trenner) [[ -z "$CLIENT_RAW" ]] && continue + # Verhindert, dass die Header-Zeile "HOSTNAME" verarbeitet wird + [[ "$CLIENT_RAW" == "HOSTNAME" ]] && continue STATUS="false" - if [[ "$HANDSHAKE" == *"seconds"* ]] || [[ "$HANDSHAKE" =~ ^[1-5]\ minute ]]; then + + # Online-Logik: "seconds" ODER 1 bis 10 Minuten + if [[ "$HANDSHAKE" == *"seconds"* ]]; then + STATUS="true" + elif [[ "$HANDSHAKE" =~ ^([1-9]|10)\ minute ]]; then STATUS="true" fi