Perl,mysql,telnet..?

Bonjour,
j'ai fait un script en Perl pour récupérer mes config switch et routeurs, il fonctionne sur un switch et je voudrais l'étendre à tous. J'ai fait une db avec mysql contenant les adresses ip, les noms, mots de passe... et là je bloque: comment une fois connecté au telnet, je peux consulter ma db?
J'ai essayé pas aml de choses sans résultat, si quelqu'un avait une idée, ça serait tip top :)
mici

--
ici, c'est la cour des miracles lol
Configuration: Windows XP Internet Explorer 6.0

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    Salut,

    Voici un exemple en local

    1. La base mysql
    lami20j@debian:~/trash/ccm_perl$ mysql -u root -p'azertyuiop' Personne
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 46
    Server version: 5.0.51a-24+lenny1 (Debian)
    
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    
    mysql> show tables;
    +--------------------+
    | Tables_in_Personne |
    +--------------------+
    | Utilisateur        |
    +--------------------+
    1 row in set (0.00 sec)
    
    mysql> desc Utilisateur;
    +--------+----------+------+-----+---------+-------+
    | Field  | Type     | Null | Key | Default | Extra |
    +--------+----------+------+-----+---------+-------+
    | nom    | char(50) | YES  |     | NULL    |       |
    | prenom | char(50) | YES  |     | NULL    |       |
    | age    | int(11)  | YES  |     | NULL    |       |
    +--------+----------+------+-----+---------+-------+
    3 rows in set (0.00 sec)
    
    mysql> select * from Utilisateur;
    +--------+--------+------+
    | nom    | prenom | age  |
    +--------+--------+------+
    | azerty | aaa    |   10 |
    | qwerty | bbb    |   20 |
    +--------+--------+------+
    2 rows in set (0.00 sec)
    
    mysql> exit
    Bye
    2. Le script + résultat
    lami20j@debian:~/trash/ccm_perl$ cat dbi_view.pl
    #! /usr/bin/perl
    
    use DBI;
    use strict;use warnings;
    
    my $mysql_sock='/var/run/mysqld/mysqld.sock';
    my $base = 'Personne';
    my $host = 'localhost';
    my $user = 'root';
    my $pass = 'azertyuiop';
    
    # connexion base de données
    my $db_=DBI->connect("DBI:mysql:database=$base;host=$host;mysql_socket=$mysql_sock",$user,$pass);
    
    # lire la table (préparation de la requête SELECT)
    my $query=$db_->prepare("SELECT nom, prenom, age FROM Utilisateur");
    
    # exécution de la requête
    $query->execute();
    
    # affiche les résultats
    while (my ($nom, $prenom, $age)=$query->fetchrow_array){
            print "$nom\t$prenom\t$age\n";
    }
    __END__
    lami20j@debian:~/trash/ccm_perl$ perl dbi_view.pl
    azerty  aaa     10
    qwerty  bbb     20
    
    1. salut,
      merci d'avoir répondu :)
      en fait sur ton script, on a la connexion avec mysql, ça je gère lol
      voilà mon script:

      #!/usr/bin/perl -w

      use Net::Telnet;

      my $router = "xx.xx.xx.xx";
      my $user = "moi";
      my $pass = "mon_pass";
      my $enable = "mon_enable_pass";
      my $tftp_server = "xx.xx.xx.xx";
      my $t = new Net::Telnet(Timeout => 10);

      $t->open( $router );

      $t->print( "$pass" );
      sleep 2;
      $t->print( "enable" );
      $t->waitfor( '/Password:/' );
      $t->print( "$enable" );
      sleep 2;
      $t->print( "copy startup-config tftp" );
      sleep 2;
      $t->print( "$tftp_server" );
      sleep 2;
      $t->print( "save.txt" );

      et ce que je souhaiterais c'est que toutes mes variables user,pass... il aille les chercher directement dans ma db mysql

      Après, peut-être qu'il y a un moyen plus simple..mais avec plus de 200 routeurs et switch, je ne me vois pas taper un script pour chaque conf :s

      j'ai vu aussi que Perl avait un module spécial pour les cisco, mais évidemment je n'ai pas que des cisco, ça serait trop simple lol