Net::Telnet pour switch Linksys

Net::Telnet pour switch Linksys - Perl - Programmation

Marsh Posté le 03-05-2013 à 17:04:11    

Bonjour à tous,
 
J'ai encore besoin de votre aide pour me connecter à un switch de marque Linksys (mais avec une version ancienne 1.0.2), j'ai un problème avec mon script il ne veut pas écrire le login et le mot de passe. Mais ensuite puir quitter ce menu il faut faire "echap" et bref ça fonctionne point.
 
je vous explique exactement la procédure de conexion.  
 

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. my $LK = {host => undef, log => 'R2T', pass => 'bonjour'};
  19. open(my $fh, '<', '/var/lib/rancid/all/router.db');
  20. foreach (<$fh> ) {
  21. if (/([0-9.]{1,})\:linksys/)
  22. {     
  23. $LK->{host}=$1;
  24. &BackupLinkSwitch($LK, $backup);
  25. }
  26.   }
  27. sub BackupLinkSwitch($$)
  28. {
  29. my ($LK, $backup) = (shift, shift);
  30. say $LK->{host};
  31. my $session= new Net::Telnet (Timeout=>5, Telnetmode=>0);
  32. $session->open($LK->{host});   <=connexion en telnet
  33.   $session->print("\n" ) if $session->waitfor('/Edit/') == 1;     <=une fois connecter on fait entrer
  34.   print "   login : ";
  35.  $session->print($LK->{log}) if $session->waitfor('/User Name:/') == 1;   <= ensuite on rentre le login
  36.     $session->print($LK->{pass}) if $session->waitfor('/assword:/') == 1;  <= le mot de passe
  37.  $session->print("\e" );     <= Il faire "Echap" pour continuer obliger
  38.  $session->print("\t" ) if $session->waitfor('/Edit/') == 1;  <= on fait tab
  39.  $session->print("\n" ) if $session->waitfor('/Execute/') == 1; <= puis entrée
  40.  $session->print("\n" ); #if $session->waitfor('/Operation complete/') == 1; <= 2ieme fois entrée
  41. $session->print("\032" ) if $session->waitfor('/1. System Configuration Menu/') == 1;  <= obliger de faire controle+Z pour accéder a la ligne de commande
  42.  $session->print('lcli') if $session->waitfor('/>/') == 1;  <= on passe en mode privilégié
  43.  $session->print($LK->{log}) if $session->waitfor('/User Name:/') == 1;  <= on réécrit le login
  44.  
  45.           say "Ok";  <= a partir de la on peut envoyer la commande!!
  46.  $session->cmd("copy startup-config tftp ".$backup->{host}.' '.$backup->{dir2}.'/'.$HP->{host}.'-'.today().".cfg\n\n\n" );
  47.    $session->close;
  48. }


A partir de la quand je lance le programme il me met "pattern match timed-out at link.pl line 48"  
Mais j'ai fait un "$session->dump_log("logit2.txt" );"
je vois bien qu'il n'arrive pas à écrire le mot de passe!!
Que faire!!  :??:  
 
Merci de votre aide!!  
PA
(Gilou si tu veux mettre ce topic dans mon autre post pas de pb!! )

Reply

Marsh Posté le 03-05-2013 à 17:04:11   

Reply

Marsh Posté le 03-05-2013 à 22:25:28    

Bonjour
 
Bon, a vue de nez, je tenterais un truc type:
 

Code :
  1. sub BackupLinkSwitch($$)
  2. {
  3.    my ($LK, $backup) = (shift, shift);
  4.  
  5.    say $LK->{host};
  6.  
  7.    my $session= new Net::Telnet (Timeout=>5, Telnetmode=>0);
  8.    $session->open($LK->{host});   <=connexion en telnet
  9.    $session->put("\n" ) if ($session->waitfor('/Edit/') == 1);    
  10.    print "   login : ";
  11.  
  12.    $session->print($LK->{log})   if ($session->waitfor('/User Name:/') == 1);  
  13.    $session->print($LK->{pass}) if ($session->waitfor('/Password:/') == 1);  
  14.    $session->put("\e" );  
  15.    $session->put("\t" ) if ($session->waitfor('/Edit/') == 1);  # put("\t" ) ou print("\t" ) si manuellement il y a retour chariot ensuite
  16.    $session->put("\n" ) if ($session->waitfor('/Execute/') == 1);
  17.    $session->put("\n" );  #if ($session->waitfor('/Operation complete/') == 1);
  18.    $session->put("\cZ" ) if ($session->waitfor('/System Configuration Menu/') == 1);  # controle+Z pour accéder a la ligne de commande
  19.    $session->print('lcli')   if ($session->waitfor('/\>/') == 1); # Je pense qu'il faut un \ devant car < a une interpretation dans une regexp
  20.    $session->print($LK->{log}) if ($session->waitfor('/User Name:/') == 1); # Euhhh, a nouveau??
  21.  
  22.    say "Ok";  <= a partir de la on peut envoyer la commande!!
  23.    $session->cmd("copy startup-config tftp ".$backup->{host}.' '.$backup->{dir2}.'/'.$HP->{host}.'-'.today().".cfg\n\n\n" );
  24.    $session->close;
  25. }


 
Vu ta session, il y a des caractères à envoyer sans \n ensuite, et les print en mettent un (sauf option output_record_separator mis a "", mais c'est a réserver a des cas spécifiques)
Pour faire ça, on utilise put et non print, je testerais avec des put la ou il faut, car les print peuvent faire échouer l'interprétation de ce que tu envoies.
Grosso modo, si dans une session manuelle, tu tapes quelque chose suivi de retour chariot, utiliser print, et sinon utiliser put.
Et si tu veux envoyer un seul \n, faire print(''); ou put ("\n" ); car print("\n" ) en envoie deux
 
A+,


Message édité par gilou le 03-05-2013 à 22:28:39

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

Marsh Posté le 06-05-2013 à 09:55:45    

Merci de ta réponse!!!  :)  
 
Et donc j'ai essayer en remplaçant les print par des put comme vous me l'avez conseillé et ça ne marche pas tout à fais. Je crois que ça n'écrit pas au bonne endroit où dans le désordre ou pas les mot pas entièrement fin du grand n'importe quoi!! :s
 
 
Voici ce que l'on a quand on se connecte en telnet sur ce switch :
 
http://img706.imageshack.us/img706/6968/linksys2.jpg
 
 
Comme on peut le voir, quand on se connecte on arrive directement sur Edit donc on fait entrée
Puis le curseur arrive en face de "User Name:" la on écrit R2T, on fait tab ou  entrée pas d'importance puis on arrive en face de "Password:" on écrit le mdp, Ensuite pour valider il faut faire la touche "échap" puis on arrive sur "Edit", ducoup on fait tab, on arrive sur "Execute" donc on fait "entrée", on refait entrée, on arrive à un menu  et pour le quitter, il faut faire "contrôle+Z", enfin on peut écrire les lignes de commande soit après ">" on écrit "lcli" il nous redemande "User Name:" on ecrit R2T, et voila on est en # on peut faire copy startup-conf....
 
D'après vous c'est réalisable en Perl?

Reply

Marsh Posté le 06-05-2013 à 12:07:37    

Bien sur, vu que c'est juste un envoi de touches.
 
