Aller au contenu

Envoi Mail De Mon Adresse Ip


Wolfseal

Messages recommandés

  • 1 mois après...

Bonjour

mon problème est semblable et je me posais la même question . Mais la réponse n'a pas été vraiment apportée :

Existe-t-il un moyen pour que le syno envoie un message comportant son adress IP ? Par exemple une fois par jour .

En ce moment le service DDNS de Syno ,que j'utilise , semble en rideau . Heureusement j'ai la dernière IP valide mais dès qu'elle va changer je n'aurai plus moyen de me connecter à mon Syno ( qui est distant ...)

Sauf à ce que le mail que je reçois actuellement d'échec d'enregistrement comporte la nouvelle adresse IP à enregistrer quand elle va changer ?

Lien vers le commentaire
Partager sur d’autres sites

  • 10 mois après...

Bonjour,

la réponse est Oui, puisque je l'ai fait. Mais cela demande une minimum de connaissance techniques et un accès administrateur en mode root.

Je me propose de vous guider pas à pas pour programmer cette fonctionnalité qui est si pratique.

0 AVANT PROPOS :

Ce message propose d'intervenir dans le système d'exploitation de votre NAS. Si Vous ne vous sentez pas capable de faire les modifications, ne les faites pas. Je décline également toute responsabilité concernant les conséquences imprévues de ce programme. Néanmoins ce programme fonctionne depuis 3 mois sur mon système sans pépin.

D'autre part, ce programme ne supporte pas les caractères non standards (caractères accentuées en particulier) pour les nom d'utilisateur du NAS (login), ainsi que dans leurs adresse mail. Enfin Le programme utilise une boite mail tel que Orange, Google, Yahoo, ... ou toute autre hébergeur de service "smtp" (service d'envoi de Mail afin d'envoyer les mail aux utilisateurs du NAS. Le fait de s'auto envoyer des mail ne posant à priori pas de problème (ca marche pour mon compte personnel). (Attention les mails peuvent arriver dans la boite de spam !, même si c'est vous qui l'avez envoyé (ou le NAS pour vous)).

Une Mesure de sécurité a été rajouté à ce programme, en supprimant les nombres qui ne changent pas lors d'un renouvellement d'IP. Par exemple si l'ancienne adresse était AAA.BBB.CCC.DDD et que la nouvelle adresse était AAA.EEE.CCC.DDD, le NAS vous enverra comme nouvelle adresse : " . EEE. . ". Ainsi quelqu'un qui intercepte ce message trouvera difficilement votre adresse, sachant que les probabilités sont élevées que votre nouvelle adresse contienne au moins un nombre de commun avec l'ancien (a la même position). Néanmoins, j'ai prévu la possibilité de déactiver ce processus.


I PRÉPARATIFS

- Pour ce faire, la première chose est d'installer le packet Python3.0 (rien de compliquer cliqué et c'est fini rien à paramétrer)

- Activer le service SSH dans "Panneau de config / Terminal"

- Télécharger "Bitvise SSH Client" (Terminal en ligne de commande) et "Win SCP" (Terminal en mode fenetré)


II PREMIER CONTACT AVEC LINUX

- Ouvrir "Win SCP" paramètre : Protocol = SCP; Nom d'hôte = adresse local du NAS (type 192.168.1.xx ou autre); Port = 22; Nom d'utilisateur = root. Sauvez et connecter vous.

- SCP établie une connexion avec votre NAS et vous demande de si vous souhaitez enregistrer la clé de cryptage dans les données temporaire. Cliquez sur Oui. Puis, CSP vous demande le mot de passe du compte "root". Il s'agit de votre mot de passe Administrateur.

- vous êtes maintenant connecté avec le système Linux embarqué sous-jacent du NAS Synology.

- Naviguez pour aller dans le dossier /<racine>/root si vous n'y êtes pas déjà.

- Créez un nouveau dossier "project" (clic droit "Nouveau/Répertoire")


III CRÉATION DU PROGRAMME PRINCIPALE

- Dans le répertoire "project", Créez un nouveau fichier "MailUpdatedIP.py" (clic droit "Nouveau/Fichier") . Une fenêtre s'ouvre. collez-y le programme suivant :







#!/usr/local/bin/python3
#-*- coding: latin-1 -*-

