Page 1 sur 1

[..] Telnet

Posté : jeu. 02 sept. 2010 11:38
par Manwe
Bonjour,

Je fais du support et de la validation, et je suis amené a refaire souvent les même commandes sur des équipements en telnet.
Après avoir cherché comment automatiser telnet avec Autoit, je vous présente mes résultats:

Tout d'abord, je n'utilise pas le client telnet de microsoft car il y a des problèmes pour récupérer la sortie standard. Mais si quelqu'un a réussi proprement je suis preneur.
J'utilise donc plink.exe, (qui est en fait putty en ligne de commande, ), que vous pouvez trouver ici: http://the.earth.li/~sgtatham/putty/lat ... /plink.exe
plink.exe est a placer au même endroit que le script.

Faire de l'automatisation de telnet pour moi c'est :
créer la connexion a l'équipement en utilisant Run plink.exe IP
Envoyer une commande, et attendre un prompt ou une certaine chaine de caractère, pendant un certain temps, en loguant ou pas le contenu.
J'ai donc créé une fonction 'sendExpect' qui envoie une chaine de caractères, et qui en attend une autre.
► Afficher le texte

Re: [..] Telnet

Posté : jeu. 02 sept. 2010 11:51
par Manwe
Ce que je vais surement ajouter a cette fonction sendExpect:
Pouvoir rechercher une chaine de caractères (ce qui est fait aujourd'hui), ou un tableau de chaines, et pouvoir rechercher plusieurs prompts par exemple dans une seule commande afin de gérer les cas d'erreurs.
Gérer de très gros buffers (on m'a demandé d'afficher et de logguer un fichier de plus de 500Mo)

Re: [..] Telnet

Posté : jeu. 02 sept. 2010 21:47
par Tlem
Est-ce que ceci ne pourrait pas convenir ?
http://www.autoitscript.fr/forum/viewto ... 722#p30722

Re: [..] Telnet

Posté : ven. 03 sept. 2010 10:01
par Manwe
J'ai essayé directement avec les sockets et ca marche avec un serveur telnet simple, mais avec d'autres serveurs (notamment des machines Unix qui vont utiliser des fonctions avancées du serveur telnet au niveau authentification il me semble) ca ne marche pas.
Comme j'ai certains scripts qui se connectent sur les 2 types de machines, j'ai préféré utiliser une seule méthode de connexion. L'idéal serait le client telnet.exe de Microsoft, mais je n'ai pas réussi a le faire fonctionner correctement pour lire la sortie standard.

Il y a aussi le ssh (telnet crypté)
Je n'ai pas essayé mais plink permet de faire du ssh, et avec cette méthode il y a juste un paramètre à changer lors de la connexion.

Re: [..] Telnet

Posté : dim. 12 sept. 2010 16:58
par xeno
je suis sous seven x64 et je n'arrive pas a me connecter

en message d'erreur" j'ai expected string 'login' not found."

j'ai bien essayer de modifer la partie

If sendExpect($telnet_pid, '', 'login', 3, $file, 'Unable to connect equipment : ' &

avec "login as:"

mais c'est pareil, quand je fais a la main, sous dos, je me connect sans problème avec plink.exe

une idée


et j'ai le même soucis avec le script de Tlem

http://www.autoitscript.fr/forum/viewto ... 722#p30722

Re: [..] Telnet

Posté : mer. 29 sept. 2010 09:52
par Manwe
Dans mon exemple je recherche 'login', mais tu peux chercher une autre chaine de caractères.
Quand tu fais un telnet sur un equipement tu n'auras pas forcement les même choses.

Si je fais un telnet sur une Fedora, j'aurais quelque chose comme:
En vert ce que j'envoie comme texte. En rouge ce que j'attends.

Fedora Core release 4 (Stentz)
Kernel 2.6.17.1 on an i686
login: toto
Password: totopassword
Last login: Wed Sep 29 09:17:18 from 1.2.3.4
[toto@PC0 ~]$ date
Wed Sep 29 09:35:36 CEST 2010
[toto@PC0 ~]$


Ce qui donnerais avec ma fonction :
If sendExpect($telnet_pid, '', 'login', 3, $file) < 1 Then Return -1 ; je n'envoie rien, mais j'attends l'affichage de 'login'. Ca aurait pu être 'Fedora Core release 4'
If sendExpect($telnet_pid, 'toto', 'Password', 3, $file) < 1 Then Return -1 ; j'envoie toto, et j'attends qu'on me demande le mot de passe
If sendExpect($telnet_pid, 'totopassword', '$', 3, $file ) < 1 Then Return -1 ; j'envoie le mot de passe et j'attends le prompt
sendExpect($telnet_pid, "date", "$", 3, $file) ; ; j'envoie la commande 'date' et j'attends le prompt