Comparer deux adresses IP dans une variable
Bonjour à tous,
je suis vraiment débutant en programmation.
Je rencontre parfois un désagrément avec ma box fibre qui change d'adresse IP Publique parfois, pourtant censée être fixe.
Pour connaitre ma nouvelle IP quand je ne suis pas chez moi, j'ai mis en place un script qui m'envoie par mail mon IP.
J'ai une VM en debian qui fait ce travail. Mais comme je ne veux pas être spammé toutes les heures (selon la crontab) avec un mail comportant mon adresse ip, je voudrais avoir un mail seulement si mon adresse IP publique n'est plus celle attendue.
voici le code (avec anonymisation)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #!/usr/bin/perl
my $IP = '222.222.222.222';
my $url = 'http://icanhazip.com';
my $html = qx{wget --quiet --output-document=- $url};
print "$IP est IP Attendue\n";
print "$html est l'adresse reelle\n";
# Envoie de l'adresse par mail
if ("$html" != "$IP")
{
$to = 'monID@gmail.com';
$from = 'monID@gmail.com';
$subject = 'IP Email';
$message = $html;
open(MAIL, "|/usr/sbin/sendmail -t");
# Email Header
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n\n";
# Email Body
print MAIL $message;
close(MAIL);
print "Email Sent Successfully\n";
} else {
print "l'adresse n'a pas changé, pas de mail envoyé\n";
} |
Ce que j'obtiens à l'exécution du script :
Citation:
222.222.222.222 est IP Attendue
222.222.222.223 est l'adresse reelle
l'adresse n'a pas changé, pas de mail envoyé
Bon la mise en forme laisse à désirer, j'en conviens.
Code:
1 2
| my $url = 'http://icanhazip.com';
my $html = qx{wget --quiet --output-document=- $url}; |
donne l'adresse IP avec un retour à la ligne.
Je ne sais pas comment faire pour que PERL analyse les deux chaînes présentées.
J'aimerais qu'il analyse deux chaines de caractères et voient si ce sont les même ou pas.
Est-ce que quelqu'un aurait la gentillesse de m'éclairer. Je trouve des choses bien compliquées sur le net pour le moment ?
Merci à vous
Virtua
Comparer deux adresses IP dans une variable
Bonjour,
En effet dans la mesure où c'est une chaine de caractère il faut utiliser ça par ex.
Code:
if ( $html =~ $IP )
Merci beaucoup !
Maintenant je recevrai un mail dans l'heure qui suivra un changement de mon IP publique par Orange !!
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #!/usr/bin/perl
my $IP = '222.222.222.222';
my $url = 'http://icanhazip.com';
my $html = qx{wget --quiet --output-document=- $url};
print "$IP est l'IP Attendue\n";
print "$html est l'adresse reelle\n";
# Envoie de l'adresse par mail
if ( $html =~ $IP )
{
print "L'adresse IP n'a pas changé, pas de mail envoyé\n";
} else {
$to = 'monID@gmail.com';
$from = 'monID@gmail.com';
$subject = 'IP Email';
$message = $html;
open(MAIL, "|/usr/sbin/sendmail -t");
# Email Header
print MAIL "To: $to\n";
print MAIL "From: $from\n";
print MAIL "Subject: $subject\n\n";
# Email Body
print MAIL $message;
close(MAIL);
print "Email Sent Successfully\n";
} |
output :
root@debian:
222.222.222.223 est l'IP Attendue
222.222.222.222
est l'adresse reelle
Email Sent Successfully
root@debian:
222.222.222.222 est l'IP Attendue
222.222.222.222
est l'adresse reelle
L'adresse IP n'a pas changé, pas de mail envoyé
Bon je n'ai pas réussi à retirer le retour ligne que je choppe de icanhazip.com mais c'est fonctionnel.
Je me demande si ce n'est pas ce retour ligne qui empechait la comparaison.
Je vais apprendre la différence entre =~ et !=
Il faut que je révise le chomp aussi !!
@ une prochaine,
Merci encore !
Cordialement,
Virtua