Utilisation de Net::Telnet pour se connecter aux switch HP - Perl - Programmation
Marsh Posté le 26-04-2013 à 21:04:04
Bonjour
Ce code ne m'a pas l'air fautif à première vue.
J'aurais écrit le code un peu différemment:
Code :
|
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 |
A+,
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+,
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 :
|
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 :
|
Merci encore de votre aide!!
PA
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+,
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 :
|
Alors ducoup j'ai voulu rajouter une ligne où un caractère est rentrer
Code :
|
Mais cela ne marche pas même si j'ai plus le même problème maintenant, ça marque:
Code :
|
(j'ai augmenter le time-out rien y change.)
je sens qu'on tient le bon bout!!
Merci de ton aide!!
PA
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+,
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 :
|
Il y surement une regex à mettre quelque par!!
j'ai esseyerr ça sans succès:
Code :
|
et ça mais inutile aussi:
Code :
|
Une petite idée?
Merci
PA
Marsh Posté le 30-04-2013 à 12:12:20
C'est bon enfaite j'ai reussi a me connecte!!!
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 :
|
Peut-être un pb de connection!!
Merci
PA
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+,
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+,
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
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
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 :
|
Merci bcp gilou d'avoir prit du temps pour m'aider!!
PA
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+,
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:
Merci de votre aide.
PA
Message édité par pierra56 le 26-04-2013 à 17:00:27