### This script send a mail containing the the internet IPv4 of the systhème

import smtplib
import os
import sys
import subprocess

from email.mime.text import MIMEText
from datetime import datetime




### DECLARATION DES CONSTANTES

MAIL  = "Login@Mailserver.fr"
MAIL_SERVER = 'smtp.MailServer.fr'
MAIL_PASSWORD = 'Mot de passe Boite Mail'

NO_COMPACT_IP = False
DEBUG = False
LOG = '/root/project/MailUpdatedIP.log'
LAST_IP = '/root/project/Last-IP'
TMP = '/root/project/SendMailtmp'

SYNOUSER = '/usr/syno/sbin/synouser'
WGET = '/usr/syno/bin/wget'
WGET_HTTP = 'http://checkip.dyndns.com'

### RECUPERE L'IP ACTUELLE

def getIP():
	global DEBUG
	if DEBUG:
		print('getIP()')
	### Récupère la page HTML de 'http://checkip.dyndns.com'
	with open(TMP, "w+") as f:
		subprocess.call([WGET, '-q', '-O', '-', WGET_HTTP], stderr=f, stdout=f)
		f.seek(0,0)
		Text = f.readline()
	
	### Extraction de l'IP contenu dans la page Web
	Start_IP = Text.find('Address: ')+9
	End_IP = Text.find('</body>')
	return Text[Start_IP:End_IP]




### EXTRAIT UNE LISTE DES MAIL DES UTILISATEURS DU NAS

def findMailListe():
	global DEBUG
	if DEBUG:
		print('findMailListe()')

	### Extrait la liste des utilisateurs
	with open(TMP, "w") as f:
		subprocess.call([SYNOUSER, '--enum', 'all'], stderr=f, stdout=f)

	with open(TMP, "r") as f:
		UsersList = f.readlines()

	UsersList = UsersList[1:]

	### Extrait les détail de tous les utilisateurs
	with open(TMP, "w") as f:
		for Name in UsersList :
			subprocess.call([SYNOUSER, '--get', Name[:-1]], stderr=f, stdout=f)

	with open(TMP, "r") as f:
		UsersDetails = f.readlines()

	### Supression du fichier temporaire
###	try:
		os.remove(TMP)
###	except IOError:
###		pass


	### Extrait les mails
	UsersDetails = [line[15:-2] for line in UsersDetails if line[0:9]=="User Mail" ]
	return [line for line in UsersDetails if line != ""]




### EXTRAIT LES CHIFFRES COMMUNS DE L'IP AVEC L'EX-IP

def Convert_IP(IP):
	global DEBUG
	global NO_COMPACT_IP
	if DEBUG:
		print('Convert_IP( %s )' % IP)
	### si pas de compactage de l'IP	
        if NO_COMPACT_IP:
                return IP

	### On récupère l'ancienne IP
	try:
		with open(LAST_IP,"r") as f:
			Last_IP = f.read()
	except FileNotFoundError:
		Last_IP=" . . . "

	### listage des IP
	EX_IP = Last_IP.split('.')
	NEW_IP = IP.split('.')

	### extraction des nombres communs aux IPs

	for i in range(0, 3):
		if EX_IP == NEW_IP :
			NEW_IP = ""
	return '.'.join(NEW_IP)




### CONTENU DU MAIL

def corpsMail(IP):
	global DEBUG
	if DEBUG:
		print('CorpsMail(%s)' % IP)

	corps = """
Bonjour,

La Nouvelle adresse IP du NAS est : """
	corps += Convert_IP(IP)
	corps += """
	

PS : Ce message a été généré par un robot, merci de ne pas tenter d'y répondre.
"""
	return corps




### ENVOYE UN TEXT COMMUN A CHACUN DES MEMBRE DE LA LISTE

def sendTextMail(text, liste_destinataires):
	global DEBUG
	if DEBUG:
		print('SendMail(%s, %s)' % ('Mail-Text', str(liste_destinataires)))

	fromaddr = MAIL
	mail = MIMEText(text)
	mail['From'] = fromaddr
	mail['Subject'] = "NAS Update"
	smtp = smtplib.SMTP(MAIL_SERVER)
	smtp.set_debuglevel(0)
	smtp.connect(MAIL_SERVER)
	smtp.login(MAIL,MAIL_PASSWORD)
	for d in liste_destinataires:
		if DEBUG:
			print('send mail to '+ d)
		smtp.sendmail(fromaddr,d,mail.as_string())
	smtp.close()




