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 :

Je suis perdu


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 76
    Par défaut Je suis perdu
    Bonjour a tous

    J'ai réaliser un programme qui parcourt un fichier contenant des adresse ip et pour chaque adresse trouvée lance un autre programme qui va scanner l'adresse pour trouver son OS.

    Mon probléme est que lorsque j'éxécute mon programme de parcourt il lance le scan mais rien n'est écrit dans le fichier resultat si je lance le programme de scan seul il écrit bien dans le fichier resultat.
    Cela veut dire qu'en réalité mon programme ne lance pas le programme de scan ?

    j'ais réaliser ca
    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
    $file = 'liste_test';
    $fileout = '>result_os';
     
    open(FICH, $file) or die "je ne peux ouvrir $file : $!\n";
    open(FICHOUT,$fileout) or die "je ne peux ouvrir $fileout : $!\n";
     
     
    while($lines = <FICH>)
    	{
    	$adresse=$lines;
    	print("$adresse");
    	$exec = "perl osguess2.0.pl $adresse";
    	system($exec);
    	print("Scan d'os de $adresse fini\n");
    	}
    Pour que vous voyez que tout est bien déclaré.

    A l'éxécution je n'ais aucun message d'erreur et un certain temp d'attente a chaque adresse ce qui me laisse que le programme de scan ce lance quand même.


  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Primo je chomp()erai mon adresse à ta place :
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    my $filein  = 'liste_test';
    my $fileout = 'result_os';
    open my ($in), '<', $filein
      or die "je ne peux ouvrir $filein : $!\n";
    open my ($out), '>', $fileout
      or die "je ne peux ouvrir $fileout : $!\n";
    while ( my $adresse = <$in> ) {
        chomp($adresse);
        print("$adresse\n");
        my @exec = ( 'perl', 'osguess2.0.pl', $adresse );
        system @exec
          and die "L'appel de osguess2.0.pl a échoué : $!\n";
        print("Scan d'os de $adresse fini\n");
    }
    Ensuite je trouve le fait que osguess2.0.pl ait un fichier résultat "en dur" dans son code pas très bon niveau modularité, donc j'en ferais bien un paramètre de osguess2.0.pl.

    --
    Jedaï

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 76
    Par défaut
    J'ai réalisé les modifications mais je ne vois pas comment de telles modifications résoudrais mon probléme j'aimerais quelques expliquations svp

    Mon probléme est toujours la :s

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 76
    Par défaut
    j'ais essayé en copiant commant ton code au cas ou et cela n'affichet toujours dans le fichier resultat.
    Je vais me replonger dans le fichier de scan au cas ou mais il est complex j'ais un peu de mal de la comprendre.
    Il n'est pas d emoi en effet j'utilise nmap pour scanner j'ais donc utilisé un script fournit a titre exemple que j'ais juste modifié pour avoir le resultat dans un fichier.
    Si quelqu'un est fan je vous le link bon courage a la lecture

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    #!/usr/bin/perl
     
    use lib 'lib';
     
    package OsGuesser;
     
    use Nmap::Scanner::Scanner;
     
    use vars qw(@ISA);
     
    @ISA = qw(Nmap::Scanner::Scanner);
     
    $Nmap::Scanner::DEBUG = 0;
     
    sub new {
     
        my $class = shift;
        my $self = $class->SUPER::new();
     
        my $target = $_[0] || die "Need target (host spec/file)!";
        $self->{'OS_SCAN_TARGET'} = $target;
     
        $self->tcp_syn_scan();
        $self->add_scan_port('1-5000');
        $self->guess_os();
        $self->register_scan_complete_event(\&complete);
     
        return bless $self, $class;
     
    }
     
    sub scan {
     
        die "Need callback!\n" unless $_[0]->{'CALLBACK'};
     
        my $target = $_[0]->{'OS_SCAN_TARGET'};
     
        if ( -r $target ) {
     
            $_[0]->SUPER::scan_from_file($target);
     
        } else {
     
            $_[0]->add_target($target);
            $_[0]->SUPER::scan();
     
        }
     
    }
     
    sub callback {
        $_[0]->{'CALLBACK'} = $_[1] || return $_[0]->{'CALLBACK'};
    }
     
    sub complete {
        &{$_[0]->{'CALLBACK'}}($_[0], $_[1]);
    }
     
    1;
     
    use lib 'lib';
     
     
    use Nmap::Scanner;
     
    $fileout = '>$ARGV[1]';
    open(FICHOUT,$fileout) or die "je ne peux ouvrir $fileout : $!\n";
     
     
    my $os = OsGuesser->new($ARGV[0] || 
             die "Missing host to scan or file to scan from!\n$0 host\n");
    $os->callback(\&guessed);
    $os->scan();
     
    sub guessed {
     
        my $self = shift;
        my $host = shift;
        my $name = $host->hostname();
        my $ip   = ($host->addresses())[0]->addr();
        my $os   = $host->os();
     
        unless ($os) {
            print (FICHOUT "Could not guess anything about the OS of $name ($ip)\n");
            return;
        }
     
        if (scalar($os->osclasses()) > 0) {
     
            print (FICHOUT "OS classes: $name ($ip) could be:\n");
     
            for my $osc ($os->osclasses()) {
                print FICHOUT ' * ',
                      join(' ', $osc->vendor(), ($osc->osgen() || "\b")) .
                      " (" .  $osc->accuracy() . "%)",
                      "\n";
            }
     
        }
     
        if (scalar($os->osmatches()) > 0) {
     
            print (FICHOUT "OS matches: $name ($ip) could be:\n");
     
            for my $m ($os->osmatches()) {
                print FICHOUT ' * ', $m->name(), " (" .  $m->accuracy() . "%)",
                      "\n";
            }
     
        } else {
     
            print (FICHOUT "OS matches: $name ($ip):\n");
            print (FICHOUT " * No matches found\n");
     
        }
     
        my $u = $os->uptime();
     
        if ($u->seconds() > 0) {
            print FICHOUT "Uptime: ", ($u->seconds()/(24*60*60)),
                  " days (",$u->lastboot(),")\n";
        }
     
        print FICHOUT "Ports used for OS fingerprint: ";
        print FICHOUT join(', ', map { $_->portid() } $os->ports_used());
        print FICHOUT "\n";
     
    }

  5. #5
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $fileout = '>$ARGV[1]';
    ....
    Je pensais que "perl osguess2.0.pl adresse" était censé fonctionner en ligne de commande ? Visiblement non puisqu'il lui faut un deuxième paramètre qui est le nom du fichier résultat...

    Voici donc une correction du premier script basé sur cette constatation :
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    my $filein  = 'liste_test';
    my $fileout = 'result_os';
    open my ($in), '<', $filein
      or die "je ne peux ouvrir $filein : $!\n";
    open my ($out), '>', $fileout
      or die "je ne peux ouvrir $fileout : $!\n";
    while ( my $adresse = <$in> ) {
        chomp $adresse;
        print "$adresse\n";
        my $exec = "perl osguess2.0.pl $adresse -";
        my $output = `$exec`;
        die "osguess2.0.pl a échoué : $!\n" unless $output;
        print $out $output;
        print "Scan d'os de $adresse fini\n";
    }
    Le '-' dans la commande va demander à osguess2.0.pl d'écrire sur la sortie standard, on réupère la sortie de la commande avec les backquotes `` puis on l'écrit dans le fichier de résultat.

    --
    Jedaï

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 76
    Par défaut
    C'est suite a ta sugestion que j'ais changer le programme de scan pour qu'il recoive le nom du fichier a écrire pour que me nom du fichier ne soit pâs en dur.
    je vais tester et analyser ta reponse j ete tiens au courant.

    merci

  7. #7
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par Jedai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $fileout = '>$ARGV[1]';
    ....
    Ok, faute d'inattention... Ici tu as utilisé des guillemets simples, il n'y a donc pas d'interpolation, et je ne suis pas sûr que le système apprécie le nom de fichier '$ARGV[1]'...

    Tu devrais écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $fileout = ">$ARGV[1]";
    Réessaie avec cette modification.
    Si ton script marche en ligne de commande, il n'y a pas de raison que ma proposition ne marche pas.

    --
    Jedaï

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

Discussions similaires

  1. [ODBC] Je suis perdu avec ODBC
    Par Nowhere dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 19/05/2006, 08h50
  2. [Tableaux] aide je suis perdu
    Par covin85 dans le forum Langage
    Réponses: 12
    Dernier message: 14/04/2006, 17h56
  3. [Architecture] EJB ou pas EJB ? Je suis perdu ...
    Par n!co dans le forum Java EE
    Réponses: 18
    Dernier message: 26/01/2006, 18h21
  4. RAM DDR, PC3200, 333Mhz , 400Mhz je suis perdu
    Par ahage4x4 dans le forum Composants
    Réponses: 2
    Dernier message: 08/12/2005, 17h52
  5. DLL et MainForm je suis perdu !
    Par rudy2 dans le forum C++Builder
    Réponses: 28
    Dernier message: 02/01/2005, 18h08

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