web-dev-qa-db-fra.com

Création d'un script pour une session Telnet?

Est-ce que quelqu'un connaît un moyen facile de créer un script qui peut se connecter à un serveur telnet, effectuer des tâches habituelles telnet et se déconnecter? Je traite avec des utilisateurs qui ne sont pas familiers avec telnet et les commandes dont ils auront besoin pour exécuter. Tout ce que je veux, c'est qu'ils cliquent deux fois sur un script et le fassent exécuter automatiquement les commandes.

Vous vous demandez probablement: "Sur quelle plate-forme se trouvent les utilisateurs?" Ils seront sur Windows et Linux. Les implémentations dans des langages tels que Perl, Java ou Python sont acceptables. Je vois que Perl a un module Net :: Telnet. Quelqu'un at-il utilisé cela?

Ma solution idéale serait de créer deux fichiers de script. un fichier BAT pour Windows et un script Shell pour Linux. Cela rendrait la double maintenance problématique, mais cela signifierait que je n'aurais pas à installer Perl/Java/Python/etc ... sur chaque machine. Malheureusement, je n'ai vu aucun moyen d'automatiser une session telnet avec des fichiers de commandes ou des scripts Shell.

Merci.

41
TrentCoder

Expect est construit pour cela et peut gérer les entrées/sorties ainsi que les délais d'attente, etc. Notez que si vous n'êtes pas un fan de TCL, il existe des modules Expect pour Perl/Python/Java.

EDIT: La page ci-dessus suggère que le Wikipedia Expect entry est une ressource utile :-)

13
Brian Agnew

J'ai utilisé diverses méthodes pour la création de scripts de sessions telnet sous Unix, mais la plus simple est probablement une séquence de commandes echo et sleep, leur sortie étant acheminée dans telnet. Transférer la sortie dans une autre commande est également une possibilité.

Exemple idiot

 (mot de passe echo; echo "show ip route"; sommeil 1; echo "quitter") | telnet myrouter 

Ceci (de manière générale) récupère la table de routage d'un routeur Cisco.

35
Vatine

Une autre méthode consiste à utiliser netcat (ou nc, selon le posix) dans le même format que celui indiqué par vatine, ou vous pouvez créer un fichier texte contenant chaque commande sur sa propre ligne.

J'ai constaté que certains telnets de Posix ne gèrent pas la redirection correctement (c'est pourquoi je suggère netcat)

12
KevinDTimm

Ce script vbs recharge un commutateur Cisco, assurez-vous que telnet est installé sur Windows.

Option explicit
Dim oShell
set oShell= Wscript.CreateObject("WScript.Shell")
oShell.Run "telnet"
WScript.Sleep 1000
oShell.Sendkeys "open 172.25.15.9~"
WScript.Sleep 1000
oShell.Sendkeys "password~"
WScript.Sleep 1000
oShell.Sendkeys "en~"
WScript.Sleep 1000
oShell.Sendkeys "password~"
WScript.Sleep 1000
oShell.Sendkeys "reload~"
WScript.Sleep 1000
oShell.Sendkeys "~"
Wscript.Quit
7
Arjan Keij

Cela ne semble peut-être pas une bonne idée, mais j’ai utilisé Java et une simple programmation de socket TCP/IP pour me connecter à un serveur telnet et échanger des communications. Et cela fonctionne parfaitement si vous connaissez le protocole mis en œuvre. Pour SSH, etc., cela peut être difficile, à moins que vous ne sachiez comment établir une poignée de main, etc., mais le simple telnet fonctionne comme une gâterie. 

Une autre façon que j’ai essayée consistait à utiliser un processus externe dans Java System.exec (), etc., puis à laisser les fenêtres intégrées à Telnet faire le travail à votre place. Vous venez d’envoyer et de recevoir des données au processus système local.

3
rizwan
import telnetlib

user = "admin"
password = "\r"

def connect(A):
    tnA = telnetlib.Telnet(A)
    tnA.read_until('username: ', 3)
    tnA.write(user + '\n')
    tnA.read_until('password: ', 3)
    tnA.write(password + '\n')
    return tnA
def quit_telnet(tn)
    tn.write("bye\n")
    tn.write("quit\n")
3
Harshan Gowda

Recherchez l'outil SendCommand .

Vous pouvez l'utiliser comme suit:

Perl sendcommand.pl -i login.txt -t Cisco -c "show ip route"
3
Youri Reddy-Girard

Bash Shell prend en charge cette solution prête à l'emploi, par exemple.

exec {stream}<>/dev/tcp/example.com/80
printf "GET / HTTP/1.1\nHost: example.com\nConnection: close\n\n" >&${stream}
cat <&${stream}

Pour filtrer et afficher uniquement certaines lignes, exécutez: grep Example <&${stream}.

1
kenorb

J'aime l'exemple donné par Active State en utilisant python. Voici le lien complet link . J'ai ajouté le journal simple en partie à partir du lien, mais vous pouvez obtenir le résumé de ce que vous pouvez faire.

import telnetlib

prdLogBox='142.178.1.3'
uid = 'uid'
pwd = 'yourpassword'

tn = telnetlib.Telnet(prdLogBox)
tn.read_until("login: ")
tn.write(uid + "\n")
tn.read_until("Password:")
tn.write(pwd + "\n")
tn.write("exit\n")
tn.close()
0
rshield

Couple de questions:

  1. Pouvez-vous mettre des choses sur l'appareil dans lequel vous êtes en telnet?
  2. Les commandes exécutées par le script sont-elles les mêmes ou varient-elles en fonction de la machine/de l'utilisateur?
  3. Voulez-vous que la personne qui clique sur l'icône doive fournir un identifiant et/ou un mot de passe?

Cela dit, il ya quelque temps, j’ai écrit à Java pour parler à quelques barrettes d’alimentation compatibles IP (BayTech RPC3) qui pourraient vous être utiles. Si cela vous intéresse, je verrai si je peux le creuser et le poster quelque part.

0
BonkaBonka