IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Comparer deux adresses IP dans une variable


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Bonjour,

    Pas tout compris, mais peut-être qu'un simple:
    juste avant ta comparaison suffirait (ici, le but est juste de viré le retour à la ligne de la variable $html )
    Cordialement.

  3. #3
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonjour,
    en plus du chomp qui manque et qui est signalé par disedorgue

    il te faut faire la comparaison avec ne et non avec != car tu compares des chaines de caractères !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    32
    #!/usr/bin/perl
    my $IP = '90.0.14.31';
    my $url = 'http://icanhazip.com';
    my $html = qx{wget --quiet --output-document=- $url};
    chomp $html;
    print "$IP est IP Attendue\n";
    print "=$html= est l'adresse reelle\n";
    # Envoie de l'adresse par mail
    if ("$html" ne "$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";
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    michel@Xubuntu1:~/Téléchargements$ perl ess.pl
    90.0.14.31 est IP Attendue
    =90.0.14.30= est l'adresse reelle
    Email Sent Successfully
    michel@Xubuntu1:~/Téléchargements$
    Bon la mise en forme laisse à désirer, j'en conviens.
    Donc je n'en rajoute pas une couche et je ne me suis pas permis de modifier ton code

    PS: Je n'ai pas vérifié l'envoi du message...

  4. #4
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut 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.

    Merci beaucoup !
    Maintenant je recevrai un mail dans l'heure qui suivra un changement de mon IP publique par Orange !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #5
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Attention =~ est un opérateur d'expression régulière :
    Un peu de doc : chapitre VIII

    Avec :
    Tu testes si la totalité de la chaîne $html est contenue dans la chaîne $IP

    SI $IP = '222.222.222.222';
    ET SI $html = '222.222.222.22';

    Le test retournera la valeur VRAIE

    Ce n'est pas ce que tu attends !

    Dans ton cas, ça s'appelle un coup de bol

  6. #6
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Salut,
    Je vais lire le chapitre trois.
    J'avais en effet aperçu un truc dans le genre.
    Quand Orange me change d'adresse IP ça change plus que ça mais en effet ça n'est pas parfait.
    Je vais voir ce que je peur mettre pour parfaire mon script.
    Et oui je débute

    Merci pour ta précision !

    Cordialement,
    Virtua

    UPDATE : avec
    c'est mieux !!

    thx
    Virtua




    Citation Envoyé par dmganges Voir le message
    Attention =~ est un opérateur d'expression régulière :
    Un peu de doc : chapitre VIII

    Avec :
    Tu testes si la totalité de la chaîne $html est contenue dans la chaîne $IP

    SI $IP = '222.222.222.222';
    ET SI $html = '222.222.222.22';

    Le test retournera la valeur VRAIE

    Ce n'est pas ce que tu attends !

    Dans ton cas, ça s'appelle un coup de bol

  7. #7
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Citation Envoyé par virtuaword Voir le message
    Salut,
    Et oui je débute
    Nous sommes tous passés par là, heureusement

  8. #8
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Sauf dans les SSII où l'on commence tous par la case expert
    Cordialement.

  9. #9
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Sauf dans les SSII où l'on commence tous par la case expert
    Je suis trop vieux pour y croire à celle-là
    Et il parait que l'expérience n'éclaire que le chemin parcouru
    Ben moi quand je me retourne, je n'y vois RIEN

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mettre une adresse http dans une variable php
    Par Glork dans le forum Langage
    Réponses: 15
    Dernier message: 25/07/2013, 16h15
  2. Réponses: 5
    Dernier message: 06/05/2010, 20h08
  3. Réponses: 5
    Dernier message: 26/12/2007, 10h51
  4. Problème d'adresse dans une variable
    Par mick77 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/06/2007, 12h41
  5. Réponses: 4
    Dernier message: 11/09/2006, 08h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo