Pour ceux utilisant isc-dhcp-server comme serveur DHCP (serveur par défaut dans les distributions debian), voici un tutoriel pour connaître les évènements commit, release et expiry de votre serveur.
Je l’utilise sur Jeedom pour savoir quand certains matériels (généralement en wifi) se réveillent et viennent chercher sur le serveur leur adresse IP.
Sur la machine hébergeant Jeedom
Création avec le plugin virtuel de trois commande info « Autre »
Sur la machine hébergeant le serveur DHCP :
Création de trois scripts dans le répertoire /etc/dhcp/dhcp-server-hooks.d
Si le répertoire n’existe pas
mkdir /etc/dhcp/dhcp-server-hooks.d
Création des trois scripts :
nano /etc/dhcp/dhcp-server-hooks.d/on_commit
nano /etc/dhcp/dhcp-server-hooks.d/on_release
nano /etc/dhcp/dhcp-server-hooks.d/on_expiry
Les trois scripts contiennent la même chose sauf l’id de la commande info (numID)
#!/bin/bash
curl 'https://tonjeedom.dns.fr/core/api/jeeApi.php?plugin=virtual&apikey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&type=virtual&id=numID&value='$1'-'$2
Je n’ai pas approfondi cette partie car je n’ai pas trouvé l’utilisateur dhcpd sur ma machine
Attribution des droits pour exécuter les scripts :
chmod 777 /etc/dhcp/dhcp-server-hooks.d/*
Ajout dans le fichier de configuration /etc/dhcp/dhcpd.conf
nano /etc/dhcp/dhcpd.conf
A ajouter dans la partie subnet
subnet xxxxxxxxxxxxxxxxxx {
................
................
on commit {
log("=============[ START COMMIT ]================");
set clientIP = binary-to-ascii(10, 8, ".", leased-address);
set clientMAC = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
log(concat("Commit: IP " , clientIP, " leased to MAC ", clientMAC));
execute("/etc/dhcp/dhcp-server-hooks.d/on_commit", clientIP, clientMAC); # optional parameters
log("============[ END COMMIT ]==================");
}
on release {
log("============[ START RELEASE ]===============");
set clientIP = binary-to-ascii(10, 8, ".", leased-address);
set clientMAC = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6));
log(concat("Release: IP ", clientIP, " released. It was associated to MAC ", clientMAC));
execute("/etc/dhcp/dhcp-server-hooks.d/on_release", clientIP, clientMAC); # optional parameters
log("===========[ END RELEASE ]==================");
}
on expiry {
log("===========[ START EXPIRY ]================");
set clientIP = binary-to-ascii(10, 8, ".", leased-address);
set clientMAC = binary-to-ascii(16, 8, ":" , substring(hardware, 1, 6));
log(concat("Expiry: IP ", clientIP, " expired. It was associated to MAC ", clientMAC));
execute("/etc/dhcp/dhcp-server-hooks.d/on_expiry", clientIP, clientMAC); # optional parameters
log("===========[ END EXPIRY ] =================");
}
................
................
}
Redémarrer le serveur DHCP.