### MAIN PROGRAMME

def main():
	global DEBUG
	if DEBUG:
		print('Main()')

	### récupère l'IP actuelle
	Current_IP = getIP()


	### On récupère l'ancienne IP
	try:
		with open(LAST_IP,"r") as f:
			Last_IP = f.read()
	except FileNotFoundError:
		Last_IP=" . . . "


	### On compare à la nouvelle
	if Current_IP==Last_IP:
		### Supression du fichier temporaire
		os.remove(TMP)

		with open(LOG,"a") as f:
			f.write('New Test on '+datetime.now().strftime("%A, %d. %B %Y %I:%M%p")+', No Update, The IP is : '+Current_IP+'n')

		exit()	### si identique on sort


	### sinon on envoy un mail
	sendTextMail(corpsMail(Current_IP), findMailListe())


	### Puis on sauvegarde la nouvelle IP
	with open(LAST_IP,"w") as f:
		f.write(Current_IP)

	### Mise à jour du log file
	with open(LOG,"a") as f:
		f.write('New Test on '+datetime.now().strftime("%A, %d. %B %Y %I:%M%p")+', IP Updated, The IP is : '+Current_IP+'n')

if __name__=='__main__':
	main()

REMARQUE Importante : Ce fichier demande quelques modifications que vous seul pouvez apporter :

