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

Utilisation de Net::Telnet pour se connecter aux switch HP - Perl - Programmation

Marsh Posté le 26-04-2013 à 14:26:21    

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
Reply

Marsh Posté le 26-04-2013 à 14:26:21   

Reply

Marsh Posté le 26-04-2013 à 21:04:04    

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é!  --
Reply

Marsh Posté le 26-04-2013 à 21:17:43    

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é!  --
Reply

Marsh Posté le 29-04-2013 à 10:50:57    

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

Reply

Marsh Posté le 29-04-2013 à 14:09:55    

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é!  --
Reply

Marsh Posté le 30-04-2013 à 09:52:38    

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

Reply

Marsh Posté le 30-04-2013 à 10:43:30    

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é!  --
Reply

Marsh Posté le 30-04-2013 à 11:25:46    

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

Reply

Marsh Posté le 30-04-2013 à 12:12:20    

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

Reply

Marsh Posté le 30-04-2013 à 13:48:06    

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é!  --
Reply

Marsh Posté le 30-04-2013 à 13:48:06   

Reply

Marsh Posté le 30-04-2013 à 14:01:13    

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é!  --
Reply

Marsh Posté le 30-04-2013 à 15:29:56    

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

Reply

Marsh Posté le 30-04-2013 à 15:38:42    

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

Reply

Marsh Posté le 30-04-2013 à 16:03:19    

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

Reply

Marsh Posté le 30-04-2013 à 18:57:28    

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é!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed