From 1aeca64d43eb080217aadd2209a7090d6258d3a1 Mon Sep 17 00:00:00 2001 From: "manuel.maier" Date: Tue, 24 Mar 2026 22:43:48 +0100 Subject: [PATCH] wg-client-status.sh aktualisiert --- wg-client-status.sh | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/wg-client-status.sh b/wg-client-status.sh index 45f680e..e5242aa 100644 --- a/wg-client-status.sh +++ b/wg-client-status.sh @@ -1,32 +1,34 @@ #!/bin/bash -# --- Konfiguration --- +# --- KONFIGURATION --- URL="https://node-red.mgnt.vmd55888.de/vpn-status" MY_HOSTNAME=$(hostname) -NETCLIENT=$(which netclient) -CURL=$(which curl) -# --- Logik --- +# WICHTIG: Im Cron sind Pfade oft limitiert, daher suchen wir sie uns: +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 - # Basierend auf deiner Diagnose: - # Spalte 4 ist der Name, Spalte 7 der Handshake + # Spalte 4: Name, Spalte 7: Handshake (basiert auf deiner Diagnose) CLIENT_RAW=$(echo "$line" | awk -F'|' '{print $4}' | xargs) HANDSHAKE=$(echo "$line" | awk -F'|' '{print $7}' | xargs) - # Client-Name säubern (Icons entfernen) für den Abgleich, falls nötig - CLIENT_CLEAN=$(echo "$CLIENT_RAW" | sed 's/[^a-zA-Z0-9._-]//g') - - # Falls CLIENT_RAW leer ist, überspringen [[ -z "$CLIENT_RAW" ]] && continue STATUS="false" - # Logik: Online wenn "seconds" vorkommt oder 1-5 Minuten if [[ "$HANDSHAKE" == *"seconds"* ]] || [[ "$HANDSHAKE" =~ ^[1-5]\ minute ]]; then STATUS="true" fi - # POST an Node-RED + # Daten abfeuern $CURL -s -X POST -H "Content-Type: application/json" \ -d "{\"server\": \"$MY_HOSTNAME\", \"client\": \"$CLIENT_RAW\", \"status\": \"$STATUS\", \"handshake\": \"$HANDSHAKE\"}" \ "$URL" > /dev/null