- Premièrement modifiez les valeurs des Constantes : MAIL, MAIL_PASSWORD et MAIL_SERVER pour les adapter à votre situation (mon compte mail est chez wanadoo et ca marche très bien) vous retrouverez ces paramètres dans votre boite de messagerie. (Pour déactiver le compactage de l'IP, il suffit de mettre à True la constante NO_COMPACT_IP)

- Deuxièmement, la mise en forme Windows et Linux étant différente, il vous faudra supprimer une ligne sur 2 à la main si vous constatez au collage qu'entre toutes les lignes il y a systématiquement une ligne vide. Néanmoins le fichier doit se terminer par une ligne vide!

- Enfin, le fichier doit commencer par la ligne "#!/usr/local/..." donc si des lignes vides se sont intercalées (bug de l'éditeur du blog), supprimé les.

vous pouvez maintenant enregistrer le fichier, et fermer la fenêtre de l'éditeur.

- Il vous faut maintenant rendre exécutable le fichier python. Pour cela faite un clic droite sur le fichier "MailUpdatedIP.py" et cliquez sur propriétés. Vous constaterez que les cases R (Read / lecture) et W (Write / écriture) du propriétaire sont cochées, ajoutez-y la case X (eXecut / Exécution) pour autoriser l'exécution du fichier. Vous en-profiterez pour supprimer toutes les autres coches, votre mot de passe de messagerie se trouvant non crypté dans le fichier, il est important de se prémunir de tout lecteur indésirable. Validez vos modifications par Ok.

IV PROVOQUER L'EXÉCUTION PÉRIODIQUE DU PROGRAMME PRINCIPAL

- Si Vous avez lu se scripte relativement bien commenté, vous aurez compris qu'il ne fait qu'une recherche de changement de l'adresse "Public", il lui faut donc un lanceur automatique. Pour cela vous aller ouvrir le dossier /<racine>/etc et modifier le fichier "crontab".

Ce fichier étant important pour le système, je vous conseil d'en faire une copie dans un sous-dossier "backup" dans le dossier "project" que nous avons créé.

- Ouvrez le fichier "contab" du répertoire "etc" et ajoutez la ligne :

15 */1 * * * root /root/project/MailUpdatedIP.py >> /root/project/Mail.log 2>&1

Attention : cette ligne doit être suivit d'un retour à la ligne unique.

Mon fichier crontab ressemble donc à ca :

#minute hour mday month wday who command
6 20 * * 2,5 root /usr/syno/bin/synopkg chkupgradepkg
48 15 * * 1,4 root /usr/syno/sbin/synoupgrade --fetch-all
15 */1 * * * root /root/project/MailUpdatedIP.py >> /root/project/Mail.log 2>&1

Remarque : cette ligne signifie exécuté le script MailUpdateIP.py toute les heures (le */1), à 15 minute en temps qu'utilisateur "root". Les message standard et les message d'erreur seront enregistrés dans le fichier Mail.log en écrasant le fichier précédent.

V CRÉATION D'UN FICHIER BATCH POUR RELANCER CRON

Il ne reste donc plus qu'à demander au système de prendre en compte nos modifications de "crontab".

vous allez créer un nouveau fichier dans le dossier "project" que vous aller nommer "cron-restart.sh" et vous y copierez les lignes suivantes :

/usr/syno/etc.defaults/rc.d/S04crond.sh stop

env - /usr/syno/etc.defaults/rc.d/S04crond.sh start

Attention : comme pour cron, un retour chariot est obligatoire pour valider la dernière ligne !

Une fois enregistré, vous lui attribuerez la propriété de fichier exécutable, comme nous l'avons fait pour le fichier MailUpdatedIP.py.

Remarque : ce fichier permet en une commande d'arrêter le programme cron et de le relancer comme si le système redémarrait.

VI PREMIÈRE ESSAIS EN LIGNE DE COMMANDE

Nous allons maintenant pouvoir mettre ce scripte en œuvre. Pour delà, nous allons exécuter Bitvise SSH Client avec pour paramètres de l'onglet "Login" section Server : Host = adresse du NAS (192.168.1.xx), port = 22; Section Authentication : UserName = root, Initial method = none. Ne reste plus que a cliquer sur login. De même que WinSCP, acceptez le code de cryptage pour la session, puis saisissez votre mot de passe.

Vous vous trouvez maintenant devant un petit écran noir que l'on appel invite de commande ou mode terminal. Du texte qui devrait ressembler à :

BusyBox V1.16.1 <2014-02-11 20:06:08 CST> Built-in shell <ash>

Enter 'help' for a list of built-in commands.

DiskStation>

Pour savoir où vous êtes dans l'arborescence Linux, vous pouvez taper "pwd" puis entrer.

Le système vous répondras surement "/root".

Pour consulter les fichier présents dans le dossier vous pouvez taper "ls" puis validez.

Le système vous répondra "- et project" avec project en bleu (signifiant que le fichier est un répertoire).

Pour passer dans le répertoire tapez "cd project" puis validez. vous pouver taper pwd et ls pour vérifier que vous êtes bien dans le sous-dossier "project" et que les fichier que vous avez créé précédemment sont bien là. Ils devraient d'ailleurs apparaitre en vert pour indiquer qu'ils sont exécutables.

Vous allez maintenant saisir la ligne suivante :

/root/project/MailUpdatedIP.py

et validez la ligne. Si tout s'est bien passé, l'exécution devrait se terminer par une nouvelle invite de commande, sans aucun autre message.Dans le cas contraire, l'interpréteur python vous indiquera la ligne qui lui a posé problème. Mais Soyons optimiste, l'exécution s'est passée sans anicroche, tapez donc "ls", vous constaterez qu'un nouveau fichier est arrivé : Last-IP. Ce fichier que vous pouvez ouvrir avec WinSCP, contient votre adresse Public. d'autre part, si vous avez enregistré votre adresse mail dans les paramètres utilisateur de DSM, vous devez avoir une nouveau mail dans votre boîte. Et cela est valable pour tous les utilisateur ayant enregistré leur adresse mail dans le DSM.

VII ACTIVATION DE LA MISE A JOUR DE LA CRON TABLE

Pour finir, lançons le mode automatique.

Pour cela nous allons exécuter le scripte cron-restart.sh :

/root/project/cron-restart.sh

Vous pouvez maintenant quitter la console en tapant "exit". et valider par logout la fin de session Bitvise SSH.

Pour fermer la session WinSCP faite ctrl + shift + D, puis fermé WinSCP.

VIII FIN

ÇA Y EST VOTRE NAS EST PRÊT A VOUS ENVOYER UN MAIL DÈS QUE VOTRE FOURNISSEUR CHANGE VOTRE IP

bon courage pour la procédure et profitez en bien.

PS: n'oubliez pas de déactiver le mode TERMINAL une fois terminé dans DSM : "Panneau de config / Terminal" décochez "activer le service SSH"

Modifié par ARES_XL
Lien vers le commentaire
Partager sur d’autres sites

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.