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

  FORUM HardWare.fr
  Programmation
  Perl

   Utilisation de Net::Telnet pour se connecter aux switch HP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Utilisation de Net::Telnet pour se connecter aux switch HP

n°2187716
pierra56
Posté le 26-04-2013 à 14:26:21  profilanswer
 

Bonjour a tous!!
 
Alors voilà j'ai un problème avec mon petit script sous PERL!
Il me faut me connecter à un switch HP procurve par le bias de telnet pour récupérer la config avec la commande TFTP.
Alors je l'ai fait pour un Cisco et ça marche impeccable.  
Or ici,mon problème c'est que je n'arrive pas à me connecter en telnet au Switch. :(  
Il ne prend pas mon Login et mot de passe,
Il me fait: "timed-out waiting for login prompt at test.pl line 34"
 
Voici le code:

Code :
  1. #!/usr/bin/perl -w
  2. use warnings;
  3. use Net::Telnet ();  <= pour Telnet
  4. use Time::localtime;
  5. $tm = localtime;
  6. ($DAY, $MONTH, $YEAR) = ($tm->mday, $tm->mon, $tm->year);
  7. my $dateToday=($YEAR+1900)."-".($MONTH+1)."-".$DAY;
  8. my $backup_host       = "192.168.23.109";
  9. my $backup_dir        = "cisco";
  10. my $backup_dir2       = "HP";
  11. open (my $file, '<', '/var/lib/rancid/all/router.db')|| die "impossible d'ouvrir router.db : $!\n";  <= lecture du fichier pour récupérer les adresses IP
  12. while(<$file> ) {
  13.  if (/([0-9.]{1,})\:hp/){
  14.    $ip2=$1;
  15.    &BackupHpSwitch($ip2, 'R2T', 'bonjour');
  16.     }
  17.   }
  18. sub BackupHpSwitch() Methode
  19. {
  20. my $HP_host=$_[0]; <= récupération des variables
  21. my $HP_log=$_[1];
  22. my $HP_pass=$_[2];
  23. print $HP_host."\n";
  24. my $session= new Net::Telnet (Timeout=>5, Telnetmode=>0, Host=> $HP_host); <= connexion en telnet
  25.   print "   login : ";
  26.     if ($session->login( $HP_log, $HP_pass)) {   ce qu'il ne prend pas en compte !!
  27.           print "Ok\n";
  28.   $session->cmd("copy running-config tftp://".$backup_host."/".$backup_dir2."/".$HP_host."-".$dateToday.".cfg\n\n\n" ); <=commande
  29.                   $session->close;
  30.                   }
  31.        
  32.          else
  33.          {
  34.          print "Failed\n";
  35.          }
  36. }
  37. close ($file);


 
Merci de votre aide.
PA


Message édité par pierra56 le 26-04-2013 à 17:00:27
mood
Publicité
Posté le 26-04-2013 à 14:26:21  profilanswer
 

n°2187773
gilou
Modérateur
Modzilla
Posté le 26-04-2013 à 21:04:04  profilanswer
 

Bonjour :hello:  
Ce code ne m'a pas l'air fautif à première vue.  
J'aurais écrit le code un peu différemment:
 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5. use feature qw(say);
  6. use English qw(-no_match_vars);
  7.  
  8. use Net::Telnet;
  9.  
  10. # donnée persistente avec une closure
  11. {
  12.  my $i;
  13.  my $today = join "-", map {$_ + (0, 1, 1900)[$i++]}(localtime)[3..5];
  14.  sub today { return $today; }
  15. }
  16.  
  17. my $backup = {host => '192.168.23.109', dir => 'cisco', dir2 => 'HP'};
  18. my $HP = {host => undef, log => 'R2T', pass => 'bonjour'};
  19.  
  20. open(my $fh, '<', '/var/lib/rancid/all/router.db');
  21. foreach (<$fh> ) {
  22.  if (/([0-9.]{1,})\:hp/) {
  23.    $HP->{host} = $1;
  24.    BackupHpSwitch($HP, $backup);
  25.  }
  26. }
  27. close($fh);
  28.  
  29.  
  30. sub BackupHpSwitch ($$) {
  31.  my ($HP, $backup)  = (shift, shift);
  32.  say $HP->{host};
  33.  
  34.  my $session = new Net::Telnet( Timeout => 5, Telnetmode => 0);
  35.  $session->open($HP->{host});
  36.  
  37.  print "   login : ";
  38.  if ($session->login($HP->{log}, $HP->{pass})) {
  39.    say "Ok";
  40.  
  41.    my $cmd = 'copy running-config tftp://'.$backup->{host}.'/'.$backup->{dir2}.'/'.$HP->{host}.'-'.today().".cfg\n\n\n";
  42.    $session->cmd($cmd);
  43.    $session->close;
  44.  }
  45.  else
  46.    {
  47.      say "Failed";
  48.    }
  49. }


Au vu de la doc, une histoire de prompt? Il est peut être standard sur le Cisco et pas sur le HP?

Citation :

prompt - pattern to match a prompt
This method sets the pattern used to find a prompt in the input stream. It must be a string representing a valid perl pattern match operator. The methods login() and cmd() try to read until matching the prompt. They will fail with a time-out error if the pattern you've chosen doesn't match what the remote side sends.


A+,


Message édité par gilou le 26-04-2013 à 21:43:05

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2187775
gilou
Modérateur
Modzilla
Posté le 26-04-2013 à 21:17:43  profilanswer
 

Bref, c"est quoi les prompts sur chacun des deux types de switches?
Vous devriez le voir avec un coup de telnet depuis une console.
Et si ça vient pas de ça, j'essaierais un coup avec un time out un peu plus important, juste pour vérifier que cela ne vient pas de la valeur passée (je suppose que vous l'avez sans doute déjà essayé).
A+,


