Aller au contenu

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


Superthx

Messages recommandés

Bon alors voilà ce que je viens de faire :

  1. Copie du script
  2. Intégration dans mon serveur avec modification du dossier de destination et des deux adresses mails.
  3. Test

Premier test, premier mail reçu alors que ça ne devrait logiquement pas. Il m'affiche rien comme première ip mais m'affiche l'actuelle dans la nouvelle.

Pas de mail d'erreur de DSM par contre.

Second test, mail reçu avec les bonnes infos et pas de mail d'erreur de DSM.

J'ai par contre pas compris certaines choses. Ce test dure combien de temps ? Parce qu'il n'a pas l'air de s'arrêter et fonctionne en continu.

 

 

Lien vers le commentaire
Partager sur d’autres sites

Le 25/07/2019 à 15:23, Zeus a dit :

Premier test, premier mail reçu alors que ça ne devrait logiquement pas. Il m'affiche rien comme première ip mais m'affiche l'actuelle dans la nouvelle

Le fichier mémorisant l'IP était absent ou vide

 

Le 25/07/2019 à 15:23, Zeus a dit :

Second test, mail reçu avec les bonnes infos et pas de mail d'erreur de DSM

Il n'est pas prévu d'envoyer un mail en cas d'erreur.

Le 25/07/2019 à 15:23, Zeus a dit :

Ce test dure combien de temps ? Parce qu'il n'a pas l'air de s'arrêter et fonctionne en continu

Le but étant de détecter un changement d'IP, il a été pensé pour tourner en continu.

Avec un lancement par gestionnaire de tâche ou cron à 00H00.

Il s’arrête de lui-même à l’approche de minuit, quelque soit l'heure où il a été lancé.

Mais il est pour l'instant bricolé pour une durée d'environ une minute.

Le 25/07/2019 à 16:49, Superthx a dit :

J'ai une erreur sur la ligne 11


./test.sh: line 11: syntax error: unexpected "("

Bizarre shell différent qui n'accepterait pas les tableaux???

Que donne en ligne de commande:

tableau=("a" "z" "e" "r" "r" )

En prime nouvelle version avec plusieurs petites modifs et j'ai rajouter uni info de version pour que l'on puisse savoir de quoi nous parlons

J'ai rajouté l’information IP sans changement dans la console pour pouvoir constater que le script tourne toujours.

#!/bin/bash

#survip.sh v0.1.1

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

DESTINATAIRE="destinataire@ndd.tld"
EMETTEUR="Serveur xxx <expediteur@ndd.tld>"

# 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")
CONFIRMATION=(" " " ")
# fichier de memo de l'IP
MEMOIPFILE="/volume1/script/forum/survip/dsm/ip.txt"
LOGFILE="/volume1/script/forum/survip/dsm/ip.log"
# Fichier temporaire pour messagerie
MSGFILE="/volume1/script/forum/survip/dsm/message.txt"

CYCLESURVEY=10 #300 # périodicité de vérification de l'IP WAN
RECONFIRMTEMPO=5 #tempo avant nouvel essai si pas 3 nouvelles IP identiques de suite
REVALIDTEMPO=2 #tempo avant nouvel essai si IP lue est invalide
DUREESCRIPT=60 #Solution temporaire pour MAP

