PascalHambourg a écrit:
Sinon, il faut identifier ce qui lance dhclient : network-manager ou équivalent notamment. Je ne connais pas les particularités d'Ubuntu. Peut-être en étudiant la "filiation" du processus dhclient, avec son PID parent ou avec pstree. Ou bien en examinant les logs système.
Le plus simple, pour trouver qui a requis dhclient, est de tromper le processus à l'origine du dhclient en l'envoyant, par symlink, vers un script qui capturera récursivement les lsof en partant son PID. On enregistrera de cette manière toute la parenté ascendante du PID qui a requis dhclient et les fichiers qu'il a ouverts.
Ceci devrait convenir:
Code:
#!/bin/sh
TRACE_FILE='/tmp/trace_dhcp'
date >> $TRACE_FILE
getParentPid() {
printf "\nPID -----> %s\n" $PID >> $TRACE_FILE
# Enregistrement du lsof du PID courant et capture du PID parent (option -R puis awk)
PID=$(lsof -R -p $PID | tee -a $TRACE_FILE | awk 'NR==2{print $3}')
# remontée récursive jusqu'au PID 1
[ $PID -ge 1 ] && getParentPid
}
# lancement de la récursion en partant du PID de ce script
PID=$$
getParentPid
# exécution du vrai dhclient
/sbin/dhclient.original
exit 0
A chaque invocation du client dhcp, tous les lsof seront enregistrés dans /tmp/trace_dhcp puis la vraie commande dhcp.original sera exécutée.
Ne pas oublier de remettre les choses en état une fois qu'on a suffisamment d'informations dans le fichier capturé!
Code:
# rm /sbin/dhclient
# mv /sbin/dhclient.original /sbin/dhclient
Un peu tordu mais ça marche.
edit:Version courte du script qui se contente d'envoyer l'ascendance du PID dans syslog. Devrait suffire pour détecter quel processus déclenche une demande dhcp:
Code:
#!/bin/sh
# insertion de l'ascendance dans syslog
logger $(pstree -As $$)
# exécution du vrai dhclient
/sbin/dhclient.original
exit 0