Aller au contenu

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


Messages recommandés

Posté(e)
il y a 2 minutes, Zeus a dit :

Oui c'est ça. La tout première fois d'ailleurs, il crée le fichier mais ensuite il ne fait que modifier l'IP a l'intérieur si besoin.

OK. Ça te vas si je reprends ton script pour le tuto. Je le trouve plus élégant 😀

 

Posté(e)

Possible mais ça je sais pas. Et Synology change tellement de choses après leurs majs que c'est dure de suivre...

Je suis en train d'essayer d'améliorer le script en ajoutant un fichier log pour mémoriser tous les changements d'adresses.

Posté(e)

J'ai été obligé de m'absenter rapidement cet après-midi.

Je vous ai donc lâchement quitté en plein milieu d’échanges.

Je vous présente mes excuses.

Pour me faire pardonner une nouvelle version de votre script (il restait quelques bugs)

#!/bin/bash

#####################
### CONFIGURATION ###
#####################

to="destinataire@ndd.tld"
from="Serveur xxx <expediteur@ndd.tld>"
subject="Votre adresse IP publique (IPv4) a changé !\r\n"

# destination du message temporaire
messageFile="/volume1/administration/check_ip_wan/message.txt"
# fichier de memo de l'IP
memoIP="/volume1/administration/check_ip_wan/ip.txt"

##############
### SCRIPT ###
##############
current_ip=`curl -silent -L http://checkip.amazonaws.com|tail -n 1`

if test -f "$memoIP"; then
    old_ip=`cat $memoIP` #lecture ancienne IP si fichier ip.txt existe
fi

if [ "${old_ip}" != "${current_ip}" ]; then
    # création du fichier ip.txt et envoi d'un mail avec les informations
    echo $current_ip > $memoIP
    
    # contenu du message
    body=`printf "Bonjour,\r\n\rVotre adresse IP publique a changé !\r\n\r\nVotre ancienne adresse IP était : $old_ip\r\nVotre nouvelle adresse IP est : $current_ip\r\n\r\nCordialement..."`
    echo -e "to:${to}">${messageFile};
    echo -e "from:${from}">>${messageFile};
    echo -e "subject:${subject}">>${messageFile};
    echo -e "${body}" >> ${messageFile};
    ssmtp -v ${to} < ${messageFile};
    rm ${messageFile}
else
    echo "Adresse IP non changée !"
fi
exit 0

