Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Root~ en 14 Agosto 2015, 18:03 pm



Título: Problema con salida telnet en Bash
Publicado por: Root~ en 14 Agosto 2015, 18:03 pm
Hola!

Estoy intentando automatizar la conexion telnet con otro equipo, pero me sale un (famoso según he estado leyendo por internet) error "Connection closed by foreign host."

Os pongo en situación y lo que no entiendo.

1º Si ejecuto en la terminal de linux, a mano la conexión me muestra lo siguiente:
Citar
root@kali:~/Desktop# telnet 192.168.192.129 23
Trying 192.168.192.129...
Connected to 192.168.192.129.
Escape character is '^]'.

login: 1234
password:

Microsoft Windows [Versi�n 6.1.7601]192.129 23
Copyright (c) 2009 Microsoft Corporation. Reservados todos los derechos.
Connected to 192.168.192.129.
C:\Users\josst\Desktop>]'.

Vemos que nos hemos conectado sin problemas.

Pero si ejecuto el script, me da la siguiente salida:

Citar
root@kali:~/Desktop# ./2
telnet> Trying 192.168.192.129...
Connected to 192.168.192.129.
Escape character is '^]'.

login: 1234
1234
Connection closed by foreign host.

El código del script es:

Citar
#!/bin/bash
# donde cmd es el comando a ejecutar
host=192.168.192.129
port=23
user=1234
pass=1234
#cmd1='dir'
( echo open ${host}
sleep 1
echo ${user}
sleep 1
echo ${pass}
sleep 1
#echo ${cmd}
#sleep 1
) | sudo telnet

¿A que puede deberse el error?

Muchas gracias de antemano. Saludos


Título: Re: Problema con salida telnet en Bash
Publicado por: yMk369 en 15 Agosto 2015, 03:22 am
El problema según veo es que estas imprimiendo la contraseña, y no introducioendola en el campo, sugiero que utilices Expect (viene en la mayoría de las distros), fíjate su lo tienes instalado en /usr/bin/expect

Pero mejor aun, usa Python (es lo mejor que puedes hacer)

pero te explicare con Expect.

Código:

#!/bin/bash

HOST="192.168.192.129"
USER="1234"
PASS="1234"

VAR=$(expect -c "
spawn telnet  $HOST

match_max 100000
expect \"*?login:*\"
send -- \"$USER\r\"
send -- \"\r\"

match_max 100000
expect \"*?assword:*\"
send -- \"$PASS\r\"
send -- \"\r\"
")
sudo telnet

De lo anterior lo único que merece la pena explicar, para que tengas una idea es:
expect \"*?assword:*\" espera a que en pantalla parezca assword con comodines para cualquier palabra, antes y después.

send -- \"$PASS\r\" mandara el password después de la condición anterior.

Definitivamente investiga mas, y seguramente hay error en mi codigo pero quiero que veas como funciona, ahora bien usa python o perl.
Saludos.


Título: Re: Problema con salida telnet en Bash
Publicado por: Root~ en 19 Agosto 2015, 17:38 pm
Muchas gracias por su respuesta y explicación!

Un saludo!!!