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

Modules Perl Discussion :

[debutant] Parser du DIG ( urgent :( )


Sujet :

Modules Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 10
    Par défaut [debutant] Parser du DIG ( urgent :( )
    Bonjour,

    je commence le perl et j'ai besoin d'automatiser une tâche.

    L'idée est de faire un script qui puisse lancer plusieurs requêtes DIG (genre dig @<serveur dns> <domaine> <type>), d'en parser les résultats pour construire un fichier excel ensuite.

    En théorie, je pensais à faire un fichier contenant tous les domaines que j'ai à tester. Ensuite de faire le script qui prenne en argument le fichier, de lire chaque ligne du fichier, de lancer le dign en extraire le contenu, et au final de créer un fichier CSV et txt pour pouvoir importer le tout sous excel ...

    Qq'un a une meilleure idée ? On peut m'aider sur le comment programmer ça ?

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2005
    Messages : 165
    Par défaut
    Bonjour !!

    Si tu commences le Perl, ne passe pas ppar un fichier, mais toutes les données dans ton script, quand tu métraiseras le tout tu pourras faire des expérimentations.

    A la place tu peux utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/perl -w
    @listeDomaines = ("dom1","dom2","dom3","dom4","dom5"); # tableau contenant les domaines à tester
    foreach $val (@listeDomaines) {
        $retourDig = `dig $val <domaine> <type>`; # utilise des cote inversées
        print "$retourDig\n";
    }

    Regarde si ce bout de code te va, après écrire dans un fichier au format CSV ne pas va être très dur.

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 10
    Par défaut
    c'est un bon début.

    Je vais tester et si ça marche l'enrichir car il faut vraiment que je puisse lire un fichier en input pour les noms de domaine ... je me vois mal foutre 350 noms de domaines en brut dans le script

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2005
    Messages : 165
    Par défaut
    ok, et bien à la place du tableau et de la boucle foreach, essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    open FIC, "< tonFichier"; # fichier en lecture seule
    while(<FIC>) {
        chomp $_; #$_ contient la ligne lue et chomp supprime le retour-chariot
        $retourDig = `dig $val <domaine> <type>`; # utilise des cote inversées
        print "$retourDig\n";
    }
    Dans ton fichier, tu mets 1 domaine par ligne.
    Pour l'instant, le code t'affiche le retour de la commande DIG, tu te faudras manipuler la variable $retourDig pour former correctement ton fichier CSV.

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 10
    Par défaut
    Bon on avance petit à petit ... voici où j'en suis (et qui ne marche pas)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/usr/bin/perl -w
     
    my $fic = "$ARGV[0]";
    my $type = "$ARGV[1]";
    my $ns = "xx";
     
    open FICHIER,"< $fic" or die "Le fichier n'existe pas !";
     
    while(<FICHIER>) {
        chomp $_;
        $retourDig = `dig @$ns <FICHIER> $type`;
        print "$retourDig\n";
    }
    xx étant remplacé bien évidemment !

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 10
    Par défaut
    voici l'erreur :
    $ ./dig.pl liste MX

    sh: line 1: FICHIER: No such file or directory

    sh: line 1: FICHIER: No such file or directory

    sh: line 1: FICHIER: No such file or directory

    sh: line 1: FICHIER: No such file or directory

    sh: line 1: FICHIER: No such file or directory

    sh: line 1: FICHIER: No such file or directory

    sh: line 1: FICHIER: No such file or directory

    sh: line 1: FICHIER: No such file or directory

    sh: line 1: FICHIER: No such file or directory

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2005
    Messages : 165
    Par défaut
    Il y a une erreur, remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $retourDig = `dig @$ns <FICHIER> $type`;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $retourDig = `dig @$ns $_ $type`;

  8. #8
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 10
    Par défaut
    corrigé !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #!/usr/bin/perl -w
     
    my $fic = "$ARGV[0]";
    my $type = "$ARGV[1]";
    my $ns = "xx";
     
    open FICHIER,"< $fic" or die "Le fichier n'existe pas !";
     
    while(<FICHIER>) {
        chomp $_;
        $retourDig = `dig @$ns $_ $type`;
        print "$retourDig\n";
    }
    bon il me reste plus qu'à parser le résultat ensuite et foutre ça dans un fchier excel

  9. #9
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 10
    Par défaut
    un peu amélioré encore ...

    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
    #!/usr/bin/perl -w
     
    die "Syntaxe : $0 <fichier des domaines> <type>\n" unless ($#ARGV >= 0);
     
    my $fic = "$ARGV[0]";
    my $type = "$ARGV[1]";
    my $ns = "ns1.francenet.fr";
     
    # print "DEBUG : $fic\n";
    open FICHIER,"< $fic" or die "Le fichier n'existe pas !";
    # print "DEBUG2\n";
    while(<FICHIER>) { 
        # print "DEBUG3\n";
        chomp $_;
        $retourDig = `dig @$ns $_ $type +nocomments +noquestion +noadditional +nostats`;
        print "$retourDig\n"; 
    }

  10. #10
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 10
    Par défaut
    Voici le type de résultat que j'ai :

    ; <<>> DiG 9.3.0 <<>> maybelline.it MX +nocomments +noquestion +noadditional +nostats
    ;; global options: printcmd
    maybelline.it. 76127 IN MX 100 mailhub.francenet.fr.
    maybelline.it. 76127 IN MX 10 mail.francenet.fr.
    maybelline.it. 76127 IN NS ns2.netsearchers.com.
    maybelline.it. 76127 IN NS ns1.netsearchers.com.
    multiplié bien évidemment par le nombre d'entrée de mon fichier de domaine.
    Il faut que je bosse sur ça maintenant ... que je parse le tout pour récupérer les valeurs qui m'intéresse (en rouge gras les plus importantes et rouge tout court les temporaires) et pouvoir ainsi former mon fichier à exporter sous excel.

    Je suis preneur des idées/aides maintenant !

  11. #11
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 10
    Par défaut
    En fait je dirais qu'il faut que je supprime les deux premières lignes, et qu'ensuite pour les suivantes, et jusqu'à la fin, je mette chaque valeurs dans un tableau (tableau de 4 lignes et de 6 lignes.
    Ensuite, je bosse sur le tableau pour organiser tout ça un peu mieux ...

    oui / non ?

  12. #12
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2005
    Messages : 165
    Par défaut
    Tu peux directement travailler sur la variable $retourDig.
    Un petite foreach peut te permettre de parcourir ta variable $retourDig, avec $_ contenant la ligne courant, puis un split avec comme séparateur l'espace puis sélectionner les mots que tu veux.

    Tu mélanges ,tu secoues bien, et tu obtiens quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    foreach ($retourDig) {
       chomp $_;
       if ($_ =~ /^;/) { next; } // on passe à la suite si la ligne commence par un ;
       @tab = split(/ /, $_);
       if ($#tab == 5) { # te donne l'indice du dernier élément.
          print "$tab[0];$tab[1];$tab[4];$tab[5]\n";
       } else {
          print "$tab[0];$tab[1];$tab[5]\n";
       }
    }
    A toi de modifer ce bout de code pour ton cas.

  13. #13
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 10
    Par défaut
    merci.

    Je comprends et teste dès que possible et je te dis !

  14. #14
    Membre du Club
    Inscrit en
    Juillet 2005
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 10
    Par défaut
    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 -w
     
    die "Syntaxe : $0 <fichier des domaines> <type>\n" unless ($#ARGV >= 0);
     
    my $fic = "$ARGV[0]";
    my $type;
    if (defined($ARGV[1])) {
            $type = "$ARGV[1]";
    } else {
            $type = 'A';
    }
    my $ns = "ns1.francenet.fr";
     
    # print "DEBUG : $fic\n";
    open FICHIER,"< $fic" or die "Le fichier n'existe pas !";
    # print "DEBUG2\n";
    while(<FICHIER>) {
        # print "DEBUG3\n";
        chomp $_;
        $retourDig = `dig @$ns $_ $type +nocomments +noquestion +noadditional +nostats`;
        # print "$retourDig\n";
        foreach ($retourDig) {
            chomp $_;
            if ($_ = /^;/) { next; }
            @tab = split(/\t/, $_);
            if ($#tab == 5) {
                    print "$tab[0];$tab[1];$tab[4];$tab[5]\n";
            } else {
                    print "$tab[0];$tab[1];$tab[4]\n";
            }
        }
    }

    et voici quand je lance le script :

    ;;
    Use of uninitialized value in concatenation (.) or string at ./dig.pl line 29, <FICHIER> line 43.
    Use of uninitialized value in concatenation (.) or string at ./dig.pl line 29, <FICHIER> line 43.
    Use of uninitialized value in concatenation (.) or string at ./dig.pl line 29, <FICHIER> line 43.
    Et cela pour chaque entrée ...

  15. #15
    Mr6
    Mr6 est déconnecté
    Membre émérite

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 608
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if ($#tab == 5) {
                    print "$tab[0];$tab[1];$tab[4];$tab[5]\n";
            } else {
                    print "$tab[0];$tab[1];$tab[4]\n";
            }
    Tes ";" ne sont pas protégés dans tes print, ca ne doit pas aider...

Discussions similaires

  1. [DEBUTANT] parser perl
    Par jazzexperience dans le forum Langage
    Réponses: 40
    Dernier message: 10/01/2011, 11h07
  2. [debutant] Parser HTML
    Par Akwel91 dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 24/05/2006, 23h24
  3. [debutant]parser un fichier
    Par morphisme dans le forum Langage
    Réponses: 2
    Dernier message: 27/12/2005, 19h00
  4. [debutant en devenir] parser
    Par TabrisLeFol dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 31/10/2005, 16h55

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