scripting - programacion - ¿Creando un script para una sesión de telnet?
script de telnet (12)
Aunque no está directamente relacionado con su pregunta, le recomendaría que use ssh, ya que puede ejecutar comandos específicos a través de él (además, es más seguro de forma predeterminada).
¿Alguien sabe de una manera fácil de crear un script que pueda conectarse a un servidor de telnet, hacer algunas cosas habituales de telnet y luego cerrar sesión? Estoy tratando con usuarios que no están familiarizados con telnet y los comandos que necesitarán ejecutar. Lo único que quiero es que hagan doble clic en un script y que ese script ejecute automáticamente los comandos para ellos.
Probablemente te estés preguntando, "¿En qué plataforma están los usuarios?" Estarán en Windows y Linux. Las implementaciones en lenguajes 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.
Bash shell es compatible con este out-of-box, por ejemplo,
exec {stream}<>/dev/tcp/example.com/80
printf "GET / HTTP/1.1/nHost: example.com/nConnection: close/n/n" >&${stream}
cat <&${stream}
Para filtrar y mostrar solo algunas líneas, ejecute: grep Example <&${stream}
.
Compruebe la herramienta SendCommand .
Puedes usarlo de la siguiente manera:
perl sendcommand.pl -i login.txt -t cisco -c "show ip route"
Escriba la sesión de telnet dentro de un archivo BAT Dos y ejecútelo.
Este script vbs vuelve a cargar un conmutador de 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
He usado varios métodos para crear secuencias de comandos de sesiones de telnet en unix, pero el más simple es probablemente una secuencia de comandos de eco y de suspensión, con su salida canalizada en telnet. Canalizar la salida en otro comando también es una posibilidad.
Ejemplo tonto
(echo password; echo "show ip route"; sleep 1; echo "quit" ) | telnet myrouter
Esto (básicamente) recupera la tabla de enrutamiento de un enrutador Cisco.
Me gusta el ejemplo dado por Active State usando python. Aquí está el link completo. Agregué el registro 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()
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 algunos telnets de posix no manejan la redirección correctamente (por eso sugiero netcat)
Par de preguntas:
- ¿Puedes poner cosas en el dispositivo en el que te estás conectando?
- ¿Los comandos ejecutados por el script son iguales o varían según la máquina / usuario?
- ¿Desea que la persona que hace clic en el ícono 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 tomas de corriente habilitadas para IP (BayTech RPC3s) que podrían ser de utilidad para usted. Si estás interesado, veré si puedo desenterrarlo y publicarlo en algún lugar.
Puede que no parezca una buena idea, pero usé Java y utilicé la programación simple de socket TCP / IP para conectarme a un servidor Telnet e intercambiar comunicación. Y funciona perfectamente si conoces el protocolo implementado. Para SSH, etc., podría ser difícil a menos que sepa cómo hacer el handshake, etc., pero el telnet simple funciona como un regalo.
Otra forma en que lo intenté fue mediante el uso de un proceso externo en java System.exec (), etc., y luego dejar que Windows integrado en telnet haga el trabajo por usted y usted simplemente envíe y reciba datos al proceso del sistema local.
Expect está creado para esto y puede manejar la entrada / salida más los tiempos de espera, etc. Tenga en cuenta que si no es un fanático de TCL, hay módulos Expect para Perl / Python / Java.
EDITAR: La página anterior sugiere que la entrada Wikipedia Expect es un recurso útil :-)
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")