[R] Récupérer des réponses à des commandes telnet
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[R] Récupérer des réponses à des commandes telnet
Bonjour,
J'ai un besoin un peu particulier, qui est de trouver sur quel switch est brassé un serveur connaissant sa mac_adress.
En entrée je fournis la mac_adress et en sortie j'aimerais le port et le switch sur lequel il est connecté.
Pour info j'ai une cascade de switch trunkés.
Le principe : je me connecte au premier switch en telnet, je fais un "show mac_address", là j'aimerais que autoIT analyse la réponse, soit c'est un trunk et je suis sur le mauvais switch et je passe sur le switch suivant, soit c'est un port et autoIT quitte en me donnant le port.
Déjà est-ce possible de récupérer les réponses à des commandes telnet ?
Quelle serait la fonction adaptée à mon besoin ?
Si vous avez la gentillesse de me scripter la partie ou j'aimerais récupérer les infos ça serait sympa de votre part.
Merci par avance pour votre aide.
Alex
J'ai un besoin un peu particulier, qui est de trouver sur quel switch est brassé un serveur connaissant sa mac_adress.
En entrée je fournis la mac_adress et en sortie j'aimerais le port et le switch sur lequel il est connecté.
Pour info j'ai une cascade de switch trunkés.
Le principe : je me connecte au premier switch en telnet, je fais un "show mac_address", là j'aimerais que autoIT analyse la réponse, soit c'est un trunk et je suis sur le mauvais switch et je passe sur le switch suivant, soit c'est un port et autoIT quitte en me donnant le port.
Déjà est-ce possible de récupérer les réponses à des commandes telnet ?
Quelle serait la fonction adaptée à mon besoin ?
Si vous avez la gentillesse de me scripter la partie ou j'aimerais récupérer les infos ça serait sympa de votre part.
Merci par avance pour votre aide.
Alex
Modifié en dernier par s4nji le mar. 05 oct. 2010 12:47, modifié 3 fois.
Re: [..] Récupérer des réponses à des commandes telnet
Bonjour,
J'ai été confronté a des problèmes similaires, et j'utilise AutoIt et plink (putty en ligne de commande) pour me connecter par telnet, et traiter le résultat des commmandes.
Tu peux voir mon post ici: http://www.autoitscript.fr/forum/viewto ... f=6&t=5752
Je viens de voir dans un autre post qu'il y avait une DLL d'Extraputy, il y a peut-être moyen de l'utiliser.
J'ai été confronté a des problèmes similaires, et j'utilise AutoIt et plink (putty en ligne de commande) pour me connecter par telnet, et traiter le résultat des commmandes.
Tu peux voir mon post ici: http://www.autoitscript.fr/forum/viewto ... f=6&t=5752
Je viens de voir dans un autre post qu'il y avait une DLL d'Extraputy, il y a peut-être moyen de l'utiliser.
Un clavier azerty en vaut deux.
Re: [..] Récupérer des réponses à des commandes telnet
Je viens de regarder ton script et c'est chaud chaud chaud !
J'ai essayé de comprendre un peu le principe mais la fonction sendExpect ne colle pas avec un procurve j'ai l'impression. Au login des switch procurve y'a plein d'infos qui s'affichent alors c'est compliqué de dire ce qui est "expected" dans la fonction.
Il n'y a pas une méthode plus simple ?
J'ai essayé de comprendre un peu le principe mais la fonction sendExpect ne colle pas avec un procurve j'ai l'impression. Au login des switch procurve y'a plein d'infos qui s'affichent alors c'est compliqué de dire ce qui est "expected" dans la fonction.
Il n'y a pas une méthode plus simple ?
Re: [..] Récupérer des réponses à des commandes telnet
La fonction sendExpect colle avec le texte que tu souhaites.
Tu aurais un log de connexion a un procurve ?
Tu aurais un log de connexion a un procurve ?
Un clavier azerty en vaut deux.
Re: [..] Récupérer des réponses à des commandes telnet
Alors rectification, oui avec quelques modifications j'ai réussi à me connecter au switch et a envoyer une ligne de commande telnet.
Je pense pouvoir me débrouiller pour la suite avec des "If je vois tel terme dans les 3 secondes, je fais ça, elseif je fais ça sinon je fais ça" mais j'ai pas trouvé le moyen de récupérer la réponse et la mettre dans une variable.
En tout cas un grand merci pour ton aide
Je pense pouvoir me débrouiller pour la suite avec des "If je vois tel terme dans les 3 secondes, je fais ça, elseif je fais ça sinon je fais ça" mais j'ai pas trouvé le moyen de récupérer la réponse et la mettre dans une variable.
En tout cas un grand merci pour ton aide
Re: [R] Récupérer des réponses à des commandes telnet
Tu peux utiliser $expectOutBuffer
Tu lances ta commande, tu attends le prompt, et dans $expectOutBuffer tu auras le résultat de la commande.
Ensuite tu peux faire un stringregExp pour chercher ton adresse MAC dans cette chaine de caractères.
► Afficher le texte
Ensuite tu peux faire un stringregExp pour chercher ton adresse MAC dans cette chaine de caractères.
Un clavier azerty en vaut deux.
Re: [R] Récupérer des réponses à des commandes telnet
Effectivement le $expectOutBuffer me semble bien s'il récupère le résultat de la requête telnet.
Le résultat de ma commande donne :
SWITCH04-48# show mac-address a4badb967461
Status and Counters - Address Table - a4badb-967461
MAC Address : a4badb-967461
Located on Port : 1
J'aimerais récupérer le numéro du port qui est 1 dans l'exemple, mais qui changera en fonction de l'adresse Mac entrée. Je pourrais récupérer les 2 derniers caractères du expectoutbuffer par exemple ?
Tu pourrais m'écrire la commande exacte ?
Encore merci !
Le résultat de ma commande donne :
SWITCH04-48# show mac-address a4badb967461
Status and Counters - Address Table - a4badb-967461
MAC Address : a4badb-967461
Located on Port : 1
J'aimerais récupérer le numéro du port qui est 1 dans l'exemple, mais qui changera en fonction de l'adresse Mac entrée. Je pourrais récupérer les 2 derniers caractères du expectoutbuffer par exemple ?
Tu pourrais m'écrire la commande exacte ?
Encore merci !
Re: [..] Récupérer des réponses à des commandes telnet
Voici ce que je ferais :
► Afficher le texte
Un clavier azerty en vaut deux.
Re: [..] Récupérer des réponses à des commandes telnet
J'ai remplacé ton $texte par $expectOutBuffer qui contient le texte mais ça n'affiche rien.
Et le port n'est pas limité à 1 à 9 mais ça peut aller jusqu'à 48.
Argh j'y suis presque le reste fonctionne
Et le port n'est pas limité à 1 à 9 mais ça peut aller jusqu'à 48.
Argh j'y suis presque le reste fonctionne
- Jerome
- Niveau 9