#################
### 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
until [[ $ip_lue_valide -eq 0  || $nbTest -eq 3 ]];do
    ip_lue=`curl -silent -L  ${SITES[($[($1 + $nbTest) % $nbSites])]}|tail -n 1`
    if [[ $ip_lue =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
        ip_lue_valide=0
    else
        ((nbTest++))
        sleep 2
    fi
    idSite=($[($1 + $nbTest) % $nbSites])
done
 }
 
confirmer_new_ip()
{
 ip_confirmee=1
 bcl=0
 while [[ $bcl -lt 2 ]];do
    sleep 1
    ((idSite++))
    lire_ip_wan $idSite
    if [ $ip_lue_valide -eq 0 ]; then
        CONFIRMATION[$bcl]=$ip_lue
    else
        CONFIRMATION[$bcl]=" "
    fi
    ((bcl++))
done
if [[ $new_ip=CONFIRMATION[0] && $new_ip=CONFIRMATION[1] ]];then
    ip_confirmee=0
 fi
}

envoi_mail()
{
 # 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 : $new_ip\r\n\r\nCordialement..."`
 echo -e "to:${DESTINATAIRE}">${MSGFILE};
 echo -e "from:${EMETTEUR}">>${MSGFILE};
 echo -e "subject:${sujet} ">>${MSGFILE};
 echo -e "${body}" >> ${MSGFILE};
 ssmtp -v ${DESTINATAIRE} < ${MSGFILE};
 rm ${MSGFILE}
}

inscription_log()
{
echo "----------------------" >> $LOGFILE
echo $(date +"%d/%m/%Y à %H:%M:%S") >>  $LOGFILE
echo "----------------------" >> $LOGFILE
echo ${sujet} >>  $LOGFILE
echo "Votre ancienne adresse IP était : $old_ip" >>  $LOGFILE
echo "Votre nouvelle adresse IP est :   $new_ip" >>  $LOGFILE
}

horaire_fin_script()
{
t0=$(date +%s)
h0=$(date +%T)
hh=$((10#`echo ${h0:0:2}`))
mm=$((10#`echo ${h0:3:2}`))
ss=$((10#`echo ${h0:6:2}`))
#stop_max=$(($t0 - $hh*3600 - $mm*60 - $ss + 86400 - 90))
stop_max=$(($t0 + $DUREESCRIPT)) # pour MAP
}

##############
### SCRIPT ###
##############
nbSites=${#SITES[@]}
idSite=$(( $RANDOM % $nbSites ))
lire_old_ip
horaire_fin_script
tempo=0
fin_script=$(( $stop_max - $tempo ))
while [[ $(date +%s) -lt $fin_script ]];do
    lire_ip_wan $idSite
    sleep $tempo
    tempo=$CYCLESURVEY
    if [ $ip_lue_valide -eq 0 ]; then
        if [ "${old_ip}" != "${ip_lue}" ]; then
            new_ip=$ip_lue
            confirmer_new_ip
            if [ $ip_confirmee -eq 0 ]; then
                memoriser_IP
                sujet="Votre adresse IP publique (IPv4) a changé !"
                inscription_log
                envoi_mail
                lire_old_ip
            else
                tempo=$RECONFIRMTEMPO
            fi
        fi
    else
        tempo=$REVALIDTEMPO
    fi
    restant=$(($stop_max - $(date +%s)))
done
exit 0

 

Modifié par PPJP
script v0.1.1
Lien vers le commentaire
Partager sur d’autres sites

@PPJP : ce n'est pas tes adresses mails qui sont dans le script au moins ?

Quand je parlais d'erreur, je parlais de DSM lui même qui dans le gestionnaire des tâches prévient des erreurs d’exécution d'un script par mail 🙂

Citation

Le but étant de détecter un changement d'IP, il a été pensé pour tourner en continu.

Avec un lancement par gestionnaire de tâche ou cron à 00H00.

Il s’arrête de lui-même à l’approche de minuit, quelque soit l'heure où il a été lancé.

Mais il est pour l'instant bricolé pour une durée d'environ une minute.

Je le voyais pas comme ça pour ma part. Je voyais une tâche cron lancer le script toutes les X minutes (à programmer dans DSM) et que ce test durait pas plus de 10 secondes comme avant.

Là, j'ai vraiment eu l'impression qu'il tournait en boucle. Je te dis ça parce que j'ai remarqué dans mon pi-hole une tentative régulière de liaison avec un domaine de Google or j'interdis pratiquement tous les domaines de cette boite.

Et en y regardant de plus près, c'était une adresse contenue dans le script. Et même après avoir supprimé la tâche dans le gestionnaire des tâches, le script continuait de tourner et mon Pi-Hole affichait toujours cette url de google.

Il m'a fallu redémarrer le NAS pour que ça s'arrête. J'ai bien essayer de trouver un processus à arrêter mais je ne voyais rien d'anormal dans htop.

Je testerai ta nouvelle version 😉

 

Lien vers le commentaire
Partager sur d’autres sites

Bon et bien j'ai testé et ça ne fonctionne pas du tout.

Je ne sais pas ce qui se passe mais malgré que la tâche planifiée est créée, le script ne se lance pas. Je suis obligé de le lancer manuellement.

Ensuite, voilà le fichier log avec deux tests espacés de deux minutes :

----------------------
25/07/2019 à 23:53:34
----------------------
Votre adresse IP publique (IPv4) a changé !
Votre ancienne adresse IP était : 
Votre nouvelle adresse IP est :   88.345.134.2
IP sans changement
IP sans changement
IP sans changement
IP sans changement
IP sans changement
IP sans changement
 
----------------------
25/07/2019 à 23:55:25
----------------------
Votre adresse IP publique (IPv4) a changé !
Votre ancienne adresse IP était : 88.345.134.3
Votre nouvelle adresse IP est :   88.345.134.2
IP sans changement
IP sans changement
IP sans changement
IP sans changement
IP sans changement
IP sans changement

Comme tu peux le lire, il y a des entrées qui ne devraient pas être présentes. Et elles continuent à s'inscrire en ce moment même alors même que la tâche planifiée est supprimée.

Il y a donc bien quelque chose en arrière plan qui tourne continuellement. Je vais maintenant chercher comment l'arrêter en ssh car là, je peux pas redémarrer (en plein backup...).

Lien vers le commentaire
Partager sur d’autres sites

Il y a 1 heure, Zeus a dit :

ce n'est pas tes adresses mails qui sont dans le script au moins ? 

SI!!!

Oubli regretable!

il y a une heure, Zeus a dit :

Je ne sais pas ce qui se passe mais malgré que la tâche planifiée est créée, le script ne se lance pas. Je suis obligé de le lancer manuellement.

Comme nous sommes en test, je l'ai toujours lancé manuellement et je pensais que tu faisait de même..

Je vais essayer de passer par le planificateur.

Il y a 1 heure, Zeus a dit :

Et en y regardant de plus près, c'était une adresse contenue dans le script.

Tu peux la supprimer de la liste sans pb, mais laisser un espace entre chaque adresse.

 

Il y a 1 heure, Zeus a dit :

Comme tu peux le lire, il y a des entrées qui ne devraient pas être présentes

Cela provient de l'ajout de cette info mise pour pouvoir constater que le script tourne toujours.

Pour moi, elle n’apparait que dans la console, pas dans le fichier de log.

Corriges la ligne, en fin de script; echo "IP sans changement"  en  echo "IP sans changement">/dev/null # pour MAP

Il y a 1 heure, Zeus a dit :

Et elles continuent à s'inscrire en ce moment même alors même que la tâche planifiée est supprimée

La suppression d'une tâche n’arrête pas le ou les script lancés.

 

Il y a 1 heure, Zeus a dit :

Il y a donc bien quelque chose en arrière plan qui tourne continuellement

Dans mes tests le script s’arrête bien au moment prévu

En version " de test" celle que tu as arret après environ 1mn.

en version" de surveillance" arrêt juste avant minuit. (nouveau test en cours actuellement pour revérification)

Enfin une question comment as-tu lancé deux tests en deux minutes s'il n'y a pas d’arrêt des scripts?

En manuel via deux consoles?

Tu n’aurais pas plusieurs scripts qui tournent en même temps?

 

 

Lien vers le commentaire
Partager sur d’autres sites

Citation

Oubli regretable!

En espérant que le cache de Google ou que d'autres robots n'aient pas eu le temps de passer par là 😞

Citation

Tu peux la supprimer de la liste sans pb, mais laisser un espace entre chaque adresse.

Oui c'est bien ce que j'avais fait ensuite 😉 Cette partie du script était compréhensible pour mon petit niveau.

Citation

Pour moi, elle n’apparait que dans la console, pas dans le fichier de log.

Corriges la ligne, en fin de script; echo "IP sans changement"  en  echo "IP sans changement">/dev/null # pour MAP

Ok je verrais ça dans la journée, là, je vais aller me coucher.

Citation

La suppression d'une tâche n’arrête pas le ou les script lancés.

Oui oui je sais bien. Je me suis mal exprimé. Disons qu'à la fin de mes tests, je supprime la tâche planifiée qui m'a permit de faire les tests.

Je pourrais tout aussi bien le faire manuellement via la console 🙂

Citation

Tu n’aurais pas plusieurs scripts qui tournent en même temps? 

Des scripts, j'en ai quelques un oui qui tournent.

Citation

Enfin une question comment as-tu lancé deux tests en deux minutes s'il n'y a pas d’arrêt des scripts?

En manuel via deux consoles?

Je lance directement depuis le planificateur de tâche en cliquant sur exécuter ce qui revient au même que si je tape les deux fois la commande pour lancer le script.

Je l'ai fait sur deux minutes d'intervalle car j'ai vu qu'il ne se lançait pas automatiquement malgré l'activation dans le planificateur de tâches. Or d'habitude, il n'y avait pas de soucis avec cette étape de lancement automatique.

Citation

En version " de test" celle que tu as arret après environ 1mn.

en version" de surveillance" arrêt juste avant minuit. (nouveau test en cours actuellement pour revérification)

Ok pour la version de test.

Par contre, je comprend pas bien ta deuxième phrase. Ca veut dire que si je lance ce script en version "surveillance" à 00h00 par exemple, ce dernier va être en continu jusqu'à 23h59 pour ne pas dire 00h00 ?

Lien vers le commentaire
Partager sur d’autres sites

il y a 7 minutes, Zeus a dit :
Citation

Tu n’aurais pas plusieurs scripts qui tournent en même temps? 

Des scripts, j'en ai quelques un oui qui tournent.

Je voulais dire plusieurs instance de ce script.

 

il y a 8 minutes, Zeus a dit :

Par contre, je comprend pas bien ta deuxième phrase. Ca veut dire que si je lance ce script en version "surveillance" à 00h00 par exemple, ce dernier va être en continu jusqu'à 23h59 pour ne pas dire 00h00 ?

C'est la principe d"un script de surveillance de tourner en tâche de fond, non?

 

il y a 11 minutes, Zeus a dit :
  Citation

Pour moi, elle n’apparait que dans la console, pas dans le fichier de log.

Corriges la ligne, en fin de script; echo "IP sans changement"  en  echo "IP sans changement">/dev/null # pour MAP

Ou plus simplement supprime la, ainsi que le else qui précède.

Lien vers le commentaire
Partager sur d’autres sites

Citation

Je voulais dire plusieurs instance de ce script.

Absolument pas. Je n'ai qu'une instance 😉

Citation

C'est la principe d"un script de surveillance de tourner en tâche de fond, non?

Oui tout à fait mais je préfère que ce soit DSM qui gère ça et non le script lui même.

J'aime pouvoir gérer mes services directement depuis le planificateur de tâches et que les scripts eux même ne prennent pas le dessus sur ma configuration demandée.

Citation

Ou plus simplement supprime la, ainsi que le else qui précède.

Ok, je testerai ça ce soir 🙂

 

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

Il y a 20 heures, Zeus a dit :

Je l'ai fait sur deux minutes d'intervalle car j'ai vu qu'il ne se lançait pas automatiquement malgré l'activation dans le planificateur de tâches. Or d'habitude, il n'y avait pas de soucis avec cette étape de lancement automatique.

Il est possible que tu n'ai pas eu de chance.
J'ai trouvé un bug bien caché.
Le script plantait presque immédiatement si au moment de son lancement les heures, les mimutes ou les secondes étaient égale à 7 ou 8.
C'était peut-être les cas dans tes essais de lancement via le gestionnaire de tâche et pas lors des lancements manuels???
De plus c'était dans une ligne qui ne servait pas dans ton cas!!!
 

 
Sinon le script est toujours OK pour moi!

Il y a 23 heures, Zeus a dit :

---------------------- 25/07/2019 à 23:53:34 ---------------------- Votre adresse IP publique (IPv4) a changé ! Votre ancienne adresse IP était : Votre nouvelle adresse IP est : 88.345.134.2 IP sans changement IP sans changement IP sans changement IP sans changement IP sans changement IP sans changement ---------------------- 25/07/2019 à 23:55:25 ---------------------- Votre adresse IP publique (IPv4) a changé ! Votre ancienne adresse IP était : 88.345.134.3 Votre nouvelle adresse IP est : 88.345.134.2 IP sans changement IP sans changement IP sans changement IP sans changement IP sans changement IP sans changement

Le nombre" d'entrées parasites", cohérent avec la durée prévue, environ (1mn), semblent pourtant montrer que le script s’arrête bien.

Il y a 23 heures, Zeus a dit :

Et en y regardant de plus près, c'était une adresse contenue dans le script. Et même après avoir supprimé la tâche dans le gestionnaire des tâches, le script continuait de tourner et mon Pi-Hole affichait toujours cette url de google.

Quelle adresse?

Il y a 8 heures, Zeus a dit :

Oui tout à fait mais je préfère que ce soit DSM qui gère ça et non le script lui même.

J'aime pouvoir gérer mes services directement depuis le planificateur de tâches et que les scripts eux même ne prennent pas le dessus sur ma configuration demandée.

Je ne vois pas bien la différence entre un script tournant la journée complète et un script lancé toutes les minutes.
Quel intérêt y vois-tu, à part un arrêt plus rapide du script?

Enfin la question la plus importante!
Que veux-tu que ce script fasse?
Juste une vérification d'ip et le renseignement de cette IP dans un fichier si elle est cohérente avec deux autres sites différents?
Mais dans ce cas que fait-on si:
     un ou plusieurs sites ne répondent pas
    on détecte un changement d'IP qui n'est pas confirmé simultanément par les deux autres
    etc ...

Exprime ton besoin et nous corrigerons le script en conséquence.
Mais il ne durera pas systématiquement mois de 10s.
La comparaison sur trois sites, avec un timeout de généralemnt 30s chacun, peut facilement excédé ce temps.

En attendant, j’édite mon post avec la version corrigée du script (qui indique maintenant une version)

Lien vers le commentaire
Partager sur d’autres sites

Citation

J'ai trouvé un bug bien caché.

En effet, fallait le trouver ce genre de bug...

Citation

Quelle adresse?

Je ne sais plus laquelle c'est sur les nombreuses que tu as ajouté au script. Mais ça me ramenait bien sur Google lors de mes tests au niveau de mon serveur Pi-Hole.

Citation

Quel intérêt y vois-tu, à part un arrêt plus rapide du script?

Et bien déjà ça et c'est pas mal 🙂

Citation

Que veux-tu que ce script fasse?

Je voyais ça comme ça en gros :

  1. Vérification de l'adresse IP WAN sur deux sites différents (pas besoin de plus). Si un des deux sites est offline alors ça vérifie sur un autre pour toujours obtenir deux sources différentes.
  2. Comparaison des deux adresses IP obtenues et si ça concorde alors c'est comparé avec l'adresse qui est contenue dans ip.txt
  3. Si l'adresse IP est la même que celle dans le fichier ip.txt, le script s'arrête sans inscription de log ou d'envoi de mail.
  4. Si l'adresse IP WAN a changé alors c'est relaté dans le fichier log et envoyé par mail.

J’ajoute à ça une activation et gestion entièrement gérée par DSM. C'est lui via le planificateur de tâche qui exécute le script en fonction de la configuration qu'on a indiqué.

Lien vers le commentaire
Partager sur d’autres sites

il y a 13 minutes, Zeus a dit :

Et bien déjà ça et c'est pas mal 🙂

Pourquoi?

il y a 14 minutes, Zeus a dit :

Vérification de l'adresse IP WAN sur deux sites différents (pas besoin de plus). Si un des deux sites est offline alors ça vérifie sur un autre pour toujours obtenir deux sources différentes.

A l'origine tu avais demandé la confirmation sur 2 autres sites?

A préciser:

Si l'on a détecté un changement d'IP sur un premier site et impossibilité de confirmation sur d'autres (connexion coupée par ex)

Si aucun site accessible?

etc...

il y a 19 minutes, Zeus a dit :

J’ajoute à ça une activation et gestion entièrement gérée par DSM. C'est lui via le planificateur de tâche qui exécute le script en fonction de la configuration qu'on a indiqué.

Avec pour conséquence qu'aucun script ne sera en fonction lors du changement d'IP!

Avec quelle fréquence comptes-tu le lancer?

Je vais modifier le scipt pour qu'il répone à tes besoins;

 

Lien vers le commentaire
Partager sur d’autres sites

Citation

Pourquoi?

Parce que je fonctionne comme ça avec mes scripts 🙂 Je préfère tout uniformisé dans la même interface. Synology fait de bonnes choses et ça à mes yeux en est une. Je trouve par ailleurs contrab indigeste.

Citation

A l'origine tu avais demandé la confirmation sur 2 autres sites?

J'avais rien demandé au départ mais je me suis mêlé au jeu d'améliorer le script et c'était une idée oui car j'avais pensé à cette éventualité que le seul site sur lequel on se reposait pouvait à la fois être off ou même se tromper (peu probable quand même).

Citation

Si l'on a détecté un changement d'IP sur un premier site et impossibilité de confirmation sur d'autres (connexion coupée par ex)

Si aucun site accessible?

etc...

Tu vas loin dans le scénario mais comme tout est possible alors je dirais le prochain test après remise en ligne d'internet fera le travail. Après tout, pas besoin de faire quoi que ce soit pendant ce scénario puisqu'il n'y a plus d'internet...

Citation

Avec pour conséquence qu'aucun script ne sera en fonction lors du changement d'IP!

??? Je n'ai pas compris.

Citation

Avec quelle fréquence comptes-tu le lancer?

Je vais modifier le scipt pour qu'il répone à tes besoins;

Merci c'est gentil mais ne te prend pas la tête si tu as autre chose à faire 🙂

Quant à la fréquence, je n'en ai personnellement pas. Pour mon cas personnel et ayant une IP fixe non garantie, je dirais un test toutes les 12h. Mais pour d'autres, ça pourrait être toutes les minutes.

C'est pour ça aussi que ça me plait de régler cela dans le planificateur de tâche.

Merci en tout cas 😉

 

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

Chacun sa vision des choses.

il y a 7 minutes, Zeus a dit :

Pour mon cas personnel et ayant une IP fixe non garantie, je dirais un test toutes les 12h

Donc potentiellement 12H sans correction de ton DNS!!!

 

il y a 8 minutes, Zeus a dit :

Mais pour d'autres, ça pourrait être toutes les minutes

Inutile; il faut rester cohérent avec les ttl du DNS.

La correction du script ne devrati pas présenter de grosses difficultés.

Si l'on est optimiste disons demain (enfin aujourdhui)

Bonne soirée.

Lien vers le commentaire
Partager sur d’autres sites

Citation

Donc potentiellement 12H sans correction de ton DNS!!!

Oui, j'estime que je peux subir une panne de 12h en ce moment même. Mais encore une fois, ce n'est pas fixé. Je pourrais tout aussi bien décidé le lendemain de passer ce test à 1h.

A la rentrée par exemple, ça sera différent. Je passerais certainement à beaucoup plus court.

Citation

Inutile; il faut rester cohérent avec les ttl du DNS.

Chez certains provider, le changement est très rapide. Chez OVH par exemple, j'ai une option qui accélère la propagation 😉

Citation

Si l'on est optimiste disons demain (enfin aujourdhui)

Prend ton temps 😉

Bonne soirée également et merci.

Lien vers le commentaire
Partager sur d’autres sites

Voila qui devrait répondre à ton besoin, commenté (un peu) en plus!

#!/bin/bash

#shortsurvip.sh.sh v0.0.2

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

DESTINATAIRE="destinataire@ndd.tld"
EMETTEUR="Serveur xxx <expediteur@ndd.tld>"

# 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")
# fichier de memo de l'IP
MEMOIPFILE="/volume1/script/forum/survip/dsm/ip.txt"
LOGFILE="/volume1/script/forum/survip/dsm/ip.log"
# Fichier temporaire pour messagerie
MSGFILE="/volume1/script/forum/survip/dsm/message.txt"

#################
### 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()
{
 # 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 : $new_ip\r\n\r\nCordialement..."`
 echo -e "to:${DESTINATAIRE}">${MSGFILE};
 echo -e "from:${EMETTEUR}">>${MSGFILE};
 echo -e "subject:${sujet} ">>${MSGFILE};
 echo -e "${body}" >> ${MSGFILE};
 ssmtp -v ${DESTINATAIRE} < ${MSGFILE};
 rm ${MSGFILE}
}

inscription_log()
{
echo "----------------------" >> $LOGFILE
echo $(date +"%d/%m/%Y à %H:%M:%S") >>  $LOGFILE
echo "----------------------" >> $LOGFILE
echo ${sujet} >>  $LOGFILE
echo "Votre ancienne adresse IP était : $old_ip" >>  $LOGFILE
echo "Votre nouvelle adresse IP est :   $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
            sujet="Votre adresse IP publique (IPv4) a changé !"
            inscription_log
            envoi_mail
        fi
    fi
fi
exit 0

 

Modifié par PPJP
Ajout commentaires et modifs mineures
Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

Je reviens vers toi @PPJP pour m'excuser mais je ne pourrais pousser mes tests ces prochaines heures.

Je suis passé récemment en tout DNS over HTTPS sur mon réseau et j'ai forcément Pi-Hole qui fait des siennes. Il faut que je règle ce petit soucis avant de pouvoir lancer des blocages d'url et voir comment ça passe.

Merci pour ta compréhension 😉

 

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir Zeus,
Il n'y a besoin d'excuses!!!
Tu es le seul intéressé par ce script, donc nous y reviendrons quand tu le souhaiteras.
Avec un MP si le script ne réponds pas au besoin et que je ne me manifeste pas rapidement.

Creuses bien Pi-Hole, comme cela quand je m'y intéresserai, il y aura un expert pour me conseiller.
Bon courage.

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

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.