Le pb est pas à ce niveau, le pb, c'est que c'est des screens qui sont envoyés et non pas des prompts.
Vu que Edit a de la video inverse, la chaine ne contient probablement pas Edit, mais une séquence avec des escape dedans et c'est la que le waitfor échoue.
Faudrait faire un dump:
$session->dump_log("logit.txt" );
$session->open($LK->{host});
$session->dump("" );
$session->close;
exit;
 
A partir de cela, on a des chances d'en savoir plus sur ce qui est envoyé.
Noter que pour le premier waitfor, Execute n'étant pas en inverse video, la chaine doit être sans parasites, et donc en remplaçant
$session->put("\n" ) if ($session->waitfor('/Edit/') == 1);  par $session->put("\n" ) if ($session->waitfor('/Execute/') == 1);    
on a des chances d'avancer d'un cran.
 
 

Citation :

Comme on peut le voir, quand on se connecte on arrive directement sur Edit donc on fait entrée  => print('');
Puis le curseur arrive en face de "User Name:" la on écrit R2T on fait tab ou  entrée pas d'importance => print('R2T');
puis on arrive en face de "Password:" on écrit le mdp, => put('...');
Ensuite pour valider il faut faire la touche "échap" => put("\e" );
puis on arrive sur "Edit", ducoup on fait tab, => put("\t" );
on arrive sur "Execute" donc on fait "entrée", on refait entrée, => print("\n" ); ou put("\n" ); deux fois si un délai est nécessaire entre les deux.
on arrive à un menu  et pour le quitter, il faut faire "contrôle+Z", => put("\cZ" );
enfin on peut écrire les lignes de commande soit après ">" on écrit "lcli" => print(lcli');
il nous redemande "User Name:" on ecrit R2T,  => print('R2T');
et voila  


Manque plus que les bons waitfor (voire rien si on peut s'en passer).
 
A+,


Message édité par gilou le 06-05-2013 à 12:21:05

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

Marsh Posté le 06-05-2013 à 13:24:34    

Alors j'ai rajouter le dump_log comme indiquer juste au dessu de la connexion et le dump à la fin du programme.
J'ai aussi remplacé le "Edit" par "Execute" ça me donne la même chose.
Et j'ai supprimé pas mal de waitfor, cela ne changeai rien!!
 
Voilà le résultat:

Code :
  1. < 0x00000: ff fd 03                                            ÿý.
  2. < 0x00000: ff fb 03 ff  fd 01 ff fb  01 0d 0a 0d  1b 5b 32 4a  ÿû.ÿý.ÿû.....[2J
  3. < 0x00010: 1b 5b 30 3b  30 48 1b 5b  4b 1b 5b 31  3b 30 48 1b  .[0;0H.[K.[1;0H.
  4. < 0x00020: 5b 4b 1b 5b  32 3b 30 48  1b 5b 4b 1b  5b 33 3b 30  [K.[2;0H.[K.[3;0
  5. < 0x00030: 48 1b 5b 4b  1b 5b 34 3b  30 48 1b 5b  4b 1b 5b 35  H.[K.[4;0H.[K.[5
  6. < 0x00040: 3b 30 48 1b  5b 4b 1b 5b  36 3b 30 48  1b 5b 4b 1b  ;0H.[K.[6;0H.[K.
  7. < 0x00050: 5b 37 3b 30  48 1b 5b 4b  1b 5b 38 3b  30 48 1b 5b  [7;0H.[K.[8;0H.[
  8. < 0x00060: 4b 1b 5b 39  3b 30 48 1b  5b 4b 1b 5b  31 30 3b 30  K.[9;0H.[K.[10;0
  9. < 0x00070: 48 1b 5b 4b  1b 5b 31 31  3b 30 48 1b  5b 4b 1b 5b  H.[K.[11;0H.[K.[
  10. < 0x00080: 31 32 3b 30  48 1b 5b 4b  1b 5b 31 33  3b 30 48 1b  12;0H.[K.[13;0H.
  11. < 0x00090: 5b 4b 1b 5b  31 34 3b 30  48 1b 5b 4b  1b 5b 31 35  [K.[14;0H.[K.[15
  12. < 0x000a0: 3b 30 48 1b  5b 4b 1b 5b  31 36 3b 30  48 1b 5b 4b  ;0H.[K.[16;0H.[K
  13. < 0x000b0: 1b 5b 31 37  3b 30 48 1b  5b 4b 1b 5b  31 38 3b 30  .[17;0H.[K.[18;0
  14. < 0x000c0: 48 1b 5b 4b  1b 5b 31 39  3b 30 48 1b  5b 4b 1b 5b  H.[K.[19;0H.[K.[
  15. < 0x000d0: 32 30 3b 30  48 1b 5b 4b  1b 5b 32 31  3b 30 48 1b  20;0H.[K.[21;0H.
  16. < 0x000e0: 5b 4b 1b 5b  32 32 3b 30  48 1b 5b 4b  1b 5b 32 33  [K.[22;0H.[K.[23
  17. < 0x000f0: 3b 30 48 41  72 72 6f 77  4b 65 79 2f  54 41 42 2f  ;0HArrowKey/TAB/
  18. < 0x00100: 42 41 43 4b  3d 4d 6f 76  65 20 20 53  50 41 43 45  BACK=Move  SPACE
  19. < 0x00110: 3d 54 6f 67  67 6c 65 20  20 45 4e 54  45 52 3d 53  =Toggle  ENTER=S
  20. < 0x00120: 65 6c 65 63  74 20 20 45  53 43 3d 42  61 63 6b 1b  elect  ESC=Back.
  21. < 0x00130: 5b 30 3b 30  48 1b 5b 4b  1b 5b 31 3b  30 48 1b 5b  [0;0H.[K.[1;0H.[
  22. < 0x00140: 4b 1b 5b 32  3b 30 48 1b  5b 4b 1b 5b  33 3b 30 48  K.[2;0H.[K.[3;0H
  23. < 0x00150: 1b 5b 4b 1b  5b 34 3b 30  48 1b 5b 4b  1b 5b 35 3b  .[K.[4;0H.[K.[5;
  24. < 0x00160: 30 48 1b 5b  4b 1b 5b 36  3b 30 48 1b  5b 4b 1b 5b  0H.[K.[6;0H.[K.[
  25. < 0x00170: 37 3b 30 48  1b 5b 4b 1b  5b 38 3b 30  48 1b 5b 4b  7;0H.[K.[8;0H.[K
  26. < 0x00180: 1b 5b 39 3b  30 48 1b 5b  4b 1b 5b 31  30 3b 30 48  .[9;0H.[K.[10;0H
  27. < 0x00190: 1b 5b 4b 1b  5b 31 31 3b  30 48 1b 5b  4b 1b 5b 31  .[K.[11;0H.[K.[1
  28. < 0x001a0: 32 3b 30 48  1b 5b 4b 1b  5b 31 33 3b  30 48 1b 5b  2;0H.[K.[13;0H.[
  29. < 0x001b0: 4b 1b 5b 31  34 3b 30 48  1b 5b 4b 1b  5b 31 35 3b  K.[14;0H.[K.[15;
  30. < 0x001c0: 30 48 1b 5b  4b 1b 5b 31  36 3b 30 48  1b 5b 4b 1b  0H.[K.[16;0H.[K.
  31. < 0x001d0: 5b 31 37 3b  30 48 1b 5b  4b 1b 5b 31  38 3b 30 48  [17;0H.[K.[18;0H
  32. < 0x001e0: 1b 5b 4b 1b  5b 31 39 3b  30 48 1b 5b  4b 1b 5b 32  .[K.[19;0H.[K.[2
  33. < 0x001f0: 30 3b 30 48  1b 5b 4b 1b  5b 33 3b 32  37 48 20 20  0;0H.[K.[3;27H 
  34. < 0x00200: 20 20 20 20  20 20 20 20  20 20 1b 5b  33 3b 32 37            .[3;27
  35. < 0x00210: 48 4c 6f 67  69 6e 20 53  63 72 65 65  6e 1b 5b 34  HLogin Screen.[4
  36. < 0x00220: 3b 32 37 48  20 20 20 20  20 20 20 20  20 20 20 20  ;27H           
  37. < 0x00230: 1b 5b 34 3b  32 37 48 3d  3d 3d 3d 3d  3d 3d 3d 3d  .[4;27H=========
  38. < 0x00240: 3d 3d 3d 1b  5b 37 3b 32  34 48 20 20  20 20 20 20  ===.[7;24H     
  39. < 0x00250: 20 20 20 20  1b 5b 37 3b  32 34 48 55  73 65 72 20      .[7;24HUser
  40. < 0x00260: 4e 61 6d 65  3a 1b 5b 39  3b 32 34 48  20 20 20 20  Name:.[9;24H   
  41. < 0x00270: 20 20 20 20  20 1b 5b 39  3b 32 34 48  50 61 73 73       .[9;24HPass
  42. < 0x00280: 77 6f 72 64  3a 1b 5b 32  31 3b 30 48  1b 5b 4b 1b  word:.[21;0H.[K.
  43. < 0x00290: 5b 32 31 3b  30 48 41 63  74 69 6f 6e  2d 3e 1b 5b  [21;0HAction->.[
  44. < 0x002a0: 32 31 3b 31  38 48 45 64  69 74 1b 5b  32 31 3b 32  21;18HEdit.[21;2
  45. < 0x002b0: 35 48 45 78  65 63 75 74  65 1b 5b 32  31 3b 31 38  5HExecute.[21;18
  46. < 0x002c0: 48 1b 5b 37  6d 45 64 69  74 1b 5b 30  6d 1b 5b 32  H.[7mEdit.[0m.[2
  47. < 0x002d0: 31 3b 31 38  48                                     1;18H
  48. > 0x00000: 0d 0a                                               ..
  49. < 0x00000: 1b 5b 30 3b  30 48                                  .[0;0H
  50. < 0x00000: 1b 5b 4b 1b  5b 31 3b 30  48 1b 5b 4b  1b 5b 32 3b  .[K.[1;0H.[K.[2;
  51. < 0x00010: 30 48 1b 5b  4b 1b 5b 33  3b 30 48 1b  5b 4b 1b 5b  0H.[K.[3;0H.[K.[
  52. < 0x00020: 34 3b 30 48  1b 5b 4b 1b  5b 35 3b 30  48 1b 5b 4b  4;0H.[K.[5;0H.[K
  53. < 0x00030: 1b 5b 36 3b  30 48 1b 5b  4b 1b 5b 37  3b 30 48 1b  .[6;0H.[K.[7;0H.
  54. < 0x00040: 5b 4b 1b 5b  38 3b 30 48  1b 5b 4b 1b  5b 39 3b 30  [K.[8;0H.[K.[9;0
  55. < 0x00050: 48 1b 5b 4b  1b 5b 31 30  3b 30 48 1b  5b 4b 1b 5b  H.[K.[10;0H.[K.[
  56. < 0x00060: 31 31 3b 30  48 1b 5b 4b  1b 5b 31 32  3b 30 48 1b  11;0H.[K.[12;0H.
  57. < 0x00070: 5b 4b 1b 5b  31 33 3b 30  48 1b 5b 4b  1b 5b 31 34  [K.[13;0H.[K.[14
  58. < 0x00080: 3b 30 48 1b  5b 4b 1b 5b  31 35 3b 30  48 1b 5b 4b  ;0H.[K.[15;0H.[K
  59. < 0x00090: 1b 5b 31 36  3b 30 48 1b  5b 4b 1b 5b  31 37 3b 30  .[16;0H.[K.[17;0
  60. < 0x000a0: 48 1b 5b 4b  1b 5b 31 38  3b 30 48 1b  5b 4b 1b 5b  H.[K.[18;0H.[K.[
  61. < 0x000b0: 31 39 3b 30  48 1b 5b 4b  1b 5b 32 30  3b 30 48 1b  19;0H.[K.[20;0H.
  62. < 0x000c0: 5b 4b 1b 5b  32 31 3b 30  48 1b 5b 4b  1b 5b 32 32  [K.[21;0H.[K.[22
  63. < 0x000d0: 3b 30 48 1b  5b 4b 1b 5b  33 3b 32 37  48 20 20 20  ;0H.[K.[3;27H 
  64. < 0x000e0: 20 20 20 20  20 20 20 20  20 1b 5b 33  3b 32 37 48           .[3;27H
  65. < 0x000f0: 4c 6f 67 69  6e 20 53 63  72 65 65 6e  1b 5b 34 3b  Login Screen.[4;
  66. < 0x00100: 32 37 48 20  20 20 20 20  20 20 20 20  20 20 20 1b  27H            .
  67. < 0x00110: 5b 34 3b 32  37 48 3d 3d  3d 3d 3d 3d  3d 3d 3d 3d  [4;27H==========
  68. < 0x00120: 3d 3d 1b 5b  37 3b 32 34  48 20 20 20  20 20 20 20  ==.[7;24H     
  69. < 0x00130: 20 20 20 1b  5b 37 3b 32  34 48 55 73  65 72 20 4e     .[7;24HUser N
  70. < 0x00140: 61 6d 65 3a  1b 5b 39 3b  32 34 48 20  20 20 20 20  ame:.[9;24H   
  71. < 0x00150: 20 20 20 20  1b 5b 39 3b  32 34 48 50  61 73 73 77      .[9;24HPassw
  72. < 0x00160: 6f 72 64 3a  1b 5b 32 31  3b 30 48 41  63 74 69 6f  ord:.[21;0HActio
  73. < 0x00170: 6e 2d 3e 1b  5b 32 31 3b  31 38 48 45  64 69 74 1b  n->.[21;18HEdit.
  74. < 0x00180: 5b 32 31 3b  32 35 48 45  78 65 63 75  74 65 1b 5b  [21;25HExecute.[
  75. < 0x00190: 32 33 3b 30  48 41 72 72  6f 77 4b 65  79 2f 54 41  23;0HArrowKey/TA
  76. < 0x001a0: 42 2f 42 41  43 4b 3d 4d  6f 76 65 20  20 53 50 41  B/BACK=Move  SPA
  77. < 0x001b0: 43 45 3d 54  6f 67 67 6c  65 20 20 45  4e 54 45 52  CE=Toggle  ENTER
  78. < 0x001c0: 3d 53 65 6c  65 63 74 20  20 45 53 43  3d 42 61 63  =Select  ESC=Bac
  79. < 0x001d0: 6b 1b 5b 32  31 3b 31 38  48 1b 5b 37  6d 45 64 69  k.[21;18H.[7mEdi
  80. < 0x001e0: 74 1b 5b 30  6d 1b 5b 32  31 3b 31 38  48 1b 5b 30  t.[0m.[21;18H.[0
  81. < 0x001f0: 6d                                                  m
  82. > 0x00000: 52 32 54 0d  0a                                     R2T..
  83. > 0x00000: 62 6f 6e 6a  6f 75 72 0d  0a                        bonjour..
  84. > 0x00000: 1b                                                  .
  85. > 0x00000: 09                                                  .
  86. > 0x00000: 0d 0a                                               ..
  87. > 0x00000: 0d 0a                                               ..
  88. > 0x00000: 1a                                                  .
  89. > 0x00000: 6c 63 6c 69  0d 0a                                  lcli..
  90. > 0x00000: 52 32 54 0d  0a                                     R2T..
  91. > 0x00000: 63 6f 70 79  20 73 74 61  72 74 75 70  2d 63 6f 6e  copy startup-con
  92. > 0x00010: 66 69 67 20  74 66 74 70  3a 2f 2f 31  39 32 2e 31  fig tftp://192.1
  93. > 0x00020: 36 38 2e 32  33 2e 31 30  39 2f 48 50  2f 2d 36 2d  68.23.109/HP/-6-
  94. > 0x00030: 35 2d 32 30  31 33 2e 63  66 67 0d 0a  0d 0a 0d 0a  5-2013.cfg......
  95. > 0x00040: 0d 0a                                               ..
  96. < 0x00000: 45 64 69 74  1b 5b 37 6d  1b 5b 37 3b  33 36 48 20  Edit.[7m.[7;36H
  97. < 0x00010: 20 20 20 20  20 20 20 20  20 20 20 20  20 20 20 20                 
  98. < 0x00020: 20 20 20                                             
  99. < 0x00000: 1b 5b 37 3b  33 36 48 20  20 20 20 20  20 20 20 20  .[7;36H       
  100. < 0x00010: 20 20 20 20  20 20 20 20  20 20 20 20  1b 5b 37 3b              .[7;
  101. < 0x00020: 33 36 48 1b  5b 37 3b 33  36 48                     36H.[7;36H
  102. < 0x00000: 52                                                  R
  103. < 0x00000: 1b 5b 30 6d  1b 5b 30 3b  30 48 1b 5b  4b 1b 5b 31  .[0m.[0;0H.[K.[1
  104. < 0x00010: 3b 30 48 1b  5b 4b 1b 5b  32 3b 30 48  1b 5b 4b 1b  ;0H.[K.[2;0H.[K.
  105. < 0x00020: 5b 33 3b 30  48 1b 5b 4b  1b 5b 34 3b  30 48 1b 5b  [3;0H.[K.[4;0H.[
  106. < 0x00030: 4b 1b 5b 35  3b 30 48 1b  5b 4b 1b 5b  36 3b 30 48  K.[5;0H.[K.[6;0H
  107. < 0x00040: 1b 5b 4b 1b  5b 37 3b 30  48 1b 5b 4b  1b 5b 38 3b  .[K.[7;0H.[K.[8;
  108. < 0x00050: 30 48 1b 5b  4b 1b 5b 39  3b 30 48 1b  5b 4b 1b 5b  0H.[K.[9;0H.[K.[
  109. < 0x00060: 31 30 3b 30  48 1b 5b 4b  1b 5b 31 31  3b 30 48 1b  10;0H.[K.[11;0H.
  110. < 0x00070: 5b 4b 1b 5b  31 32 3b 30  48 1b 5b 4b  1b 5b 31 33  [K.[12;0H.[K.[13
  111. < 0x00080: 3b 30 48 1b  5b 4b 1b 5b  31 34 3b 30  48 1b 5b 4b  ;0H.[K.[14;0H.[K
  112. < 0x00090: 1b 5b 31 35  3b 30 48 1b  5b 4b 1b 5b  31 36 3b 30  .[15;0H.[K.[16;0
  113. < 0x000a0: 48 1b 5b 4b  1b 5b 31 37  3b 30 48 1b  5b 4b 1b 5b  H.[K.[17;0H.[K.[
  114. < 0x000b0: 31 38 3b 30  48 1b 5b 4b  1b 5b 31 39  3b 30 48 1b  18;0H.[K.[19;0H.
  115. < 0x000c0: 5b 4b 1b 5b  32 30 3b 30  48 1b 5b 4b  1b 5b 32 31  [K.[20;0H.[K.[21
  116. < 0x000d0: 3b 30 48 1b  5b 4b 1b 5b  32 32 3b 30  48 1b 5b 4b  ;0H.[K.[22;0H.[K
  117. < 0x000e0: 1b 5b 33 3b  32 37 48 20  20 20 20 20  20 20 20 20  .[3;27H       
  118. < 0x000f0: 20 20 20 1b  5b 33 3b 32  37 48 4c 6f  67 69 6e 20     .[3;27HLogin
  119. < 0x00100: 53 63 72 65  65 6e 1b 5b  34 3b 32 37  48 20 20 20  Screen.[4;27H 
  120. < 0x00110: 20 20 20 20  20 20 20 20  20 1b 5b 34  3b 32 37 48           .[4;27H
  121. < 0x00120: 3d 3d 3d 3d  3d 3d 3d 3d  3d 3d 3d 3d  1b 5b 37 3b  ============.[7;
  122. < 0x00130: 32 34 48 20  20 20 20 20  20 20 20 20  20 1b 5b 37  24H          .[7
  123. < 0x00140: 3b 32 34 48  55 73 65 72  20 4e 61 6d  65 3a 1b 5b  ;24HUser Name:.[
  124. < 0x00150: 39 3b 32 34  48 20 20 20  20 20 20 20  20 20 1b 5b  9;24H         .[
  125. < 0x00160: 39 3b 32 34  48 50 61 73  73 77 6f 72  64 3a 1b 5b  9;24HPassword:.[
  126. < 0x00170: 32 31 3b 30  48 41 63 74  69 6f 6e 2d  3e 1b 5b 32  21;0HAction->.[2
  127. < 0x00180: 31 3b 31 38  48 45 64 69  74 1b 5b 32  31 3b 32 35  1;18HEdit.[21;25
  128. < 0x00190: 48 45 78 65  63 75 74 65  1b 5b 32 33  3b 30 48 41  HExecute.[23;0HA
  129. < 0x001a0: 72 72 6f 77  4b 65 79 2f  54 41 42 2f  42 41 43 4b  rrowKey/TAB/BACK
  130. < 0x001b0: 3d 4d 6f 76  65 20 20 53  50 41 43 45  3d 54 6f 67  =Move  SPACE=Tog
  131. < 0x001c0: 67 6c 65 20  20 45 4e 54  45 52 3d 53  65 6c 65 63  gle  ENTER=Selec
  132. < 0x001d0: 74 20 20 45  53 43 3d 42  61 63 6b 1b  5b 30 6d 1b  t  ESC=Back.[0m.
  133. < 0x001e0: 5b 37 3b 33  36 48 20 20  20 20 20                  [7;36H   
  134. < 0x00000: 20 20 20 20  20 20 20 20  20 20 20 20  20 20 20 1b                 .
  135. < 0x00010: 5b 37 3b 33  36 48 52 1b  5b 37 6d 1b  5b 37 6d 1b  [7;36HR.[7m.[7m.
  136. < 0x00020: 5b 39 3b 33  36 48 20 20  20 20 20 20  20 20 20 20  [9;36H         
  137. < 0x00030: 20 20 20 20  20 20 20 20  20 20 1b 5b  39 3b 33 36            .[9;36
  138. < 0x00040: 48 20 20 20  20 20 20 20  20 20 20 20  20 20 20 20  H             
  139. < 0x00050: 20 20 20 20  20 1b 5b 39  3b 33 36 48  1b 5b 39 3b       .[9;36H.[9;
  140. < 0x00060: 33 36 48                                            36H
  141. < 0x00000: 2a                                                  *
  142. < 0x00000: 1b 5b 30 6d  1b 5b 30 3b  30 48 1b 5b  4b 1b 5b 31  .[0m.[0;0H.[K.[1
  143. < 0x00010: 3b 30 48 1b  5b 4b 1b 5b  32 3b 30 48  1b 5b 4b 1b  ;0H.[K.[2;0H.[K.
  144. < 0x00020: 5b 33 3b 30  48 1b 5b 4b  1b 5b 34 3b  30 48 1b 5b  [3;0H.[K.[4;0H.[
  145. < 0x00030: 4b 1b 5b 35  3b 30 48 1b  5b 4b 1b 5b  36 3b 30 48  K.[5;0H.[K.[6;0H
  146. < 0x00040: 1b 5b 4b 1b  5b 37 3b 30  48 1b 5b 4b  1b 5b 38 3b  .[K.[7;0H.[K.[8;
  147. < 0x00050: 30 48 1b 5b  4b 1b 5b 39  3b 30 48 1b  5b 4b 1b 5b  0H.[K.[9;0H.[K.[
  148. < 0x00060: 31 30 3b 30  48 1b 5b 4b  1b 5b 31 31  3b 30 48 1b  10;0H.[K.[11;0H.
  149. < 0x00070: 5b 4b 1b 5b  31 32 3b 30  48 1b 5b 4b  1b 5b 31 33  [K.[12;0H.[K.[13
  150. < 0x00080: 3b 30 48 1b  5b 4b 1b 5b  31 34 3b 30  48 1b 5b 4b  ;0H.[K.[14;0H.[K
  151. < 0x00090: 1b 5b 31 35  3b 30 48 1b  5b 4b 1b 5b  31 36 3b 30  .[15;0H.[K.[16;0
  152. < 0x000a0: 48 1b 5b 4b  1b 5b 31 37  3b 30 48 1b  5b 4b 1b 5b  H.[K.[17;0H.[K.[
  153. < 0x000b0: 31 38 3b 30  48 1b 5b 4b  1b 5b 31 39  3b 30 48 1b  18;0H.[K.[19;0H.
  154. < 0x000c0: 5b 4b 1b 5b  32 30 3b 30  48 1b 5b 4b  1b 5b 32 31  [K.[20;0H.[K.[21
  155. < 0x000d0: 3b 30 48 1b  5b 4b 1b 5b  32 32 3b 30  48 1b 5b 4b  ;0H.[K.[22;0H.[K
  156. < 0x000e0: 1b 5b 33 3b  32 37 48 20  20 20 20 20  20 20 20 20  .[3;27H       
  157. < 0x000f0: 20 20 20 1b  5b 33 3b 32  37 48 4c 6f  67 69 6e 20     .[3;27HLogin
  158. < 0x00100: 53 63 72 65  65 6e 1b 5b  34 3b 32 37  48 20 20 20  Screen.[4;27H 
  159. < 0x00110: 20 20 20 20  20 20 20 20  20 1b 5b 34  3b 32 37 48           .[4;27H
  160. < 0x00120: 3d 3d 3d 3d  3d 3d 3d 3d  3d 3d 3d 3d  1b 5b 37 3b  ============.[7;
  161. < 0x00130: 32 34 48 20  20 20 20 20  20 20 20 20  20 1b 5b 37  24H          .[7
  162. < 0x00140: 3b 32 34 48  55 73 65 72  20 4e 61 6d  65 3a 1b 5b  ;24HUser Name:.[
  163. < 0x00150: 39 3b 32 34  48 20 20 20  20 20 20 20  20 20 1b 5b  9;24H         .[
  164. < 0x00160: 39 3b 32 34  48 50 61 73  73 77 6f 72  64 3a 1b 5b  9;24HPassword:.[
  165. < 0x00170: 32 31 3b 30  48 41 63 74  69 6f 6e 2d  3e 1b 5b 32  21;0HAction->.[2
  166. < 0x00180: 31 3b 31 38  48 45 64 69  74 1b 5b 32  31 3b 32 35  1;18HEdit.[21;25
  167. < 0x00190: 48 45 78 65  63 75 74 65  1b 5b 32 33  3b 30 48 41  HExecute.[23;0HA
  168. < 0x001a0: 72 72 6f 77  4b 65 79 2f  54 41 42 2f  42 41 43 4b  rrowKey/TAB/BACK
  169. < 0x001b0: 3d 4d 6f 76  65 20 20 53  50 41 43 45  3d 54 6f 67  =Move  SPACE=Tog
  170. < 0x001c0: 67 6c 65 20  20 45 4e 54  45 52 3d 53  65 6c 65 63  gle  ENTER=Selec
  171. < 0x001d0: 74 20 20 45  53 43 3d 42  61 63 6b 1b  5b 30 6d 1b  t  ESC=Back.[0m.
  172. < 0x001e0: 5b 39 3b 33  36 48 20 20  20 20 20 20  20 20 20 20  [9;36H         
  173. < 0x001f0: 20 20 20 20  20 20 20 20  20 20 1b 5b  39 3b 33 36            .[9;36
  174. < 0x00200: 48 2a 1b 5b  37 6d 1b 5b  37 6d 1b 5b  37 3b 33 36  H*.[7m.[7m.[7;36
  175. < 0x00210: 48 20 20 20  20 20 20 20  20 20 20 20  20 20 20 20  H             
  176. < 0x00220: 20 20 20 20  20 1b 5b 37  3b 33 36 48  20 20 20 20       .[7;36H   
  177. < 0x00230: 20 20 20 20  20 20 20 20  20 20 20 20  20 20 20 20                 
  178. < 0x00240: 20 1b 5b 37  3b 33 36 48  52 1b 5b 37  3b 33 36 48   .[7;36HR.[7;36H


 
 
On voit bien qu'il tourne en rond et quand il écrit c'est tout d'un coup!!! :s
 

Reply

Marsh Posté le 06-05-2013 à 14:24:03    

Bon déja, si on décode la session initiale, c'est clair:

// Clean up des 23 premières lignes
esc[K  
esc[1;0H esc[K  
esc[2;0H esc[K  
esc[3;0H esc[K  
esc[4;0H esc[K  
esc[5;0H esc[K  
esc[6;0H esc[K  
esc[7;0H esc[K  
esc[8;0H esc[K  
esc[9;0H esc[K  
esc[10;0H esc[K  
esc[11;0H esc[K  
esc[12;0H esc[K  
esc[13;0H esc[K  
esc[14;0H esc[K  
esc[15;0H esc[K  
esc[16;0H esc[K  
esc[17;0H esc[K  
esc[18;0H esc[K  
esc[19;0H esc[K  
esc[20;0H esc[K  
esc[21;0H esc[K  
esc[22;0H esc[K  
// Ecriture du texte (parfois avec du blanc avant)
esc[3;27H          
esc[3;27HLogin Screen
esc[4;27H            
esc[4;27H============
esc[7;24H        
esc[7;24HUser Name:
esc[9;24H        
esc[9;24HPassword:
esc[21;0HAction->
esc[21;18HEdit
esc[21;25HExecute
esc[23;0HArrowKey/TAB/BACK=Move  SPACE=Toggle  ENTER=Select  ESC=Back
// Positionnement en ligne 21, caractère 18
esc[21;18H
// inverse video
esc[7m
Edit
// RAZ des attributs caractère
esc[0m
// Positionnement en ligne 21, caractère 18
esc[21;18H
// RAZ des attributs caractère
esc[0m


 
A+,


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

Marsh Posté le 06-05-2013 à 14:33:47    

Faudrait voir ou on en est avec

Code :
  1. sub BackupLinkSwitch($$)
  2. {
  3.    my ($LK, $backup) = (shift, shift);
  4.  
  5.    say $LK->{host};
  6.  
  7.    my $session= new Net::Telnet (Timeout=>5, Telnetmode=>0);
  8.    $session->open($LK->{host});   <=connexion en telnet
  9.    $session->print('') if ($session->waitfor('/ESC=Back/') == 1);    
  10.    print "   login : ";
  11.  
  12.    $session->print($LK->{log}) if ($session->waitfor('/ESC=Back/') == 1);  
  13.    $session->put($LK->{pass}) if ($session->waitfor('/ESC=Back/') == 1);  
  14.    $session->put("\e" ) if ($session->waitfor('/ESC=Back/') == 1);    
  15.    $session->put("\t" ) if ($session->waitfor('/ESC=Back/') == 1);   # put("\t" ) ou print("\t" ) si manuellement il y a retour chariot ensuite
  16.    $session->print('') if ($session->waitfor('/ESC=Back/') == 1);  # tester aussi sans le if éventuellement
  17.    $session->print('') if ($session->waitfor('/ESC=Back/') == 1);  
  18.    $session->put("\cZ" ) if ($session->waitfor('/System Configuration Menu/') == 1);  # controle+Z pour accéder a la ligne de commande
  19.    # déjace serait bien si on en arrive la
  20.    $session->print('lcli')   if ($session->waitfor('/\>/') == 1); # Je pense qu'il faut un \ devant car < a une interpretation dans une regexp
  21.    $session->print($LK->{log}) if ($session->waitfor('/User Name:/') == 1); # Euhhh, a nouveau??
  22.  
  23.    say "Ok";  <= a partir de la on peut envoyer la commande!!
  24.    $session->cmd("copy startup-config tftp ".$backup->{host}.' '.$backup->{dir2}.'/'.$HP->{host}.'-'.today().".cfg\n\n\n" );
  25.    $session->close;
  26. }

Si on bloque au niveau des  
    $session->print($LK->{log}) if ($session->waitfor('/ESC=Back/') == 1);    
    $session->put($LK->{pass}) if ($session->waitfor('/ESC=Back/') == 1);  
il faudra tacher de dumper une vraie session pour voir ce qui est effectivement envoyé par le terminal.
A+,


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

Marsh Posté le 06-05-2013 à 14:43:00    

Alors je crois qeu j'ai trouver!!!
Enfaite le programme allait trop vite pour le switch!!
 
Donc j'ai rajouté des tempo a différent endroit stratégique.  
 
Et bim la config est la!! :D je poste tout a l'heure le prog!

Reply

Marsh Posté le 06-05-2013 à 14:47:34    

[:theyellowman]  
A+,


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

Marsh Posté le 06-05-2013 à 15:06:50    

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.  
  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', dir3 => 'linksys'};
  18. my $cisco = {host=> undef, log => 'R2T', pass => 'bonjour', enapass=> 'cisco'};
  19. my $HP = {host => undef, log => 'R2T', pass => 'bonjour'};
  20. my $LK = {host => undef, log => 'R2T', pass => 'bonjour'};
  21.  
  22. open(my $fh, '<', '/var/lib/rancid/all/router.db');
  23. foreach (<$fh> ) {
  24. if (/([0-9.]{1,})\:linksys/)
  25. {      
  26. $LK->{host}=$1;
  27. &BackupLinkSwitch($LK, $backup);
  28. }
  29.  
  30.             }
  31.    sub BackupLinkSwitch($$)
  32.    {
  33.       my ($LK, $backup) = (shift, shift);
  34.    
  35.       say $LK->{host};
  36.    
  37.       my $session= new Net::Telnet (Timeout=>5, Telnetmode=>0);
  38.     
  39.     $session->dump_log("logit.txt" );
  40.       $session->open($LK->{host});  sleep (1);
  41.       $session->print('') if ($session->waitfor('/Execute/') == 1);    
  42.       print "   login : ";
  43.     sleep (1);
  44.       $session->print($LK->{log});
  45. sleep (1);
  46.       $session->print($LK->{pass});
  47. sleep (1);
  48.       $session->put("\e" );  
  49. sleep (1);
  50.       $session->put("\t" );
  51.       $session->put("\n" );
  52. sleep (1);
  53.       $session->put("\n" );  
  54.       $session->put("\cZ" )
  55. sleep (1);
  56.       $session->print('lcli');
  57. sleep (2);
  58.       $session->print($LK->{log}) if ($session->waitfor('/User Name:/') == 1);
  59.         $session->print($LK->{pass}) if ($session->waitfor('/Password:/') == 1);
  60.       say "Ok";
  61. sleep (1);
  62.       $session->cmd("copy startup-config tftp://".$backup->{host}.'/'.$backup->{dir3}.'/'.$LK->{host}.'-'.today().".cfg\n\n\n" ) if ($session->waitfor('/#/') == 1);
  63.      
  64. $session->close;
  65.    }


 
Donc comme vous pouvez le constater j'ai rajouter des tempo, et puis bah ça marche. j'ai rajouter aussi des waitfor.  
 
Merci bien de votre aide,  :jap:  mon gros programme de récupération de switch est normalement fini. Il faut que je le test en intégralité pour voir si il n'y pas de bug!! :D

Reply

Marsh Posté le 06-05-2013 à 15:06:50   

Reply

Marsh Posté le 06-05-2013 à 15:23:38    

Ah oui euh j'ai encore besoin de vous enfaite!! ^^
 
Comment pourrais-je faire pour que lorsque qu'un switch ne réponde pas ou que la commande ne passe pas, Il ne plante pas mon programme mais qu'il passe à l'autre ligne (autre adresse IP)?
c'est possible?
 
le programme complet:
 

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.  
  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', dir3 => 'linksys'};
  18. my $cisco = {host=> undef, log => 'R2T', pass => 'bonjour', enapass=> 'cisco'};
  19. my $HP = {host => undef, log => 'R2T', pass => 'bonjour'};
  20. my $LK = {host => undef, log => 'R2T', pass => 'bonjour'};
  21.  
  22. open(my $fh, '<', '/var/lib/rancid/all/router.db');
  23. foreach (<$fh> ) {
  24. if (/([0-9.]{1,})\:cisco/)
  25. {      
  26. $cisco->{host}=$1;
  27. &BackupCiscoSwitch($cisco, $backup);
  28. }
  29.  
  30. elsif (/([0-9.]{1,})\:hp/)
  31. {
  32.   $HP->{host} = $1;
  33.   &BackupHpSwitch($HP, $backup);
  34. }
  35. elsif (/([0-9.]{1,})\:linksys/)
  36. {      
  37. $LK->{host}=$1;
  38. &BackupLinkSwitch($LK, $backup);
  39. }
  40.  
  41. }
  42. close($fh);
  43. #backup pour switch cisco
  44. sub BackupCiscoSwitch($$) {
  45.  my ($cisco, $backup)  = (shift, shift);
  46. say $cisco->{host};
  47.  
  48.  my $session = Net::Telnet::Cisco->new(Host => $cisco->{host});
  49.  print "   login : ";
  50.  if ($session->login( $cisco->{log}, $cisco->{pass}) ) {
  51.       print "Ok\n";
  52.        # Enable mode
  53.        print "   enable mode : ";
  54.  
  55.        if ($session->enable($cisco->{enapass}) ) {
  56.                print "Ok\n";
  57.                $session->cmd("copy run tftp://".$backup->{host}.'/'.$backup->{dir}.'/'.$cisco->{host}.'-'.today().".cfg\n\n\n" );
  58.                $session->close;
  59.                }
  60.                else
  61.                {
  62.                print "Failed\n";
  63.                }
  64.        }
  65.        else
  66.        {
  67.        print "Failed\n";
  68.        }
  69.  
  70. }
  71. #backup pour switch HP procurve
  72. sub BackupHpSwitch ($$) {
  73. my ($HP, $backup)  = (shift, shift);
  74. say $HP->{host};
  75.  
  76. my $session = new Net::Telnet( Timeout =>10, Telnetmode => 0);
  77. $session->open($HP->{host});
  78. $session->print('') if $session->waitfor('/Press any key to continue/') == 1;
  79. print "   login : ";
  80.     #$session->dump_log("logit.txt" );
  81.  $session->print($HP->{log}) if ($session->waitfor('/Username:/') == 1);
  82.  $session->print($HP->{pass}) if ($session->waitfor('/Password:/') == 1);
  83.   say "Ok";
  84.  
  85.  $session->cmd("copy running-config tftp ".$backup->{host}.' '.$backup->{dir2}.'/'.$HP->{host}.'-'.today().".cfg\n\n\n" );
  86.   $session->close;
  87. }
  88. #bachup pour switch Linksys
  89. sub BackupLinkSwitch($$)
  90.    {
  91.       my ($LK, $backup) = (shift, shift);
  92.    
  93.       say $LK->{host};
  94.    
  95.       my $session= new Net::Telnet (Timeout=>5, Telnetmode=>0);
  96.     
  97.     #$session->dump_log("logit.txt" );
  98.       $session->open($LK->{host});  sleep (1);
  99.       $session->print('') if ($session->waitfor('/Execute/') == 1);    
  100.       print "   login : ";
  101.     sleep (1);
  102.       $session->print($LK->{log});  
  103. sleep (1);
  104.       $session->print($LK->{pass});
  105. sleep (1);
  106.       $session->put("\e" );  
  107. sleep (1);
  108.       $session->put("\t" );
  109.       $session->put("\n" );
  110. sleep (1);
  111.       $session->put("\n" );  
  112.       $session->put("\cZ" );
  113. sleep (1);
  114.       $session->print('lcli');
  115. sleep (2);
  116.       $session->print($LK->{log}) if ($session->waitfor('/User Name:/') == 1);
  117.         $session->print($LK->{pass}) if ($session->waitfor('/Password:/') == 1);
  118.       say "Ok";
  119. sleep (1);
  120.       $session->cmd("copy startup-config tftp://".$backup->{host}.'/'.$backup->{dir3}.'/'.$LK->{host}.'-'.today().".cfg\n\n\n" ) if ($session->waitfor('/#/') == 1);
  121.      
  122. $session->close;
  123.    }


Reply

Marsh Posté le 06-05-2013 à 16:25:41    

C'est un jeu de piste:

Citation :

Errors such as timing-out are handled according to the error mode action. The default action is to print an error message to standard error and have the program die. See the errmode() method for more information.


Citation :

error - perform the error mode action
This method concatenates @msgs into a string and places it in the object as the error message. Also see errmsg(). It then performs the error mode action. Also see errmode().


Citation :

errmode - define action to be performed on error
This method gets or sets the action used when errors are encountered using the object. The first calling sequence returns the current error mode. The second calling sequence sets it to $mode and returns the previous mode. Valid values for $mode are "die" (the default), "return", a coderef, or an arrayref.
When mode is "return" then the method generating the error places an error message in the object and returns an undefined value in a scalar context and an empty list in list context. The error message may be obtained using errmsg().


Bref, il va falloir mettre les sessions avec un errmode a return
A+,


Message édité par gilou le 06-05-2013 à 16:36:41

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

Marsh Posté le 06-05-2013 à 17:02:48    

Je vous remercie de votre réponse sa marche!!
 
j'ai rajouter errmode => sub {&error}); dans chaque new Net::Telnet()  
et donc j'ai mit une ptite phrase pour prévenir.  
 
sub error {
print "connexion échouée\n";
}
 
Mais enfaite j'ai toujours une petite erreur bizarre dans le script, c'est pour les config HP, il me les récupères bien sur le serveur TFTP mais dès qu'il l'a récupéré il me sort un command timed-out at test3.pl line 85
Je comprend pas pourquoi.  :??:

Reply

Marsh Posté le 06-05-2013 à 18:06:04    

Citation :

This method sends the command $string, and reads the characters sent back by the command up until and including the matching prompt.


Peut être que le prompt attendu est différent de celui qui est envoyé.
Un dump devrait permettre de voir quel prompt est envoyé après exécution de la commande.
A+,


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

Marsh Posté le 07-05-2013 à 09:42:06    

Oui c'est bien se que je pensais, mais se sont les même d'après le dump.  
 

Code :
  1. copy running-con
  2. > 0x00010: 66 69 67 20  74 66 74 70  20 31 39 32  2e 31 36 38  fig tftp 192.168
  3. > 0x00020: 2e 32 33 2e  31 30 39 20  48 50 2f 31  30 2e 32 31  .23.109 HP/10.21
  4. > 0x00030: 2e 38 2e 34  2d 37 2d 35  2d 32 30 31  33 2e 63 66 .8.4-7-5-2013.cf
  5. > 0x00040: 67 0d 0a 0d  0a 0d 0a 0d  0a                      g........
  6. < 0x00000: 1b 5b 32 34  3b 31 30 48  63 6f 70 79  20 72 75 6e  .[24;10Hcopy run
  7. < 0x00010: 6e 69 1b 5b  32 34 3b 31  30 48 1b 5b  3f 32 35 68  ni.[24;10H.[?25h
  8. < 0x00020: 1b 5b 32 34  3b 32 30 48  1b 5b 32 34  3b 32 30 48  .[24;20H.[24;20H
  9. < 0x00030: 6e 67 2d 63  6f 6e 66 69  67 20 1b 5b  32 34 3b 32 ng-config .[24;2
  10. < 0x00040: 30 48 1b 5b  3f 32 35 68  1b 5b 32 34  3b 33 30 48  0H.[?25h.[24;30H
  11. < 0x00050: 1b 5b 32 34  3b 33 30 48  74 66 74 70  20 31 39 32  .[24;30Htftp 192
  12. < 0x00060: 2e 31 1b 5b  32 34 3b 33  30 48 1b 5b  3f 32 35 68  .1.[24;30H.[?25h
  13. < 0x00070: 1b 5b 32 34  3b 34 30 48  1b 5b 32 34  3b 34 30 48  .[24;40H.[24;40H
  14. < 0x00080: 36 38 2e 32  33 2e 31 30  39 20 1b 5b  32 34 3b 34  68.23.109 .[24;4
  15. < 0x00090: 30 48 1b 5b  3f 32 35 68  1b 5b 32 34  3b 35 30 48  0H.[?25h.[24;50H
  16. < 0x000a0: 1b 5b 32 34  3b 35 30 48  48 50 2f 31  30 2e 32 31  .[24;50HHP/10.21
  17. < 0x000b0: 2e 38 1b 5b  32 34 3b 35  30 48 1b 5b  3f 32 35 68  .8.[24;50H.[?25h
  18. < 0x000c0: 1b 5b 32 34  3b 36 30 48  1b 5b 32 34  3b 36 30 48  .[24;60H.[24;60H
  19. < 0x000d0: 2e 34 2d 37  2d 35 2d 32  30 31 1b 5b  32 34 3b 36  .4-7-5-201.[24;6
  20. < 0x000e0: 30 48 1b 5b  3f 32 35 68  1b 5b 32 34  3b 37 30 48  0H.[?25h.[24;70H
  21. < 0x000f0: 1b 5b 32 34  3b 37 30 48  33 2e 63 66  67 1b 5b 32  .[24;70H3.cfg.[2
  22. < 0x00100: 34 3b 37 30  48 1b 5b 3f  32 35 68 1b  5b 32 34 3b  4;70H.[?25h.[24;
  23. < 0x00110: 37 35 48 1b  5b 32 34 3b  30 48 1b 45  1b 5b 32 34  75H.[24;0H.E.[24
  24. < 0x00120: 3b 31 48 1b  5b 32 34 3b  37 35 48 1b  5b 32 34 3b  ;1H.[24;75H.[24;
  25. < 0x00130: 31 48 1b 5b  32 4b 1b 5b  32 34 3b 31  48 1b 5b 3f  1H.[2K.[24;1H.[?
  26. < 0x00140: 32 35 68 1b  5b 32 34 3b  31 48 1b 5b  31 3b 32 34  25h.[24;1H.[1;24
  27. < 0x00150: 72 1b 5b 32  34 3b 31 48                            r.[24;1H
  28. < 0x00000: 0d 30 30 30  32 39 4b 20                            .00029K
  29. < 0x00000: 1b 5b 31 3b  32 34 72 1b  5b 32 34 3b  31 48 1b 5b  .[1;24r.[24;1H.[
  30. < 0x00010: 32 34 3b 31  48 1b 5b 32  4b 1b 5b 32  34 3b 31 48  24;1H.[2K.[24;1H
  31. < 0x00020: 1b 5b 3f 32  35 68 1b 5b  32 34 3b 31  48 1b 5b 32  .[?25h.[24;1H.[2
  32. < 0x00030: 34 3b 31 48  43 32 31 54  30 30 38 23  20 1b 5b 32  4;1HC21T008# .[2


 
Bizarre non?  :heink:

Reply

Marsh Posté le 07-05-2013 à 11:28:43    

Bon non:
Les lignes 1-5, c'est ce que vous envoyez
les lignes 7-28, c'est ce qu'il envoie pour afficher la commande (une sorte de ACK je pense)
 

(Pour simplifier, j'utilise les valeurs de lignes et colonnes données, mais en principoe, tout est décalé de 1, les numérotations commençant à 0)
esc[24;10Hcopy runni  // on va a la ligne 24, caractère 10 et on écrit "copy runni"
esc[24;10H                // on revient au début de la position d'écriture
esc[?25h                   // Text Cursor enable (pourquoi?)
 
                              // on répète ce genre de manip a diverses reprises
                              // on progresse de 10 caractères par 10 caractères
esc[24;20H
esc[24;20Hng-config  
esc[24;20H
esc[?25h
 
esc[24;30H
esc[24;30Htftp 192.1
esc[24;30H
esc[?25h
 
esc[24;40H
esc[24;40H68.23.109  
esc[24;40H
esc[?25h
 
esc[24;50H
esc[24;50HHP/10.21.8
esc[24;50H
esc[?25h
 
esc[24;60H
esc[24;60H.4-7-5-201
esc[24;60H
esc[?25h
 
esc[24;70H
esc[24;70H3.cfg
esc[24;70H
esc[?25h
 
esc[24;75H
esc[24;0H
escE           // aller a la Next Line tout ce paté a l'air assez inutile
esc[24;1H
esc[24;75H
 
esc[24;1H     // On se met au début de la ligne 24
esc[2K         // On efface tout le contenu de la ligne      
esc[24;1H    // On se met au début de la ligne24
esc[?25h     // Text Cursor enable  
esc[24;1H     //On se met au début de la ligne24
esc[1;24r     // on définit la scrolling region comme celle des lignes 1-24
esc[24;1H     // On se met au début de la ligne 24


 
 
Je me demande si ce n'est pas ce qui figure à la ligne 30 ("\n00029k " ) qui est le résultat de la commande (et qui indiquerait que son traitement est terminé)
 
A+,


Message édité par gilou le 07-05-2013 à 11:40:04

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

Marsh Posté le 07-05-2013 à 13:06:04    

Oui vous avez surement raison, mais alors comment peut on exploiter cette réponse qui ne signifie pas grand chose. J'ai chercher sur le net 00029k hp et cela corresponderai  à une version OS du switch...aucun rapport.  
 
Il faut ajouter quelques choses au script?  

Reply

Marsh Posté le 07-05-2013 à 13:29:10    

Et en faisant comme pour le Linksys?
$session->cmd("copy running-config tftp ".$backup->{host}.' '.$backup->{dir2}.'/'.$HP->{host}.'-'.today().".cfg\n\n\n" )  if ($session->waitfor('/#/') == 1);
vu qu'il y a l'air d'y avoir un hash dans la réponse du routeur HP (C21T008#)
EDIT: Manque les :// dans la commande après le tftp, non?
 
A+,


Message édité par gilou le 07-05-2013 à 13:30:32

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

Marsh Posté le 07-05-2013 à 14:34:58    

Alors oui j'avais penser à ça, mais manque de bol ça me donne exactement le même chose!!!  
Et sinon la commande est bonne . Il ne faut pas mettre de :// .... pour HP, surement parce qu'il ne voulait pas faire comme les autres!!  :sarcastic:  
 
Et bien je crois que je vais devoir laisser comme cela! Du moment que ça marche, je reviendrais dessus dans quelques jours peut-être. Car la j'ai un autre problème de script en expect cette fois-ci , impossible de faire "echappe" mais j'ai crus savoir que se n'etait pas votre domaine.  :ange:  
 
Merci de votre aide en tout cas!  
Vous êtes bien  caler en Perl!!
 
Kenavo  :hello:  

Reply

Sujets relatifs:

Leave a Replay

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