Message édité par gilou le 26-04-2013 à 21:38:56

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2187950
pierra56
Posté le 29-04-2013 à 10:50:57  profilanswer
 

Bonjour,
 
Tout d'abord merci de votre réponse!!  :)  
Alors ensuite j'ai essayer votre code, il me marque exactement la même erreur, ducoup j'ai chercher un peu plus au niveau du prompt car c'est de la que viens l'erreur. (Time-out mit or de cause.)  
 
Le prompt sur le HP est C21T008 mais il change a chaque  switch différent.
Donc ducoup il faudrait mettre une regex au niveau du prompt.
Du genre  

Code :
  1. my $session = new Net::Telnet( Timeout => 5, Telnetmode => 0, Prompt => /[\w.-#>] $/);


 
mais toujour le même problème!! :(
Alors sinon d'après l'erreur cela viendrai du login  
avec la doc que j'ai trouver http://search.cpan.org/~jrogers/Ne [...] /Telnet.pm,
cette partie correspondrait peut-être mais je ne vois pas comment faire:

Code :
  1. $ok = $obj->login($username, $password);
  2.     $ok = $obj->login(Name     => $username,
  3.                       Password => $password,
  4.                       [Errmode => $mode,]
  5.                       [Prompt  => $match,]
  6.                       [Timeout => $secs,]);


 
Merci encore de votre aide!!  
PA

n°2187995
gilou
Modérateur
Modzilla
Posté le 29-04-2013 à 14:09:55  profilanswer
 

Citation :

Alors ensuite j'ai essayer votre code, il me marque exactement la même erreur,

Oui, oui, mon code était juste une réécriture du vôtre de manière un peu plus structurée et en évitant les variables globales et en passant les variables par références plutôt qu'en copient tout le contenu des structures. Il est donc normal qu'il ait les mêmes problèmes.

 

Pour tracer le problème, je ferais un $session->dump_log("logit.txt" ); avant le if ($session->login(... et je regarderais ce qui a transité dans les I/O après coup.
En particulier pour voir s'il a demandé le login, puis le passwd

 

A+,

 


Message édité par gilou le 29-04-2013 à 14:11:36

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2188146
pierra56
Posté le 30-04-2013 à 09:52:38  profilanswer
 

Re!!
 
Super ton truc pour la $session->dump_log("logit.txt" ), Donc le résultat est qu'il se connecte bien mais il se stop à la ligne, juste avant de demander l'username et le password. Car enfaite chez HP il faut taper sur une touche pour pouvoir se connecter.
 
Voila la fin du fichier:  

Code :
  1. 0x00090: 6e 63 65 6d  65 6e 74 73  0a 0d 20 20  2a 20 53 70  ncements..  * Sp
  2. < 0x000a0: 65 63 69 61  6c 20 65 76  65 6e 74 73  0a 0d 0a 0d  ecial events....
  3. < 0x000b0: 50 6c 65 61  73 65 20 72  65 67 69 73  74 65 72 20  Please register
  4. < 0x000c0: 79 6f 75 72  20 70 72 6f  64 75 63 74  73 20 6e 6f  your products no
  5. < 0x000d0: 77 20 61 74  3a 20 20 77  77 77 2e 50  72 6f 43 75  w at:  www.ProCu
  6. < 0x000e0: 72 76 65 2e  63 6f 6d 0a  0d 0a 0d 0a  0d 1b 5b 32  rve.com.......[2
  7. < 0x000f0: 34 3b 31 48  50 72 65 73  73 20 61 6e  79 20 6b 65  4;1HPress any ke
  8. < 0x00100: 79 20 74 6f  20 63 6f 6e  74 69 6e 75  65 1b 5b 31  y to continue.[1
  9. < 0x00110: 3b 31 48 1b  5b 3f 32 35  68 1b 5b 32  34 3b 32 37  ;1H.[?25h.[24;27
  10. < 0x00120: 48                                                  H


 
Alors ducoup j'ai voulu rajouter une ligne où un caractère est rentrer

Code :
  1. $session->cmd('n');


Mais cela ne marche pas même si j'ai plus le même problème maintenant, ça marque:  

Code :
  1. command timed-out at test3.pl line 36

(j'ai augmenter le time-out rien y change.)
je sens qu'on  tient le bon bout!! :)
 
Merci de ton aide!!
PA

n°2188158
gilou
Modérateur
Modzilla
Posté le 30-04-2013 à 10:43:30  profilanswer
 

Ah! C'est un problème connu. La solution, pour envoyer une ligne vide, c'est de faire $session->print(''); (deux simple quotes, pas une double).
Et tu peux ensuite faire $session->print('') if $session->waitfor('/Press any key to continue/') == 1; si tu veux un code générique qui marche pour les routeurs qui le demandent ou pas (Et tu adaptes le texte de l'expression régulière, "Press any key to continue", selon tes besoins).
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2188165
pierra56
Posté le 30-04-2013 à 11:25:46  profilanswer
 

Voilà l'étape Press any key to continue est passée. Je n'avais pas mit print mais cmd! --'  
 
Dans le fichier logit.txt je vois bien qu'il demande l'username mais manque de bol il ne le prend pas. Encore une histoire de prompt.
Car le même message d'erreur est survenue "timed-out waiting for login prompt at test3.pl line 39"
 
logit.txt :

Code :
  1. < 0x00000: 1b 5b 32 34  3b 31 48 55  73 65 72 6e  61 6d 65 3a  .[24;1HUsername:
  2. < 0x00010: 20 1b 5b 3f  32 35 68 1b  5b 32 34 3b  31 48 1b 5b   .[?25h.[24;1H.[
  3. < 0x00020: 3f 32 35 68  1b 5b 32 34  3b 31 31 48  1b 5b 32 34  ?25h.[24;11H.[24
  4. < 0x00030: 3b 31 31 48  1b 5b 3f 32  35 68 1b 5b  32 34 3b 31  ;11H.[?25h.[24;1
  5. < 0x00040: 31 48                                               1H


 
Il y surement une regex à mettre quelque par!!  
j'ai esseyerr ça sans succès:

Code :
  1. $session->login (Name =>$HP_log,
  2.     Password => $HP_pass,
  3.     Prompt => '/:/',
  4.    Timeout => 10);


 
et ça mais inutile aussi:  

Code :
  1. my $session = new Net::Telnet( Timeout =>10, Telnetmode => 0, Prompt => '/:/');


 
Une petite idée?
Merci  
PA

n°2188169
pierra56
Posté le 30-04-2013 à 12:12:20  profilanswer
 

C'est bon enfaite j'ai reussi a me connecte!!! :D
 
j'ai remplacer login par =>  
$session->print($HP->{log});
  $session->print($HP->{pass});
 
Mais bon maintenant il ne prend pas la commande ou alors il ne la comprend pas.
 
je vous met juste le fichier logit.txt pour voir si vous conprener ce qui ne vas pas!!  
 

Code :
  1. > 0x00000: 52 32 54 0d  0a                                     R2T..
  2. > 0x00000: 62 6f 6e 6a  6f 75 72 0d  0a                        bonjour..
  3. > 0x00000: 63 6f 70 79  20 72 75 6e  6e 69 6e 67  2d 63 6f 6e  copy running-con
  4. > 0x00010: 66 69 67 20  74 66 74 70  3a 2f 2f 31  39 32 2e 31  fig tftp://192.1
  5. > 0x00020: 36 38 2e 32  33 2e 31 30  39 20 48 50  2f 31 30 2e  68.23.109 HP/10.
  6. > 0x00030: 32 31 2e 38  2e 34 2d 33  30 2d 34 2d  32 30 31 33  21.8.4-30-4-2013
  7. > 0x00040: 2e 63 66 67  0d 0a 0d 0a  0d 0a 0d 0a               .cfg........
  8. < 0x00000: 1b 5b 32 4a  1b 5b 3f 37  6c 1b 5b 33  3b 32 33 72  .[2J.[?7l.[3;23r
  9. < 0x00010: 1b 5b 3f 36  6c 1b 5b 32  34 3b 32 37  48 1b 5b 3f  .[?6l.[24;27H.[?
  10. < 0x00020: 32 35 68 1b  5b 32 34 3b  32 37 48 1b  5b 3f 36 6c  25h.[24;27H.[?6l
  11. < 0x00030: 1b 5b 31 3b  32 34 72 1b  5b 3f 37 6c  1b 5b 32 4a  .[1;24r.[?7l.[2J
  12. < 0x00040: 1b 5b 32 34  3b 32 37 48  1b 5b 31 3b  32 34 72 1b  .[24;27H.[1;24r.
  13. < 0x00050: 5b 32 34 3b  32 37 48                               [24;27H
  14. < 0x00000: 1b 5b 32 34  3b 31 48 55  73 65 72 6e  61 6d 65 3a  .[24;1HUsername:
  15. < 0x00010: 20 1b 5b 3f  32 35 68 1b  5b 32 34 3b  31 48 1b 5b   .[?25h.[24;1H.[
  16. < 0x00020: 3f 32 35 68  1b 5b 32 34  3b 31 31 48  1b 5b 32 34  ?25h.[24;11H.[24
  17. < 0x00030: 3b 31 31 48  1b 5b 3f 32  35 68 1b 5b  32 34 3b 31  ;11H.[?25h.[24;1
  18. < 0x00040: 31 48 1b 5b  32 34 3b 31  31 48 52 1b  5b 3f 32 35  1H.[24;11HR.[?25
  19. < 0x00050: 68 1b 5b 32  34 3b 31 32  48 1b 5b 32  34 3b 31 32  h.[24;12H.[24;12
  20. < 0x00060: 48 32 1b 5b  3f 32 35 68  1b 5b 32 34  3b 31 33 48  H2.[?25h.[24;13H
  21. < 0x00070: 1b 5b 32 34  3b 31 33 48  54 1b 5b 3f  32 35 68 1b  .[24;13HT.[?25h.
  22. < 0x00080: 5b 32 34 3b  31 34 48 1b  5b 31 3b 31  48 1b 5b 3f  [24;14H.[1;1H.[?
  23. < 0x00090: 32 35 6c 1b  5b 32 34 3b  31 34 48 1b  5b 32 34 3b  25l.[24;14H.[24;
  24. < 0x000a0: 31 48 0d 0a  0d 1b 5b 3f  32 35 68 1b  5b 32 34 3b  1H....[?25h.[24;
  25. < 0x000b0: 31 34 48 1b  5b 32 34 3b  31 48 50 61  73 73 77 6f  14H.[24;1HPasswo
  26. < 0x000c0: 72 64 3a 20  1b 5b 3f 32  35 68 1b 5b  32 34 3b 31  rd: .[?25h.[24;1
  27. < 0x000d0: 48 1b 5b 3f  32 35 68 1b  5b 32 34 3b  31 31 48 1b  H.[?25h.[24;11H.
  28. < 0x000e0: 5b 31 3b 31  48 1b 5b 3f  32 35 6c 1b  5b 32 34 3b  [1;1H.[?25l.[24;
  29. < 0x000f0: 31 31 48 1b  5b 32 34 3b  31 48 0d 0a  0d 1b 5b 3f  11H.[24;1H....[?
  30. < 0x00100: 32 35 68 1b  5b 32 34 3b  31 31 48 1b  5b 32 4a 1b  25h.[24;11H.[2J.
  31. < 0x00110: 5b 3f 37 6c  1b 5b 31 3b  32 34 72 1b  5b 3f 36 6c  [?7l.[1;24r.[?6l
  32. < 0x00120: 1b 5b 32 34  3b 31 48 1b  5b 31 3b 32  34 72 1b 5b  .[24;1H.[1;24r.[
  33. < 0x00130: 32 34 3b 31  48 1b 5b 32  34 3b 31 48  1b 5b 32 4b  24;1H.[24;1H.[2K
  34. < 0x00140: 1b 5b 32 34  3b 31 48 1b  5b 3f 32 35  68 1b 5b 32  .[24;1H.[?25h.[2
  35. < 0x00150: 34 3b 31 48  1b 5b 32 34  3b 31 48 43  32 31 54 30  4;1H.[24;1HC21T0
  36. < 0x00160: 30 38 23 20  1b 5b 32 34  3b 31 48 1b  5b 32 34 3b  08# .[24;1H.[24;
  37. < 0x00170: 31 30 48 1b  5b 32 34 3b  31 48 1b 5b  3f 32 35 68  10H.[24;1H.[?25h
  38. < 0x00180: 1b 5b 32 34  3b 31 30 48  1b 5b 32 34  3b 31 30 48  .[24;10H.[24;10H
  39. < 0x00190: 63 6f 70 79  20 72 75 6e  6e 69 1b 5b  32 34 3b 31  copy runni.[24;1
  40. < 0x001a0: 30 48 1b 5b  3f 32 35 68  1b 5b 32 34  3b 32 30 48  0H.[?25h.[24;20H
  41. < 0x001b0: 1b 5b 32 34  3b 32 30 48  6e 67 2d 63  6f 6e 66 69  .[24;20Hng-confi
  42. < 0x001c0: 67 20 1b 5b  32 34 3b 32  30 48 1b 5b  3f 32 35 68  g .[24;20H.[?25h
  43. < 0x001d0: 1b 5b 32 34  3b 33 30 48  1b 5b 32 34  3b 33 30 48  .[24;30H.[24;30H
  44. < 0x001e0: 74 66 74 70  3a 2f 2f 31  39 32 1b 5b  32 34 3b 33  tftp://192.[24;3
  45. < 0x001f0: 30 48 1b 5b  3f 32 35 68  1b 5b 32 34  3b 34 30 48  0H.[?25h.[24;40H
  46. < 0x00200: 1b 5b 32 34  3b 34 30 48  2e 31 36 38  2e 32 33 2e  .[24;40H.168.23.
  47. < 0x00210: 31 30 1b 5b  32 34 3b 34  30 48 1b 5b  3f 32 35 68  10.[24;40H.[?25h
  48. < 0x00220: 1b 5b 32 34  3b 35 30 48  1b 5b 32 34  3b 35 30 48  .[24;50H.[24;50H
  49. < 0x00230: 39 20 48 50  2f 31 30 2e  32 31 1b 5b  32 34 3b 35  9 HP/10.21.[24;5
  50. < 0x00240: 30 48 1b 5b  3f 32 35 68  1b 5b 32 34  3b 36 30 48  0H.[?25h.[24;60H
  51. < 0x00250: 1b 5b 32 34  3b 36 30 48  2e 38 2e 34  2d 33 30 2d  .[24;60H.8.4-30-
  52. < 0x00260: 34 2d 1b 5b  32 34 3b 36  30 48 1b 5b  3f 32 35 68  4-.[24;60H.[?25h
  53. < 0x00270: 1b 5b 32 34  3b 37 30 48  1b 5b 32 34  3b 37 30 48  .[24;70H.[24;70H
  54. < 0x00280: 32 30 31 33  2e 63 66 67  1b 5b 32 34  3b 37 30 48  2013.cfg.[24;70H
  55. < 0x00290: 1b 5b 3f 32  35 68 1b 5b  32 34 3b 37  38 48 1b 5b  .[?25h.[24;78H.[
  56. < 0x002a0: 32 34 3b 30  48 1b 45 1b  5b 32 34 3b  31 48 1b 5b  24;0H.E.[24;1H.[
  57. < 0x002b0: 32 34 3b 37  38 48 1b 5b  32 34 3b 31  48 1b 5b 32  24;78H.[24;1H.[2
  58. < 0x002c0: 4b 1b 5b 32  34 3b 31 48  1b 5b 3f 32  35 68 1b 5b  K.[24;1H.[?25h.[
  59. < 0x002d0: 32 34 3b 31  48 1b 5b 31  3b 32 34 72  1b 5b 32 34  24;1H.[1;24r.[24
  60. < 0x002e0: 3b 31 48 49  6e 76 61 6c  69 64 20 69  6e 70 75 74  ;1HInvalid input
  61. < 0x002f0: 3a 20 74 66  74 70 3a 2f  2f 31 39 32  2e 31 36 38  : tftp://192.168
  62. < 0x00300: 2e 32 33 2e  31 30 39 0a  0d 1b 5b 31  3b 32 34 72  .23.109...[1;24r
  63. < 0x00310: 1b 5b 32 34  3b 31 48 1b  5b 32 34 3b  31 48 1b 5b  .[24;1H.[24;1H.[
  64. < 0x00320: 32 4b 1b 5b  32 34 3b 31  48 1b 5b 3f  32 35 68 1b  2K.[24;1H.[?25h.
  65. < 0x00330: 5b 32 34 3b  31 48 1b 5b  32 34 3b 31  48 43 32 31  [24;1H.[24;1HC21
  66. < 0x00340: 54 30 30 38  23 20 1b 5b  32 34 3b 31  48 1b 5b 32  T008# .[24;1H.[2
  67. < 0x00350: 34 3b 31 30  48 1b 5b 32  34 3b 31 48  1b 5b 3f 32  4;10H.[24;1H.[?2
  68. < 0x00360: 35 68 1b 5b  32 34 3b 31  30 48 1b 5b  32 34 3b 30  5h.[24;10H.[24;0
  69. < 0x00370: 48 1b 45 1b  5b 32 34 3b  31 48 1b 5b  32 34 3b 31  H.E.[24;1H.[24;1
  70. < 0x00380: 30 48 1b 5b  32 34 3b 31  48 1b 5b 32  4b 1b 5b 32  0H.[24;1H.[2K.[2
  71. < 0x00390: 34 3b 31 48  1b 5b 3f 32  35 68 1b 5b  32 34 3b 31  4;1H.[?25h.[24;1
  72. < 0x003a0: 48 1b 5b 31  3b 32 34 72  1b 5b 32 34  3b 31 48 1b  H.[1;24r.[24;1H.
  73. < 0x003b0: 5b 31 3b 32  34 72 1b 5b  32 34 3b 31  48 1b 5b 32  [1;24r.[24;1H.[2
  74. < 0x003c0: 34 3b 31 48  1b 5b 32 4b  1b 5b 32 34  3b 31 48 1b  4;1H.[2K.[24;1H.
  75. < 0x003d0: 5b 3f 32 35  68 1b 5b 32  34 3b 31 48  1b 5b 32 34  [?25h.[24;1H.[24
  76. < 0x003e0: 3b 31 48 43  32 31 54 30  30 38 23 20  1b 5b 32 34  ;1HC21T008# .[24
  77. < 0x003f0: 3b 31 48 1b  5b 32 34 3b  31 30 48 1b  5b 32 34 3b  ;1H.[24;10H.[24;


 
Peut-être un pb de connection!!  :??:  
Merci  
PA

n°2188186
gilou
Modérateur
Modzilla
Posté le 30-04-2013 à 13:48:06  profilanswer
 

Dans ces cas la, il vaut mieux tout décomposer:
          $session->open($host);
          $session->waitfor('/Press any key to continue/');
          $session->print('');
          $session->waitfor('/Username:\s*/');
          $session->print($HP_log);
          $session->waitfor('/Password:\s*/');
          $session->print($HP_pass);
et voir à quelle étape ça coince.
Et quand on a trouvé la ligne qui coince, faire
$session->dump_log("logit.txt" ); # ça démarre le dump
la ligne quii coince
$session->dump_log("" ); # ça arrête le dump
pour ne dumper que la zone à problème
 
A+,


Message édité par gilou le 30-04-2013 à 13:52:55

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le 30-04-2013 à 13:48:06  profilanswer
 

n°2188189
gilou
Modérateur
Modzilla
Posté le 30-04-2013 à 14:01:13  profilanswer
 

Au vu de ceci:
 
< 0x00190: 63 6f 70 79  20 72 75 6e  6e 69 1b 5b  32 34 3b 31  copy runni.[24;1
< 0x001a0: 30 48 1b 5b  3f 32 35 68  1b 5b 32 34  3b 32 30 48  0H.[?25h.[24;20H
< 0x001b0: 1b 5b 32 34  3b 32 30 48  6e 67 2d 63  6f 6e 66 69  .[24;20Hng-confi
< 0x001c0: 67 20 1b 5b  32 34 3b 32  30 48 1b 5b  3f 32 35 68  g .[24;20H.[?25h
< 0x001d0: 1b 5b 32 34  3b 33 30 48  1b 5b 32 34  3b 33 30 48  .[24;30H.[24;30H
< 0x001e0: 74 66 74 70  3a 2f 2f 31  39 32 1b 5b  32 34 3b 33  tftp://192.[24;3
< 0x001f0: 30 48 1b 5b  3f 32 35 68  1b 5b 32 34  3b 34 30 48  0H.[?25h.[24;40H
 
Le login s'est bien passé, c'est la commande qui pose problème. Bizarre qu'on ait des caractères de contrôle au milieu.
 
Non mais c'est clair: ce qui est passé comme commande c'est (en début de dump)
copy running-config tftp://192.168.23.109 HP/10.21.8.4-30-4-2013.cfg
il y a pas un slash mais un blanc avant le HP
Vous auriez pas un code avec
"copy running-config tftp://".$backup_host." ".$backup_dir2."/".$HP_host."-".$dateToday.".cfg\n\n\n"
plutôt que
"copy running-config tftp://".$backup_host."/".$backup_dir2."/".$HP_host."-".$dateToday.".cfg\n\n\n"
 
A+,


Message édité par gilou le 30-04-2013 à 14:13:58

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2188223
pierra56
Posté le 30-04-2013 à 15:29:56  profilanswer
 

Oui je sais, c'est moi qui l'ai modifier car contrairement au cisco la commande copy run tftp est s'éparer par un espace après l'adresse IP de destination. Mais bon j'ai quand même essaye avec le "/" mais rien y fait.  
 
J'y suis presque!!!  
Vous savez c'est dû a quoi ces caractères de contrôle?
Merci
PA

n°2188226
pierra56
Posté le 30-04-2013 à 15:38:42  profilanswer
 

C'est bon j'ai trouver une erreur toute connne!!!
 
Fin bon merci encore pour votre aide précieuse!!  
Je posterai mon code finale tout à lheure!! ;)  
PA

n°2188235
pierra56
Posté le 30-04-2013 à 16:03:19  profilanswer
 

Et voici!!  
Alors il marche niquel mais par contre il m'envoie toujours  
 " commande time out " à la fin du prog! mais je reçois bien les configs!!  
 
Alors voila mon code pour récupérer les configurations de switch Cisco et HP.  
 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use autodie;
  5. use feature qw(say);
  6. use English qw(-no_match_vars);
  7. use Net::Telnet::Cisco;
  8. use Net::Telnet;
  9. # donnée persistente avec une closure
  10. {
  11. my $i;
  12. my $today = join "-", map {$_ + (0, 1, 1900)[$i++]}(localtime)[3..5];
  13. sub today { return $today; }
  14. }
  15. my $backup = {host => '192.168.23.109', dir => 'cisco', dir2 => 'HP'};
  16. my $cisco = {host=> undef, log => 'R2T', pass => 'bonjour', enapass=> 'cisco'};
  17. my $HP = {host => undef, log => 'R2T', pass => 'bonjour'};
  18. open(my $fh, '<', '/var/lib/rancid/all/router.db');
  19. foreach (<$fh> ) {
  20. if (/([0-9.]{1,})\:cisco/)
  21. {     
  22. $cisco->{host}=$1;
  23. &BackupCiscoSwitch($cisco, $backup);
  24. }
  25. elsif (/([0-9.]{1,})\:hp/) {
  26.    $HP->{host} = $1;
  27.    &BackupHpSwitch($HP, $backup);
  28. }
  29. }
  30. close($fh);
  31. #backup pour switch cisco
  32. sub BackupCiscoSwitch($$) {
  33.   my ($cisco, $backup)  = (shift, shift);
  34. say $cisco->{host};
  35.   my $session = Net::Telnet::Cisco->new(Host => $cisco->{host});
  36.   print "   login : ";
  37.   if ($session->login( $cisco->{log}, $cisco->{pass}) ) {
  38.        print "Ok\n";
  39.         # Enable mode
  40.         print "   enable mode : ";
  41.         if ($session->enable($cisco->{enapass}) ) {
  42.                 print "Ok\n";
  43.                 $session->cmd("copy run tftp://".$backup->{host}.'/'.$backup->{dir}.'/'.$cisco->{host}.'-'.today().".cfg\n\n\n" );
  44.                 $session->close;
  45.                 }
  46.                 else
  47.                 {
  48.                 print "Failed\n";
  49.                 }
  50.         }
  51.         else
  52.         {
  53.         print "Failed\n";
  54.         }
  55. }
  56. #backup pour switch HP procurve
  57. sub BackupHpSwitch ($$) {
  58. my ($HP, $backup)  = (shift, shift);
  59. say $HP->{host};
  60. my $session = new Net::Telnet( Timeout =>10, Telnetmode => 0);
  61. $session->open($HP->{host});
  62. $session->print('') if $session->waitfor('/Press any key to continue/') == 1;
  63. print "   login : ";
  64. #$session->dump_log("logit.txt" );
  65.   $session->print($HP->{log});
  66.   $session->print($HP->{pass});
  67.    say "Ok";
  68.   $session->cmd("copy running-config tftp ".$backup->{host}.' '.$backup->{dir2}.'/'.$HP->{host}.'-'.today().".cfg\n\n\n" );
  69.    $session->close;
  70. }


 
Merci bcp gilou d'avoir prit du temps pour m'aider!!  
PA

n°2188270
gilou
Modérateur
Modzilla
Posté le 30-04-2013 à 18:57:28  profilanswer
 

Je viens juste de revenir a mon ordi (passé l'après midi à désherber mes framboisiers et tondre la pelouse).
Chouette, ça marche :)
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

   Utilisation de Net::Telnet pour se connecter aux switch HP

 

Sujets relatifs
recupération conf switch sur FTPUtilisation Google Email Setting API
utilisation de select() / fd_set() et autres joyeusetés sous linux[C#] Utilisation de Google Calendar
[java]MyBatis - Utilisation de DAO génériques[Résolu]Utilisation formulaire
[ASP.NET - C#] Titre gridview[ASP.NET - C#] Récupérer valeur d'un gridview
se connecter à la base sans des bons login & password 
Plus de sujets relatifs à : Utilisation de Net::Telnet pour se connecter aux switch HP


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