- Messages : 661
- Enregistré le : mar. 07 avr. 2009 08:35
- Localisation : Picardie
- Status : Hors ligne
Re: [..] Récupérer des réponses à des commandes telnet
Coucou,
je pense que ce code fonctionnerai mieux dans ton cas.
SWITCH04-48# étant l'interface connection avec telnet, il n'est pas necessaire de l'écrire dans le string.
Jérôme
je pense que ce code fonctionnerai mieux dans ton cas.
SWITCH04-48# étant l'interface connection avec telnet, il n'est pas necessaire de l'écrire dans le string.
Code : Tout sélectionner
$text = "show mac-address a4badb967461 Status and Counters - Address Table - a4badb-967461 MAC Address : a4badb-967461 Located on Port : 1"
$array = StringRegExp($text, 'Located on Port : ([0-48]+)', 1)
If Ubound($array) <> 0 Then
ConsoleWrite("Port:"&$array[0]& @CRLF)
Else
ConsoleWrite("No port found."& @CRLF)
EndIfJérôme
Re: [..] Récupérer des réponses à des commandes telnet
Je ne comprends pas ce $texte ="show mac-address a4badb967461 Status and Counters - Address Table - a4badb-967461 MAC Address : a4badb-967461 Located on Port : 1"
Ce texte est dans $expectOutBuffer et ce n'est pas toujours located on port 1
Je dois remplacer $texte par $expectOutBuffer dans votre code ?

