Telnets automatizados

12 f , 2006

Resulta que necesito automatizar una conexion inalambrica entre mi router en modo cliente (WRT54G) y otro router en modo AP… el procedimiento es el siguiente:

Por telnet me conecto al router y con el comando “wl join” me conecto al router en modo AP

telnet 192.168.1.90
login
password
wl join SSID key XXXXXXXXXXX amode shared
ping 192.168.1.1 (compruebo la asociacion)

Se que este procedimiento es una chorrada (y tambien se que me lo ahorraria si usara openWRT con sistema de archivos que no se borra tras los resets) pero en este momento las cosas son asi (es lo que hay) y el problema que queria solucionar era el de automatizar ese proceso de conexion desde windows, no el de que el router se conectara solo.

He descubierto el programa que te permite automatizar conexiones de este tipo, se llama expect y aunque originalmente es para linux esta portado a windows y funciona razonablemente bien…

Entonces tenemos que crear un script del tipo

———————————————————–
#!/usr/bin/expect -f
set force_conservative 1 ;
if {$force_conservative} {
set send_slow {1 .010}
proc send {ignore arg} {
sleep .2
exp_send -s — $arg
}
}
puts “\n”
spawn telnet 192.168.1.90
expect “ogin:*”
send — “root\r”
expect “assword:*”
send — “xxxxxxxxxxx”
expect “[~]#*”
send — “wl join SSID key XXXXXXXXXXXXX amode shared”

exit
—————————————————

Como se puede apreciar el mecanismo del script es bastante evidente, cuando queremos que envie “datos” -send si queremos esperar y luego crear el .bat que lo automatice todo en un click es mucho mas sencillo

————————————-
C:\Documents and Settings\Nacho>”C:\Archivos de programa\Expect-5.21\bin\tclsh80
.exe” c:\script.txt
————————————–

Actualizacion 13/Abril/2006————————

Finalmente el script que estoy usando y que funciona es el siguiente:

—————-corta aqui——————

#!/usr/bin/expect -f
set force_conservative 1 ;
if {$force_conservative} {
set send_slow {1 .010}
proc send {ignore arg} {
sleep .2
exp_send -s — $arg
}
}
puts “\n”
spawn ping -n 1 192.168.1.90
expect -exact “Paquetes: enviados = 1, recibidos = 1, perdidos = 0 (0%
perdidos)” {puts “todo ok\n”;exit}
spawn telnet 192.168.1.90
expect “ogin:*”
send — “root\r”
expect “assword:*”
send — “administrador%5\r”
send — “wl join SSID key xxxxxxxxx amode shared\r”
send — “ping 192.168.1.1\r”
expect “ms*”
exit
————————–corta aqui——————-

Este script te mantiene en pantalla lo que esta ocurriendo y hasta que no se produce la asociacion (osea hasta que el AP 192.168.1.1 no te responde con el ping (indicandote los ms que ha tardado.. de ahi el expect “ms*”) no se cierra el programa y en todo momento controlas lo que esta pasando.

Acabo de probarlo y funciona perfectamente.