#!/bin/bash set -euo pipefail # Sous‑réseau à surveiller SUBNET="192.168.7.0/24" # Fichier de cache contenant la liste des hôtes vus lors du dernier scan CACHE="/tmp/monitor_disconnect_cache.txt" # Fonction de scan : ping‑scan avec nmap, on ne garde que les adresses IP actives scan_hosts() { nmap -sn "$SUBNET" -oG - | awk '/Up/{print $2}' } # Première exécution → créer le cache et quitter if [[ ! -f "$CACHE" ]]; then scan_hosts > "$CACHE" exit 0 fi # Scan actuel CURRENT="$(mktemp)" scan_hosts > "$CURRENT" # Déterminer les hôtes qui ont disparu depuis le dernier scan MISSING=$(comm -23 <(sort "$CACHE") <(sort "$CURRENT")) || true # Si des hôtes sont manquants, envoyer une alerte XMPP via MQTT (le broker relayera vers Nexus) if [[ -n "$MISSING" ]]; then while IFS= read -r ip; do MSG="ALERTE : machine $ip déconnectée du réseau $SUBNET" mosquitto_pub -h "$MQTT_BROKER" -t "agents/nexus/inbox" -m "$MSG" done <<< "$MISSING" fi # Mettre à jour le cache pour le prochain cycle mv "$CURRENT" "$CACHE"