Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
886 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [perl]script sauvegarde, telnet

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[perl]script sauvegarde, telnet

n°1837866
parisien91
Posté le 14-01-2009 à 15:18:47  profilanswer
 

Bonjour,
 
J'ai un script à réaliser pour mon entreprise!
Ce script aura pour but de se connecter sur mes switchs en telnet (utilisation du module net::telnet), et de faire une copie de la configuration des switchs, le tout sera envoyé ver mon serveur TFTP! Pour les connections aux switchs j'ai un fichier .txt avec sur la meme ligne le :

Code :
  1. nom ip login mdp


 
Donc le contenue je le remet dans un tableau pour pouvoir les réutiliser!
Donc j'ai encore quelques problèmes pour faire les séparations sinon sa marche!!

Code :
  1. my $base;
  2.     $base= "/script_backup/database_switch.txt";
  3. open (BASE,"$base" ) or die "can't open file\n";
  4. my $Ligne;
  5. my @tab;
  6. while ($Ligne=<BASE> )
  7. {
  8.     my ($nom, $ip, $login, $mdp);
  9. #    print $Ligne."\n";                                                                                                     
  10. # Condition en expression reguliere d'une ligne du fichier txt sous la forme                                               
  11. # nom ip login mdp                                                                                                         
  12.     if($Ligne =~ /(.*)\s(.*)\s(.*)\s(.*)/)   # J'ai un PB ici je pense! ne diserne pas l'espace entre le nom et IP........
  13.     {
  14.         push @tab, $1, $2, $3, $4;
  15. $nom = $1;
  16. $ip = $2;
  17. $login = $3;
  18. $mdp = $4;
  19. print ("nom=$nom\n" ); # test
  20. print ("ip=$ip\n" ); # test
  21. print ("login=$login\n" ); # test
  22. print ("mdp=$mdp\n" ); # test
  23. #       print ("$nom $ip $login $mdp" ); # test
  24.     }
  25.     else
  26.     {
  27.         print("Erreur lecture de ligne : $.\n" );
  28.     }
  29. }
  30. close (BASE);


Le probleme ici etant que je resors pas dans le bonne ordre le contenue du tableau
j'obtiens pour la 1er ligne:

Code :
  1. nom=SWO1 10.42.78.1
  2. ip=user1
  3. login=mdp1
  4. mdp=


 
 
Mais le gros problème c'est la connexion en telnet...donc j'aurais besoin de vous pour m'aider!!

Code :
  1. #!/usr/bin/perl
  2. # strict demande de definir les variables
  3. use strict;
  4. # warnings permet d'avoir des messages d'erreurs
  5. use warnings;
  6. # Module pour la connection Telnet
  7. use Net::Telnet qw(TELOPT_TTYPE); #qw(TELOPT_TTYPE) sert a quoi???
  8. use IO::Handle;    # a quoi sa sert sa??? je l'ai mis parceque j'ai un modele
  9.     my $switch_ip ='X.X.X.X'; # je met juste ca comme j'ai pas mis de MDP ni login
  10.     my $switch_port = 12; # je  met le n° port sur lequel je suis brancher
  11.     my $telnet_session = new Net::Telnet (
  12.                                          'Host' => $switch_ip,
  13.                                          'Port' => $switch_port,
  14.                                          'Errmode' => 'return',
  15.                                          'Timeout' => 20,);


 
Normalement juste ca devrait me connecter au switch non??
 
Merci de m'aider!!!!!!!!!!!!!!!!!!!!

mood
Publicité
Posté le 14-01-2009 à 15:18:47  profilanswer
 

n°1837867
parisien91
Posté le 14-01-2009 à 15:18:59  profilanswer
 

Re j'ai modfier mon fichier .txt pour ne plus avoir de pB au niveau du tableau!

