#!/bin/bash # --- KONFIGURATION --- URL="https://node-red.mgnt.vmd55888.de/vpn-status" MY_HOSTNAME=$(hostname) # Pfade absolut setzen für Cron-Kompatibilität NETCLIENT=$(which netclient || echo "/usr/sbin/netclient") CURL=$(which curl || echo "/usr/bin/curl") # --- DOPPEL-CHECK --- [ ! -x "$NETCLIENT" ] && exit 1 # --- LOGIK --- # 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" # Online-Logik: "seconds" ODER 1 bis 10 Minuten if [[ "$HANDSHAKE" == *"seconds"* ]]; then STATUS="true" elif [[ "$HANDSHAKE" =~ ^([1-9]|10)\ minute ]]; then STATUS="true" fi # 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 done