Aller au contenu

[TUTO] Envoi de mail de changement de IP pour DSM et SRM


Messages recommandés

Posté(e)

ni connaissant rien en scripts batch,

j'exécute votre script sur mon DSM 7.2, et il me retourne l'erreur suivante que je ne sais pas interpréter

/bin/bash: /volume1/ScriptsUnix/NotifWanChange.sh: /bin/bash^M: bad interpreter: No such file or directory

 une piste ? => Merci

Posté(e)

Dès la première ligne du script, il semble y avoir un caractère étrange après /bin/bash

Édite le script avec Notepad++ pour vérifier l'encodage ANSI et les sauts de ligne UNIX (LF).

Posté(e)

Merci de ta réponse rapide

En effet, j'édite avec Notepad++

L'encodage était UTF-8, et je j'ai changé, mais ça ne change rien.

J'affiche tous les caractères spéciaux, et voici ce que vois

image.png.7c36f9eb67ee3cdb9bf2e9cba0029672.png

Posté(e)

j'ai continué d'investigué suivant tes instructions,

et TOUS les scripts qui fonctionnent, ont à la fin de chaque ligne des LF et pas des CR LF comme ce script

image.thumb.png.631fd3d5a05dc0308d8b8fad33d8b5ff.png

 

MAIS

 

je ne sais pas détruire uniquement le CR : un del détruit le CR LF, comme si ce n'était qu'un seul charactère.

Une piste ?

Posté(e)

j'ai trouvé la solution pour mes CRLF :

Dans Notepad++ :

Edition -> Convertir les sauts de ligne -> Convertir en format UNIX (LF)

et je n'ai plus l'erreur 🙂

=> merci @PiwiLAbruti de m'avoir mis sur la piste.

Maintenant, je dois regarder pourquoi rien ne se passe ... (on y arrivera ...)

Posté(e)

voici donc une mise à jour du post/script basée sur :

  1. le fait que ça ne fonctionnait pas du tout chez moi
  2. 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

 

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.