Ce texte est dans $expectOutBuffer et ce n'est pas toujours located on port 1
Je dois remplacer $texte par $expectOutBuffer dans votre code ?
-
ani
- Niveau 11

- Messages : 1826
- Enregistré le : lun. 23 juil. 2007 12:31
- Localisation : Bureau
- Status : Hors ligne
Re: [..] Récupérer des réponses à des commandes telnet
Salut,
l'exemple fournis par jerome & manwe.
le texte ($Text) est juste un exemple, çà doit correspondre à t'a sortie de la commande telnet
Graçe à cette expression régulière ($StringRegExp), on recherche dans la sortie le terme Located on port : suivit de chiffre compris entre 0 à 48,celui-ci te retournera uniquement le port.
voilàvoilà en espérant t'avoir eclaircie.
Bonne continuation
l'exemple fournis par jerome & manwe.
le texte ($Text) est juste un exemple, çà doit correspondre à t'a sortie de la commande telnet
Code : Tout sélectionner
$array = StringRegExp($text, 'Located on Port : ([0-48]+)', 1)
If Ubound($array) <> 0 Then
ConsoleWrite("Port:"&$array[0]& @CRLF)
Else
ConsoleWrite("No port found."& @CRLF)
EndIfvoilàvoilà en espérant t'avoir eclaircie.
Bonne continuation
Re: [..] Récupérer des réponses à des commandes telnet
Oui c'est plus clair merci donc mon code c'est celui-là :
Je teste ça de suite ! =)
Code : Tout sélectionner
$array = StringRegExp($expectOutBuffer, 'Located on Port : ([0-48]+)', 1)
If Ubound($array) <> 0 Then
ConsoleWrite("Port:"&$array[0]& @CRLF)
Else
ConsoleWrite("No port found."& @CRLF)
EndIfRe: [..] Récupérer des réponses à des commandes telnet
Il faut effectivement remplacer $text par $expectOutBuffer dans ton script qui fait le telnet.
je me demande si le problème ne peut pas venir des retours à la ligne.
je me demande si le problème ne peut pas venir des retours à la ligne.
Un clavier azerty en vaut deux.
Re: [..] Récupérer des réponses à des commandes telnet
Ca marche peut-être mais rien ne s'affiche ^^
Y'a pas un "msgbox(4096,"Port",$array,10)" à faire après ?
Ou une autre commande ?
Encore merci
Y'a pas un "msgbox(4096,"Port",$array,10)" à faire après ?
Ou une autre commande ?
Encore merci
- Jerome
- Niveau 9