Pour ce qui concerne le lancement du script au démarrage, au moins pour DSM (je n'ai pas de routeur Syno), il suffit de le lancer par le planificateur de tâches.

Faire créer puis choisir tâche déclenchée.  (cela est sans doute similaire sur le SRM)

 

Posté(e) (modifié)

Sur SRM, il n'y a pas de planificateur de tâches comme sur DSM 😉

J'étais justement en train de retravailler mon script en cherchant comment intégrer les logs.J'ai ça en gros à intégrer :

# journal
	
if	[ "$old_ip" != "$current_ip" ]; then
	
	echo " " >> $journal
	echo "----------------------" >> $journal
	echo $(date +"%d/%m/%Y à %H:%M:%S") >> $journal
	echo "----------------------" >> $journal
	echo $subject >> $journal
	echo Votre ancienne adresse IP était : $old_ip >> $journal
	echo Votre nouvelle adresse IP est : $current_ip >> $journal
fi

 

# Cible du fichier log (création automatique du fichier)
journal=/volume1/administration/check_ip_wan/ip.log

Merci par avance pour ton aide 🙂

Modifié par Zeus
Posté(e)

Je ne parviens que tres difficilement à naviguer sur ce forum, qu'en est-il pour vous?

Pouvez-vous tester cette nouvelle version du script?

#!/bin/bash

#####################
### CONFIGURATION ###
#####################

to="destinataire@ndd.tld"
from="Serveur xxx <expediteur@ndd.tld>"
subject="Votre adresse IP publique (IPv4) a changé !\r\n"

# destination du message temporaire
messageFile="/volume1/administration/check_ip_wan/message.txt"
# fichier de memo de l'IP
memoIP="/volume1/administration/check_ip_wan//ip.txt"
# fichier de log
journal="/volume1/administration/check_ip_wan/ip.log"

##########
### SCRIPT ###
##############
current_ip=`curl -silent -L http://checkip.amazonaws.com|tail -n 1`

if test -f "$memoIP"; then
    old_ip=`cat $memoIP` #lecture ancienne IP si fichier ip.txt existe
fi

if [ "${old_ip}" != "${current_ip}" ]; then
    # création du fichier ip.txt et envoi d'un mail avec les informations
    echo $current_ip > $memoIP
    
    # contenu du message
    body=`printf "Bonjour,\r\n\rVotre adresse IP publique a changé !\r\n\r\nVotre ancienne adresse IP était : $old_ip\r\nVotre nouvelle adresse IP est : $current_ip\r\n\r\nCordialement..."`
    echo -e "to:${to}">${messageFile};
    echo -e "from:${from}">>${messageFile};
    echo -e "subject:${subject}">>${messageFile};
    echo -e "${body}" >> ${messageFile};
    ssmtp -v ${to} < ${messageFile};
    rm ${messageFile}
    echo "----------------------" >> $journal
    echo $(date +"%d/%m/%Y à %H:%M:%S") >> $journal
    echo "----------------------" >> $journal
    echo $subject >> $journal
    echo "Votre ancienne adresse IP était : $old_ip" >> $journal
    echo "Votre nouvelle adresse IP est :  $current_ip" >> $journal
else
    echo "Adresse IP non changée !"
fi
exit 0


PS

PS pour @Zeus

Concernant le script wilscard , on peut passer un paramètre(pour test) pour avoir un renouvellement plus fréquent.

Déboguer en faisant un test tous les 85 jours n'est pas optimal!!!

Posté(e) (modifié)

Pour wildcard, on en reparle en MP si tu veux bien histoire de pas pourrir ce topic 😉

Pour ton script, ok je vais le tester, j'avais pas fait comme toi pour la partie log. Ça fonctionnait mais mon script me semblait bizarre...

Dans ton dernier script, je constate une toute petite faute de frappe.

Citation

# fichier de memo de l'IP
memoIP="/volume1/administration/check_ip_wan//ip.txt"

Je vais le tester 🙂

EDIT 1 : je constate aussi qu'il ne faudrait pas que la ligne echo "Adresse IP non changée !" soit dans le fichier log. Pour un test toutes les minutes, c'est beaucoup de lignes inutiles dans le fichier log.

EDIT 2 : j'ai oublié de te préciser mais oui moi aussi j'ai eu une perte du forum tout à l'heure. Ça merdouille pas mal ces dernières semaines...

Modifié par Zeus
Posté(e) (modifié)

J'ai testé ton script est il fonctionne. Comme je l'ai dit juste au dessus, j'ai le fichier log qui se remplit à vitesse grand V à cause de l'echo que j'ai cité.

Voici le script que j'ai légèrement modifié :

#!/bin/bash

### CONFIGURATION ###

to="destinataire@ndd.tld"
from="Serveur xxxx <expediteur@ndd.tld>"
subject="Votre adresse IP publique (IPv4) a changé !"

# destination du message temporaire
messageFile="/volume1/administration/check_ip_wan/message.txt"
# fichier de memo de l'IP
memoIP="/volume1/administration/check_ip_wan/ip.txt"
# fichier de log
journal="/volume1/administration/check_ip_wan/ip.log"

### SCRIPT ###

current_ip=`curl -silent -L http://checkip.amazonaws.com|tail -n 1` # récupération de l'adresse ip sur un service d'Amazon

if test -f "$memoIP"; then
    old_ip=`cat $memoIP` # lecture ancienne adresse IP si le fichier ip.txt existe
fi

if [ "${old_ip}" != "${current_ip}" ]; then
    # création du fichier ip.txt et envoi d'un mail avec les informations
    echo $current_ip > $memoIP
    
    # contenu du message
    body=`printf "Bonjour,\r\n\rVotre adresse IP publique a changé !\r\n\r\nVotre ancienne adresse IP était : $old_ip\r\nVotre nouvelle adresse IP est : $current_ip\r\n\r\nCordialement..."`
    echo -e "to:${to}">${messageFile};
    echo -e "from:${from}">>${messageFile};
    echo -e "subject:${subject}">>${messageFile};
    echo -e "${body}" >> ${messageFile};
    ssmtp -v ${to} < ${messageFile};
    rm ${messageFile}
    
    # enregistrement dans le journal
    echo " " >> $journal
    echo "----------------------" >> $journal
    echo $(date +"%d/%m/%Y à %H:%M:%S") >> $journal
    echo "----------------------" >> $journal
    echo $subject >> $journal
    echo "Votre ancienne adresse IP était : $old_ip" >> $journal
    echo "Votre nouvelle adresse IP est :  $current_ip" >> $journal
fi
exit 0

 

Modifié par Zeus
Posté(e)

Je n'ai rien compris!

L'info "Adresse IP non changée !" n'a aucune raison d'aller dans le fichier de log (/volume1/administration/check_ip_wan/ip.log)

Ce  script est lancé toutes les minutes? Pourquoi???

 

 

Posté(e)

J'ai lancé ce script à des fins de tests toutes les minutes.

Et pourtant, cette echo se retrouve bien dans le fichier log autant de fois que le script se lance et ne constate pas de changement d'ip.

 

Posté(e) (modifié)

Ce que tu appelles fichier de log c'est bien /volume1/administration/check_ip_wan/ip.log?

Si c'est bien cela, je ne comprend vraiment pas comment cette info puisse s'y retrouver!!!

Elle ne devrait qu'apparaitre dans le terminal et donc visible que si le script est lancé en SSH.

J'avais les yeux bouchés car je ne trouvais les modifs de fichier!!!

Modifié par PPJP
Posté(e)

Oui tout à fait, je parle bien de ip.log

L'info se retrouve bien dedans si l'ip ne change pas.

 

En modification, j'ai pas fait grand chose. J'ai surtout viré cette ligne echo.

Posté(e)

Quand j'aurais un peu de temps j'installerai ce script sur mon NAS, pour pouvoir le lancer.

Car la, je ne comprends vraiment pas.

Je vais pouvoir revenir un peu au débogage de shell (pouahh!).

Mais ce ne sera probablement que dans quelque temps, car comme cette instruction est supprimée, cela n'a aucun caractère d'urgence.

Je ferai un retour de mes test.

Je vais quitter, bonne nuit.

Posté(e)

Bonjour,

Dans SRM, il devrait être possible de lancer ce script par un script à créer dans  /usr/local/etc/rc.d.
Ce script avec suffixe .,sh permission 755 devra avoir les options start et stop.

Posté(e)

Hey......Y'a du chagement depuis hier soir 😅

Je vais tester cela un peu plus tard. Merci pour le suivi je corrigerai cela un peu plus tard.

il y a 7 minutes, PPJP a dit :

Ce script avec suffixe .,sh permission 755 devra avoir les options start et stop

Est-ce que tu as un exemple "simple" ? Car j'ai une idée en tête mais il me faut un exemple avec start et stop,

Par exemple un fichier "boot.sh" en chmod 755 dans /usr/local/etc/rc.d.

avec comme ceci à l'interieur :

#!/bin/bash
touch /volume1/test.txt

 

Posté(e)

Bonjour,

Si votre script est nommé check_ip_wan.sh et situé dans le dossier  /volume1/administration/check_ip_wan, vous pouvez tester avec le fichier boot.sh contenant:

case  $1 in
start)
          /volume1/administration/check_ip_wan/check_ip_wan.sh
         ;;
