Espere un script para la comunicación telnet con el enrutador DLink

Espere un script para la comunicación telnet con el enrutador DLink

Estoy intentando conectarme a mi enrutador a través de telnet usando este script:

#!/usr/bin/expect -f

set timeout 20

# router user name
set name "admin"

# router password
set pass "admin"

# router IP address
set routerip "192.168.1.1"

# Read command as arg to this script
set routercmd "cat /var/1.leases" 

# start telnet
spawn telnet $routerip

# send username & password
expect "username:"
send -- "$name\n"
expect "password:"
send -- "$pass\n"

# get out of ISP's  Stupid menu program, go to shell
expect "TBS>>"
send --  "sh\n"

# execute command
expect -re ".*\$"
send -- "$routercmd\n"

# exit
send -- "^D"

Ahora el guión funciona bien hasta el send -- "sh\n"papel. Llega al símbolo del shell que aparece como: ~ $(tilda-espacio-dólar-espacio). Sin embargo, no puedo emitir el comando después de esto. Básicamente, simplemente no funciona después de eso.

¿Alguien puede decir por qué? ¿Es algún error que estoy cometiendo?

Respuesta1

Bueno. Lo rompí. Tenía que hacer algo con una coincidencia de patrones incorrecta en la expectparte de las líneas finales del código.

Lo primero que hice fue generar un script grabado usando autoexpect. Esta herramienta se utiliza para registrar sus sesiones y generar un script basado en eso. Para hacerlo, primero instalé el autoexpectpaquete (disponible en expect-devel paquete en sistemas basados ​​en Debian) y luego grabé mi sesión:

sudo apt-get install expect-dev          #Since I'm on Ubuntu
autoexpect telnet 192.168.1.1

autoexpectgeneró automáticamente un script para mí. Cuando ejecuté este script, estaba llegando hasta la ejecución de mi comando y ejecutándolo en el enrutador, pero luego no pude salir. Tomando sugerencias de este script y leyendo la página de manual de expectativa, finalmente descubrí que había algún problema con el reconocimiento de patrones. Finalmente modifiqué el script en consecuencia y esto es lo que finalmente funciona:

#I am mentioning here only the end part of the complete script which was faulty
# execute command
expect "~ \$ "
send -- "$routercmd\r"

expect "~ \$ "
send -- "exit\r"

expect -- "TBS>>"
send -- "exit\r"

expect -- "*Are you sure to logout?*" 
send -- "y"
expect eof

Entonces, la lección aprendida fue que debemos usarlo autoexpectpara generar scripts automáticamente. Y luego, si hay algún error en esos scripts generados automáticamente, lo más probable es que se deba a un reconocimiento de patrón incorrecto en la expectpieza.

En mi caso, la pieza esencialmente defectuosa fue:

expect -re ".*\$"    #WRONG
expect "~ \$ "       #RIGHT

Las piezas defectuosas dependerán completamente de su sesión, con quién se comunique. Ponerse en contacto con un servidor de correo a través de telnet arrojará resultados diferentes y tendrá que hacer coincidir en consecuencia.

información relacionada