- Messages : 661
- Enregistré le : mar. 07 avr. 2009 08:35
- Localisation : Picardie
- Status : Hors ligne
Re: [..] Récupérer des réponses à des commandes telnet
Coucou,
La fonction ConsoleWrite écrit le résultat dans la fenêtre SciTE.
Si vous n'êtes pas familier avec cette commande, vous pouvez toujours remplacer par une MsgBox.
Bien que le ConsoleWrite soit plus pratique.
Jérôme
La fonction ConsoleWrite écrit le résultat dans la fenêtre SciTE.
Si vous n'êtes pas familier avec cette commande, vous pouvez toujours remplacer par une MsgBox.
Bien que le ConsoleWrite soit plus pratique.
Jérôme
Modifié en dernier par Jerome le ven. 01 oct. 2010 10:34, modifié 1 fois.
Re: [..] Récupérer des réponses à des commandes telnet
j'ai un message d'erreur :
MsgBox(4096,"Resultat","Port:"&$array[0]&@CRLF)
MsgBox(4096,"Resultat","Port:"&$array^ERROR
Error : Subscript used with non-Array variable
Mon code :

MsgBox(4096,"Resultat","Port:"&$array[0]&@CRLF)
MsgBox(4096,"Resultat","Port:"&$array^ERROR
Error : Subscript used with non-Array variable
Mon code :
Code : Tout sélectionner
If $result = 1 Then
$array = StringRegExp($expectOutBuffer, 'Located on Port : ([0-48]+)', 1)
If Ubound($array) <> 0 Then
MsgBox(4096,"Resultat", "Port:"&$array[0]& @CRLF)
Else
MsgBox(4096,"Resultat", "Port:"&$array[0]& @CRLF)
EndIfRe: [..] Récupérer des réponses à des commandes telnet
Dans le else, si la taille de ton tableau est nulle, tu ne peux pas afficher $array[0]
Comme le dis Jérome, Consolewrite est assez pratique :
dans Scite tu fais F5, et consolewrite affiche ton texte dans la partie basse de la fenêtre, là ou tu vois aussi les alarmes.
Ca t'évites de cliquer sur tes 50 msgBox, et tu peux les laisser dans ton code pour debuguer, sans que ca apparaisse a l'utilisateur final.
Comme le dis Jérome, Consolewrite est assez pratique :
dans Scite tu fais F5, et consolewrite affiche ton texte dans la partie basse de la fenêtre, là ou tu vois aussi les alarmes.
Ca t'évites de cliquer sur tes 50 msgBox, et tu peux les laisser dans ton code pour debuguer, sans que ca apparaisse a l'utilisateur final.
Un clavier azerty en vaut deux.
Re: [..] Récupérer des réponses à des commandes telnet
Je comprends bien l'utilité du F5 pour débugger et d'ailleurs maintenant je l'utilise mais j'aimerais compiler le programme une fois fini et n'utiliser que l'exécutable.
J'ai réussi à faire fonctionner le bazard avec votre aide et j'aimerais encore une petite aide.
Le port peut soit être un nombre de 1 à 48, soit une lettre et un nombre de 1 à 24, selon le switch où se trouve ma mac_address.
Avec ce code j'arrive à afficher les ports du type "A13", "E20" (lettre + nombre) mais du coup ça foire pour les ports du type "24", "13" ...
Comment dire que la lettre [A-Z] est facultative ?
Merci !!!
J'ai réussi à faire fonctionner le bazard avec votre aide et j'aimerais encore une petite aide.
Le port peut soit être un nombre de 1 à 48, soit une lettre et un nombre de 1 à 24, selon le switch où se trouve ma mac_address.
Avec ce code j'arrive à afficher les ports du type "A13", "E20" (lettre + nombre) mais du coup ça foire pour les ports du type "24", "13" ...
Code : Tout sélectionner
If $result = 1 Then
$array = StringRegExp($expectOutBuffer, 'Located on Port : ([A-Z][0-48]+)', 1)
If Ubound($array) <> 0 Then
MsgBox(4096,"Resultat", "Port:"&$array[0]& @CRLF)
Else
ConsoleWrite("No port found."& @CRLF)
EndIfMerci !!!
- sksbir
- Niveau 7

- Messages : 384
- Enregistré le : lun. 26 oct. 2009 17:57
- Localisation : Lyon
- Status : Hors ligne
Re: [..] Récupérer des réponses à des commandes telnet
bonjour
J'arrive apparemment après la bataille, mais il se trouve que autoit n'est pas toujours la solution.
En tout cas, à ta place, j'aurais utilisé Teraterm, lequel contient un langage de scripting assez évolué
Pour ta question sur les expressions régulières, j'ai mis la main sur ce tutoriel en français : http://www.siteduzero.com/tutoriel-3-14 ... e-1-2.html
et ça m'a l'air bien détaillé. Et apparemment, autoit gère bien des expressions en PCRE puisque l'aide de StringRegExp contient un lien : Complete description can be found here qui renvoi ici : http://www.autoitscript.com/autoit3/pcr ... .html#SEC1
A priori, ça devrait donc être : 'Located on Port : ([A-Z][0-48]+)|Located on Port : ([0-48]+)'
J'arrive apparemment après la bataille, mais il se trouve que autoit n'est pas toujours la solution.
En tout cas, à ta place, j'aurais utilisé Teraterm, lequel contient un langage de scripting assez évolué
Pour ta question sur les expressions régulières, j'ai mis la main sur ce tutoriel en français : http://www.siteduzero.com/tutoriel-3-14 ... e-1-2.html
et ça m'a l'air bien détaillé. Et apparemment, autoit gère bien des expressions en PCRE puisque l'aide de StringRegExp contient un lien : Complete description can be found here qui renvoi ici : http://www.autoitscript.com/autoit3/pcr ... .html#SEC1
A priori, ça devrait donc être : 'Located on Port : ([A-Z][0-48]+)|Located on Port : ([0-48]+)'


