voici donc une mise à jour du post/script basée sur :
le fait que ça ne fonctionnait pas du tout chez moi
je ne recevais pas les mails
Pour régler le premier souci :
- dans Notepad ++ mes fins de ligne affichaient CRLF au lieu de LF (si on affiche les caractères spéciaux)
- en fait il faut LF, et pour cela (dans Notepad++) il faut Edition -> Convertir les sauts de ligne -> Convertir en format UNIX (LF)
Ensuite les mails ne partaient pas, et là j'ai du changer dans le code du script. J'en ai profité pour faire d'autres adaptation (log : 1 ligne au lien de> 5 lignes à chaque changement de WAN, ...)
voici donc le code qui va bien (chez moi) pour DSM 7.2
#!/bin/bash
# NotifWanChange.sh
# https://www.nas-forum.com/forum/topic/63653-tuto-envoi-de-mail-de-changement-de-ip-pour-dsm-et-srm/
# 25/03/2025 by Jojo (BE) : compatibility with DSM 7.2
# & various optimisations (v0.1.0)
# 25/07/2019 by PPJP, Supertxt & unPixel : original numbering (v0.0.2)
#####################
### CONFIGURATION ###
#####################
# Mail
MAIL_TO="destinataire@ndd.tld"
MAIL_FROM="${HOSTNAME} <expediteur@ndd.tld>"
MAIL_SUBJECT="[${HOSTNAME}] Votre adresse IP publique (WAN) a changé !"
# fichiers de memo de l'IP et des logs
MEMOIPFILE="/volume1/ScriptsUnix/ip.txt"
LOGFILE="/volume1/ScriptsUnix/ip.log"
# listes de sites retournant l'IP WAN
SITES=("http://checkip.amazonaws.com" "https://api.ipify.org/" "http://ipecho.net/plain" "http://icanhazip.com/" "http://ipinfo.io/ip" "https://wtfismyip.com/text" "http://whatismyip.akamai.com/" "https://ipv4bot.whatismyipaddress.com" "https://www.dsfc.net/ipinfo.php" "http://api.ipaddress.com/myip")
#################
### FONCTIONS ###
#################
memoriser_IP()
{
echo $new_ip > $MEMOIPFILE
}
lire_old_ip()
{
if test -f "$MEMOIPFILE"; then
old_ip=`cat $MEMOIPFILE` #lecture ancienne IP si fichier ip.txt existe
fi
}
lire_ip_wan()
{
nbTest=0
ip_lue_valide=1
# boucle sur les sites pour en trouver un retournant une IP valide
until [[ $ip_lue_valide -eq 0 || $nbTest -eq $nbSites ]];do
ip_lue=`curl -s -L ${SITES[($[($1 + $nbTest) % $nbSites])]}`
if [[ $ip_lue =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then # test si reponse est une IP
ip_lue_valide=0
else
((nbTest++))
sleep 1 #utile?
fi
# repositine pointeur sur le suivant du dernier consulté
idSite=($[($1 + $nbTest) % $nbSites + 1])
done
}
envoi_mail()
{
MAIL_BODY=`printf "Bonjour,\nVotre adresse IP publique (WAN) a changé !\n\nAncienne IP : $old_ip\nNouvelle IP : $new_ip\n\nSynology DiskStation\n\nFrom ${HOSTNAME}"`
/usr/bin/php -r "mail('${MAIL_TO}', '${MAIL_SUBJECT}', '${MAIL_BODY}', 'From: ${MAIL_FROM}');"
}
inscription_log()
{
echo "$(date +'%d/%m/%Y-%H:%M:%S') : WAN $old_ip -> $new_ip" >> $LOGFILE
}
###############
### SCRIPT ###
###############
nbSites=${#SITES[@]}
idSite=$(( $RANDOM % $nbSites ))
lire_old_ip
lire_ip_wan $idSite
if [ $ip_lue_valide -eq 0 ]; then # si IP lue valide
if [ "${old_ip}" != "${ip_lue}" ]; then # si IP changée
new_ip=$ip_lue # IP à confirmer
ip_lue_valide=1
bcl=0
# recherche autre site fournissant une IP valide
until [[ $ip_lue_valide -eq 0 || $bcl -eq $nbSites ]];do
((bcl++))
lire_ip_wan $idSite
done
if [ "${ip_lue}" == "${new_ip}" ]; then # si nouvelle IP confirmée
memoriser_IP
inscription_log
envoi_mail
fi
fi
fi
#for testing rm $MEMOIPFILE
exit 0