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 :

Vérifcation IP regex


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 105
    Par défaut Vérifcation IP regex
    Bonjour,

    Je vous explique donc mon problème je souhaites donc mettre en place un script PERL pour configurer en quelques clic donc mon PROXY Squid .

    Je dois donc définir des ACL ( Acces Control List ) qui s'écrivent comme ceci a la fin d'un fichier :
    acl allowed_clients src 1xx.1xx.0.xxx /255.255.255.0
    http_acces allow allowed_clients
    http_acess deny allowed_clients
    Mon soucis étant que j'essaie donc de faire une boucle qui vérifie bien que l'utilisateur tape une adresse ip et non des caractère.
    Puis qu'il saisie le masque. Mais je possède des erreurs de compilation car il considère le / comme un opéraeur ( 192.168.1.31/255.255.255.0 )


    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
    33
    34
    35
    36
    print "#  ---- Configuration des différentes ACL (Acces Control List)---- #\n";
    						if ($choix2 == 1) {
    						### [Saisie des acl] ###
    							system('clear');				
    							print "#                                                 #\n";
    							print "#                                                 #\n";
    							print "#                                                 #\n";
    							print "{Saisissez l'adresse IP afin de configurer l'ACL du client }\n";
    							print "{                  que vous souhaitez configurer           }\n";
    							print "#                                                 #\n";
    							print "#                                                 #\n";
    							print "#                                                 #\n";
    							#$acl == 0 ;
    							while ($acl ==~ /^([0-9]{1,3}\.)}3}\.([0-9]{1,3})$ /) {
    								print "Choix (Adresse IP de la forme 1xx.xxx.xxx.xxx--> ";
    								$acl = <STDIN>;
    								chomp($acl);
    								print "#                                                 #\n";
    								print "#                                                 #\n";
    								print "Choix (Masque de la forme /1xx.xxx.xxx.xxx--> ";
    								print "Choix (PENSEZ A METTRE LE / SANS ESPACE AVANT DE TAPER VOTRE MASQUE ";
    								$mask = <STDIN>;
    								chomp($mask);
    									push (@tab,'###                                    ###');
    									push (@tab,'###                                    ###');
    									push (@tab, "acl allowed clients src $acl\n");
    									push (@tab, "http_acces allow allowed_clients\n");
    									push (@tab, "http_acces deny allowed_clients\n");
    									push (@tab,'###                                    ###');
    									push (@tab,'###                                    ###');
     
    								open(main::F, "> $fic") or die('        ! Ecriture impossible dans le fichier désigné !');
    					        		print F $_ foreach(@tab);
    								close(main::F);
    							}						
    						}
    Si vous pouvez me venir en aide sa serais franchement sympatoche
    Oni'

  2. #2
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    Il y a plusieurs fautes de syntaxe dans ton expression régulière, je doute que Perl l'accepte. En gardant tes conventions, tu peux faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/perl
    use strict; use warnings;
     
    my $input = '';
     
    do {
      print "Entrez l'IP et le masque (ex: 192.168.1.31/255.255.255.0): ";
      $input = <STDIN>;
      chomp $input;
    } until ($input =~ m|^((?:[0-9]{1,3}\.){3}[0-9]{1,3})/((?:[0-9]{1,3}\.){3}[0-9]{1,3})$| );
     
    (my $ip, my $mask) = ($1, $2);
    Et, vraiment, utilise les pragmas strict et warnings, cela t'évitera beaucoup de déconvenues.

    Pour ta gestion des adresses IP, à vrai dire, j'utiliserais un module du CPAN comme Net::IP qui traite les adresses IP et les masques ou au moins Regexp::Common::Net pour tester que tu as bien à faire à un motif d'adresse IP valide (ce que ne fait pas la regex ci-dessus).

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 105
    Par défaut
    Nikel cela fonctionne pas trop mal.
    En revanche au niveau des expressions régulière lors que l'on souhiates faire rentrer un chemin ( texte ) dans une variable qui va modifier un fichier de configuration.
    Comment définir que la double cote " et le / ne sont pas des 'operateur'

    Exemple :
    Je souhaite faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $chemin ="/etc/squid/banned.list";
    Sachant que les doubles côte doivent figurer dans le fichier de configuration.

    Comment faire ?
    Car la je fait saisir le chemin a l'utilisateur.

    Oni'

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 156
    Par défaut Guillemets
    Il faut "escaper" tes guillemets, ou utiliser des simples guillemets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    my $valeur;
    # remplissage de $valeur
    # $chemin contiendra '/etc/test'
    my $chemin ="'".$valeur."'";
    # $chemin contiendra "/etc/test"
    my $chemin ="\"$valeur\"";
    ;

  5. #5
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    Ce que tu veux, c'est "échapper" certains caractères.

    Tu peux le faire à la main (en les faisant précéder de \).

    Une autre solution consiste à utiliser la séquence \Q \E dans ton expression régulière (tout ce qui se trouve entre est "quoté").

    Et enfin, ce que je te conseille et qui est l'usage normal, utilise quotemeta pour "échapper" tous les caractères meta.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my $data = q{"my/path/in/config/file"};
    my $pattern = quotemeta($data);
    if ( /^$pattern/ ) {
      # traitement si $_ commence par la chaine
    }
    PS Tu trouves tout cela (et plus) dans la partie de la FAQ consacrée aux expressions régulières (sous "metacaractères et quantificateurs"). Regarde aussi perlre et surtout perlretut.

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 156
    Par défaut
    AAAhhhhh, la solution d'Iblis est bien plus propre claire et meilleure,
    ça fait déjà plusieurs fois que je vois quotemeta mais je l'oublie toujours après !
    En plus tu seras tranquille si un jour quelqu'un utilise des chemins avec des espaces, des @ (neuark), des $ (beuark), des < ou > (beuark) etc...

  7. #7
    Membre confirmé
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 105
    Par défaut
    Et ben sincèrement merci .
    Désormais je n'ais plus de problème ^^

    Oni'

Discussions similaires

  1. [Regex] Plusieurs motifs
    Par sissi_l dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 29/06/2004, 14h15
  2. [jakarta][regex]Matcher mot en entier.
    Par thibaut dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 26/05/2004, 13h33
  3. [Regex] Vérifier qu'une chaîne respecte une expression régulière
    Par PeteMitchell dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 13/05/2004, 14h22
  4. [regex][string] replaceAll bogué ?
    Par 7eme dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 13/11/2003, 16h36
  5. Cherche regex...
    Par laurent_h dans le forum C
    Réponses: 4
    Dernier message: 31/03/2003, 11h24

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