2009-04-02 200 views
39

¿Alguien sabe de una manera fácil de crear una secuencia de comandos que se puede conectar a un servidor telnet, hacer algunas cosas habituales de telnet y luego cerrar la sesión? Estoy tratando con usuarios que no están familiarizados con Telnet y los comandos que necesitarán ejecutar. Todo lo que quiero es que hagan doble clic en una secuencia de comandos y que la secuencia de comandos ejecute automáticamente los comandos.¿Crear un script para una sesión de Telnet?

Probablemente se esté preguntando: "¿En qué plataforma están los usuarios?" Estarán en Windows y Linux. Las implementaciones en idiomas como Perl, Java o Python son aceptables. Veo que Perl tiene un módulo Net :: Telnet. ¿Alguien ha usado eso?

Mi solución ideal sería crear dos archivos de script. un archivo BAT para Windows y un script de shell para Linux. Si bien esto haría que el mantenimiento dual fuera un problema, significaría que no tendría que instalar Perl/Java/Python/etc ... en cada máquina. Desafortunadamente, no he visto ninguna forma de automatizar una sesión de telnet con archivos por lotes o scripts de shell.

Gracias.

+0

Utilice el módulo telnetlib de python. Aquí hay un ejemplo http://stackoverflow.com/questions/1491494/telnet-automation-scripting – Vanuan

Respuesta

12

Expect está diseñado para esto y puede manejar la entrada/salida más tiempos de espera, etc. Tenga en cuenta que si no es un fan de TCL, hay módulos Expect para Perl/Python/Java.

EDIT: La página anterior sugiere que the Wikipedia Expect entrada es un recurso útil :-)

+1

Las implementaciones de esperar también están disponibles en otros idiomas, como el módulo Expect.pm de Perl, si no desea aprender TCL. –

+1

La distribución de Expect incluye un script llamado autoexpect que generará un script de expectativa mirando una sesión. El script generado es lo suficientemente simple como para modificarlo. – sigjuice

+3

TCL/TK apesta por tener herramientas escritas con él, simplemente porque las dependencias no se pueden cumplir por completo en los sistemas integrados ... olvídate de todo y simplemente usa netcat = casi sin carga de CPU. –

31

He usado varios métodos para sesiones de secuencias de comandos de telnet en Unix, pero la más sencilla es probablemente una secuencia de comandos de eco y del sueño , con su salida canalizada a telnet. Tubería de la salida en otro comando también es una posibilidad.

ejemplo tonto

 
(echo password; echo "show ip route"; sleep 1; echo "quit") | telnet myrouter 

Este (basicallly) recupera la tabla de enrutamiento de un enrutador Cisco.

+0

¿Cuál es el propósito de paréntesis aquí? –

+5

@WakanTanka Forzando los ecos y durmiendo para que se ejecuten en un subconjunto, compartan un stdout y paguen la salida antes de que se repita el comando "salir", para permitir que se imprima la tabla de enrutamiento completa, antes de que la conexión falle. – Vatine

+0

Gracias @Vatine buen ejemplo simple, funcionó para mí. – MikeRoger

12

Otro método es usar netcat (o nc, dependiendo de qué posix) en el mismo formato que muestra vatine o puede crear un archivo de texto que contenga cada comando en su propia línea.

he encontrado que telnet algunas POSIX' no manejan redirigir correctamente (por eso sugiero netcat)

+0

Excelente respuesta, telnet no funcionaba, pero la conexión a través de nc en su lugar funcionaba. – I82Much

+5

C'mon personas, cuando bajas, dime por qué (especialmente años después del hecho) – KevinDTimm

+0

Tu respuesta podría haber sido simplemente un comentario en la respuesta de Vatine. O una edición a la suya. No fue necesario publicar una respuesta completamente nueva cuando mencionas "el mismo formato que vatine muestra". En SO, obtener la mejor respuesta es mejor que tener muchas respuestas cruzadas haciendo referencia entre sí, o al menos eso creo. Por cierto, no perdoné. – artfuldev

-1

Aunque no está directamente relacionada con su pregunta, le recomiendo que utilice ssh en su lugar, como se puede ejecutar específica comandos a través de él (además es más seguro por defecto).

0

par de preguntas:

  1. ¿Se puede poner cosas en el dispositivo que usted está en un telnet?
  2. ¿Los comandos ejecutados por el script son los mismos o varían por máquina/usuario?
  3. ¿Desea que la persona que hace clic en el icono tenga que proporcionar un ID de usuario y/o contraseña?

Dicho esto, escribí algo de Java hace un tiempo para hablar con un par de enchufes habilitados para IP (BayTech RPC3s) que podrían serle útiles. Si estás interesado veré si puedo desenterrarlo y publicarlo en algún lugar.

3

Compruebe el SendCommand tool.

Se puede utilizar de la siguiente manera:

perl sendcommand.pl -i login.txt -t cisco -c "show ip route" 
3

No puede sonar una buena idea pero se usa Java y utiliza la programación de sockets TCP/IP simple de conectar a un servidor telnet y la comunicación de cambio. Y funciona perfectamente si conoce el protocolo implementado. Para SSH, etc., puede ser difícil a menos que sepa cómo hacer el apretón de manos, etc., pero el telnet simple funciona como un regalo.

Otra forma de hacerlo, estaba usando un proceso externo en java System.exec() etc, y luego dejo que las ventanas compiladas en telnet hagan el trabajo por usted y simplemente envíe y reciba datos en el proceso del sistema local.

7

Este script vbs vuelve a cargar un conmutador Cisco, asegúrese de que Telnet esté instalado en 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 
-1

Escriba la sesión de telnet dentro de un archivo BAT Dos y ejecútelo.

+2

No puede controlar/crear una secuencia de comandos de una sesión FTP desde un archivo BATch, solo puede comenzar una sesión FTP. Para crear una secuencia de comandos de una sesión de FTP, debe usar el comando de script '-s: nombre de archivo.txt' para identificar un archivo de texto que contenga su secuencia de comandos. –

+0

FTP? Creo que la pregunta es sobre una sesión de TELNET – Sara

0

Me gusta el ejemplo dado por Active State usando python. Aquí está el completo link. Agregué el inicio de sesión simple en parte desde el enlace pero puede obtener la esencia de lo que podría hacer.

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() 
2
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") 
1

shell Bash apoya esta fuera de la caja, por ejemplo,

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

filtrar y sólo se muestran algunas líneas, ejecute: grep Example <&${stream}.

Cuestiones relacionadas