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 :

Telnet Perl


Sujet :

Modules Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 140
    Par défaut Telnet Perl
    Je souhaite effectuer un ping en broadcast sur des switchs à travers un script TELNET Perl ou PHP.
    Le but est simplement de remplir la table arp des équipements.
    Je n'ai donc pas besoin de récupérer les résultats mais seulement d'envoyer la commande, sans aucune verif. Afin que tous cela se déroule assez rapidement.


    Comment faut-il faire pour envoyer la commande sur l'équipement et interrompre le script ou passer à l'équipement suivant ?

    J'ai fait cela, mais c'est extremement long !!!
    Pour 400 équipements, + de 24 heures !!!!!!!!

    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
     
    #!/usr/bin/perl
    #
    # Script de ping par telnet
    # 
    # 
    use warnings;
    require '/home/www/tools/cisco.pl';
    use Config::IniFiles;
    use Time::HiRes qw( usleep ualarm gettimeofday tv_interval );
     
    #my $cfg=new Config::IniFiles( -file => "/home/www/config/config.ini");
    #my $login=$cfg->val("login");
    my $login="*********";
    #my $passwd=$cfg->val("passwd");
    my $passwd="*********";
    my $enable='enable_password';
    my $LOGDIR='/home/www/log/ping';
    my $output="$LOGDIR/migCE2out.csv";
    $DEBUG=1;
    #$LIMITE=100;  # Nombre max de routeurs que l'on souhaite tester
    my $addrAdmin=$ARGV[0];
    my $mask=$ARGV[1];
    my $eqtype=$ARGV[2];
     
    if(not defined($addrAdmin)){
        print "STATUS=0\n";
        exit;
    }else{
        print "ipAdmin=$addrAdmin\n";
    }
     
    open(F,">>$output") || die "Cannot open input file $output:$!\n";
    #my $rtr=CiscoLogin2($login,$passwd,$addrAdmin,60);
    my $rtr=Net::Telnet::Cisco->new(Host=>$addrAdmin,Errmode=>'return',
                                    Timeout=>10,
                                    Input_log=>"$LOGDIR/$addrAdmin.log"
                                    );
    if($rtr){
        my $prompt='/(?m:^[\w.-]+\s?(?:\(config[^\)]*\))?\s?[\$#> ]\s?(?:\(enable\))?\s*$)/';
        $rtr->ignore_warnings;
        $rtr->errmode("return");
        if($rtr->login(Name=>$login,Password=>$passwd,Prompt=>$prompt)){
        }else{
            print "$addrAdmin;echec login;\n";
            print "STATUS=0\n";
            exit;
        }
    }else{
        print "$addrAdmin;echec telnet;\n";
        print "STATUS=0\n";
        exit;
    }
    my $status=0;
    if($rtr){
        $telnetStatus='OK';
     
      # ping pour equipement catalyst
        if($eqtype=~m/CAT(.*)/i){
     
            my @cmd=("ping -s $mask 56 2");
            push(@cmd,"exit");
     
            foreach(@cmd){
                print ">> $_\n";
                @output=CiscoCmd($rtr,$_);
            }
        }else{
     
        # ping pour equipement cisco
     
            my @cmd=("ping","ip","$mask","2","56","2","n","n");
     #my @cmd=("ping $mask");
            push(@cmd,"exit");
     
            foreach(@cmd){
                print ">> $_\n";
                @output=CiscoCmd($rtr,$_);
            }
        }
     
     
        $status=1;
    }else{
        debug("HS\n");
    }
    print F "$addrAdmin;$telnetStatus;\n";
    CiscoLogout($rtr);
    close F;
    print "STATUS=$status\n";
     
    sub debug{
        if($DEBUG==1){
            print @_;
        }
    }
    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    T'as essayé le module Net::Telnet ?

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 140
    Par défaut
    Le script fait référence à un autre script appelé cisco.pl qui utilise :
    Net::Telnet::Cisco.

    Mais le pb ne vient pas de là je pense.
    La solution réside surtout dans le fait d'interrompre le script dès que la commande (ping ...) a été envoyée.
    Mais je ne sais pas comment faire.

  4. #4
    Jeh
    Jeh est déconnecté
    Membre expérimenté Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Par défaut
    Cette librairie utilise la méthode "cmd" pour envoyer les commandes sur les routeurs, cette méthode lance ta commande et attend systématiquement le résultat.
    Pour pouvoir utiliser une autre méthode, il faudrait utiliser le module plus générique Net::Telnet. La question est donc, as-tu réellement besoin des fonctionnalités supplémentaires implémentées dans Net::telnet::Cisco et pas dans Net::Telnet ?
    J'ai déjà utilisé seulement Net::Telnet pour configurer des routeurs et ça fonctionnait très bien.

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 140
    Par défaut
    ok, je vais alors y jeter un oeil.
    Sais-tu si cela fonctionne avec les équipements catalyst et cisco ?
    Aurais tu un exemple sur lequel je pourrais m'appuyer?
    A part cmd, il existe quoi d'autre ?
    Merci

  6. #6
    Jeh
    Jeh est déconnecté
    Membre expérimenté Avatar de Jeh
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 203
    Par défaut
    Net::Telnet fonctionne avec n'importe quel équipement possédent un serveur telnet. Tu peux utiliser la méthode "print".
    Je n'ai pas d'exemple de connexion à un cisco tout de suite sous la main mais je vais essayer de regarder plus en détail.

Discussions similaires

  1. telnet en perl : simuler entrer pour recuperer la suite des donnee
    Par Mounr dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 20/07/2009, 19h00
  2. faire du telnet vers un switch avec perl sous windows
    Par Mounr dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 06/04/2009, 20h07
  3. Perl Net::Telnet connexions successives, réalisable ?
    Par Capitaine Krabs dans le forum Programmation et administration système
    Réponses: 1
    Dernier message: 25/08/2008, 16h41
  4. [TELNET]probleme script perl
    Par gdpasmini dans le forum Programmation et administration système
    Réponses: 3
    Dernier message: 04/06/2007, 10h20
  5. Perl telnet commande d'un switch Alcatel
    Par lotonetwork dans le forum Programmation et administration système
    Réponses: 4
    Dernier message: 18/03/2007, 12h51

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