stop)
         ;;
         *)
echo "Usages: $0 [start|stop]"
         ;;
esac

Posté(e)
il y a 1 minute, PPJP a dit :

Bonjour,

Si votre script est nommé check_ip_wan.sh et situé dans le dossier  /volume1/administration/check_ip_wan, vous pouvez tester avec le fichier boot.sh contenant:

case  $1 in
start)
          /volume1/administration/check_ip_wan/check_ip_wan.sh
         ;;
stop)
         ;;
         *)
echo "Usages: $0 [start|stop]"
         ;;
esac

Merci

Posté(e)

Je ne sais pas et ne possède pas de routeur syno pour tester.

A tout hasard essayez de changer le nom du fichier boot.sh en S97boot.sh.

Posté(e)
il y a 29 minutes, Superthx a dit :

Mais au demarrage du routeur il fait que dalle.

Comment le savez_vous?

S'il n'y a pas de changement d'IP aucun fichier n'est modifié ni mail d'expédié.

Pour faire un test laissant des traces supprimez le fichier

/volume1/administration/check_ip_wan/ip.txt

avant reboot du routeur

Posté(e)

Ou un petit coup de vi sur le fichier ip.txt en changeant simplement un chiffre. Au prochain test, il fera son travail. C'est comme ça que je provoque l'envoi du mail et la génération du fichier log.

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.