Code :
  1. while ($Ligne=<BASE> )
  2. {
  3. my ($nom, $ip, $login, $mdp);
  4. # print $Ligne."\n";
  5. # Condition en expression reguliere d'une ligne du fichier txt sous la forme
  6. # nom;ip;login;mdp;
  7. if($Ligne =~ /(.*);(.*);(.*);(.*);/) # j'ai modifier ici parcequ'avec les espaces j'avais un décalage donc j'ai mis de ";"
  8. {
  9. push @tab, $1, $2, $3, $4;


UPPP
Merci de m'aider!!!!!!


Message édité par parisien91 le 14-01-2009 à 15:19:29
n°1838072
parisien91
Posté le 15-01-2009 à 09:22:25  profilanswer
 

UP!!! SVP

n°1838077
couak
Posté le 15-01-2009 à 09:46:00  profilanswer
 

Pour ta 1ère regex

Code :
  1. if($Ligne =~ /(.*)\s(.*)\s(.*)\s(.*)/)

chez moi ca marche. Au vu de la regex, il y a de grandes chances que ton fichier d'entrée ne soit pas bon (ou au choix, que ta regex soit mal construite)
Exemple : si tu lui mets la ligne "SWO1 10.42.78.1 user1 mdp1" ca marche mais si tu lui mets la ligne "SWO1 10.42.78.1 user1 mdp1 " (note l'espace à la fin de la ligne) tu te retrouves dans la situation que tu as décrite.
Vu la simplicité de la ligne à parser, je te conseillerais plutôt d'utiliser la fonction split
 
Pour ton second problème (là où tu changes de regex) tu ne nous dis pas quel est le problème...

n°1838165
parisien91
Posté le 15-01-2009 à 11:51:13  profilanswer
 

salut couak,
merci de t'attardé sur mes PBs!
 
pour revenir au " if($Ligne =~ /(.*)\s(.*)\s(.*)\s(.*)/)", chez moi sa ne marche toujours pas!,il y a encore le pb mais je l'ai changé j'ai mis des ";" entre chaque colonnes comme sa plus de problemes et sa marche!!
 
le probleme maintenant etant a la connexion telnet!.............

n°1838257
couak
Posté le 15-01-2009 à 12:53:57  profilanswer
 

je sais pas si tu m'as lu (on dirait pas) mais je t'avais dis que ta regex était mal construite, change ta regex ou bien utilises la fonction split
 
pour ton problème de telnet, envoie ton code et tes problèmes et message d'erreur

n°1838265
parisien91
Posté le 15-01-2009 à 13:17:25  profilanswer
 

Si je t'es lu, mais tu appelle quoi 'regex' c'est que la 2eme fois que je fais un script perl... dsl...
la regex c'est ma condition if(....) c'est sa! Donc maintenant comme j'ai modifier mon fichier.txt avec des ";" et que sa marche je touche plus!!
 
tiens j'ai poster sur un autre forum
http://www.developpez.net/forums/d [...] iguration/
 
Merci d'avance

n°1838975
parisien91
Posté le 16-01-2009 à 15:02:45  profilanswer
 

bonjour,
J'ai encore un peu avancé mais je suis vraiment bloqué!!
 

Code :
  1. my $switch_ip = $ip;                                                                     
  2.     my $user_login = $login;
  3.     my $user_password = $mdp;
  4.     my $switch_port = 23;
  5.     my $telnet_session;
  6.     $telnet_session= new Net::Telnet (                                     
  7.                                       'Errmode' => 'return',
  8.                                       'Timeout' => 30,
  9.                                       );
  10.     if (not defined $telnet_session)
  11.     {
  12.         &print_error("Connect Telnet Session - IP: $switch_ip PORT: $switch_port\n" );
  13.         return (1);
  14.     }
  15.                 ## Fonction necessaire a net::telnet                                                                       
  16.     $telnet_session->option_callback(\&opt_callback);
  17.     $telnet_session->option_accept('Do' => TELOPT_TTYPE);
  18.     $telnet_session->suboption_callback(\&subopt_callback);
  19.     $telnet_session->open('Timeout' => 5, 'Errmode' => 'return', 'Host' => $switch_ip, 'Port' => $switch_port) or die "conn\
  20. exion au switch $switch_ip echoue\n";
  21.     sleep 1;
  22.     my @lines = $telnet_session->print('show ru');
  23.     print "show running = @lines\n";


 
Comme j'avais pas de messages d'erreurs pour la connexion, j'ai fais un test avec une commande show sur le switch sauf que je recoit  

Code :
  1. show running = 1


 
donc comment faire?? d'ou cela peux venir???

n°1839355
gilou
Modérateur
Modzilla
Posté le 17-01-2009 à 11:52:40  profilanswer
 

parisien91 a écrit :

Comme j'avais pas de messages d'erreurs pour la connexion, j'ai fais un test avec une commande show sur le switch sauf que je recoit  

Code :
  1. show running = 1


 
donc comment faire?? d'ou cela peux venir???


 
Eh bien c'est clair: ca vient de ta ligne

parisien91 a écrit :

Code :
  1. print "show running = @lines\n";



 
Qu'est-ce qui te fais dire que tu n'es pas connecté? au contraire, ca montre que tu l'es, puisque la commande my @lines = $telnet_session->print('show ru'); semble s'être executé correctement ce qui explique la valeur 1 de @lines (mais pour en être sur il faudrait avoir un objet scalaire et non un array pour recuperer la valeur de retour de $telnet_session->print d'apres la doc):

Citation :

print - write to object
 
        $ok = $obj->print(@list);
 
    This method writes @list followed by the output_record_separator to the open object and returns 1 if all data was successfully written.


 
A+,


Message édité par gilou le 17-01-2009 à 11:58:32

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1839852
parisien91
Posté le 19-01-2009 à 09:42:46  profilanswer
 

Merci beaucoup j'avais pas lu ce passage dans la doc!!
Mais comment faire pour lire le contenue de la variable ou du tableau??? parce que tout ce que j'essaye me renvoie 1...
 
j'espere gilou tu pourras encore m'aider!
merci!!!

mood
Publicité
Posté le 19-01-2009 à 09:42:46  profilanswer
 

n°1840187
gilou
Modérateur
Modzilla
Posté le 19-01-2009 à 19:45:20  profilanswer
 

De quelle variable ou quel tableau parles tu ici?
Déja, si tu lisais la doc ca serait une bonne chose!
Tu veux faire quoi?
faire une commande 'show run' et en recuperer le retour?
Eh bien puisque c'est une commande, on utiluse une fonction qui envoie une commande.
C'est pourtant écrit noir sur blanc dans la doc de Net::Telnet

Citation :

cmd - issue command and retrieve output


my @lines = $telnet_session->cmd('show run');
A+,


Message édité par gilou le 19-01-2009 à 20:02:57

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1840247
parisien91
Posté le 19-01-2009 à 22:51:58  profilanswer
 

je l'ai lu mais c'est en anglais donc je ne comprends pas tous... dsl
Et pour ce qui est de ma question c'est bon j'ai trouver ce midi!
J'ai pas utilisé cette commande moi!!
 
Mais merci quand meme!!

n°1841439
gilou
Modérateur
Modzilla
Posté le 22-01-2009 à 10:23:36  profilanswer
 

Programmer avec une librairie dont on ne comprend pas la doc, c'est plus de la programmation, c'est du vaudou.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [perl]script sauvegarde, telnet

 

Sujets relatifs
Perl et cgi: problème de splitPetit script php complexe pour moi
script php urgentAttendre le retour de Google Maps API avant de continuer le script
URL d'une page appelant un scriptVlinks - Nouveau script annuaire (PHP/Mysql)
[SCRIPT] recuperer les logs d ouverture de sessionScript enregistrement webcam
Problème avec condition dans script batchpetit probleme avec un script css
Plus de sujets relatifs à : [perl]script sauvegarde, telnet


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR