A muchos de nosotr@s nos interesa reiniciar el router inalambrico para por ejemplo obtener una IP dinamica diferente. La forma habitual es levantarnos del sitio, acercarnos al router y darle un «botonazo», pero claro, esto nos obliga fisicamente estar en el sitio. En muchos routers existe la posibilidad de hacer lo mismo mediante la consola de comandos. Basicamente serian los siguiente pasos:
1. Hacer un telnet a la direccion del router.
2. Introducir el usuario y la password de acceso al router.
3. Ejecutar el comando de reboot del router.
Ejemplo:
$ telnet 192.168.1.1
$ Login:
PERICO
$ Password:
EL_DE_LOS_PALOTES
Login succesful
-->
reboot
Naturalmente tendras que usar el login y password de tu router (el que viene de fabrica, o el que hayas puesto si ya lo has cambiado). El comando para reiniciar el router en mi caso es «reboot» y la lista de comandos posibles me salen cuando introduzco «?» desde la ventana de telnet. En tu caso, si el comando no es este, debera ser muy parecido.
Veamos como automatizar ahora, el reboot de el router mediante un shell script.
Para automatizar la ejecucion del shell script y no tener que pasarle a mano el usuario y la password, sino que me las lea desde la consola yo he usado «expect».
expect es un interprete de comandos que nos permite automatizar secuencias de acciones, de esta manera podemos evitar el tener que introducir comandos, solo lo hacemos la primera vez y el resto de veces se ejecuta ya lo que hubieramos realizado (de expect ya hable aunque por desgracia no tengo el tutorial a mano). Podeis encontrar mas informacion aqui.
Para instalar expect ejecutamos:
$ sudo apt-get install expect
Si instalamos tambien autoexpect. Podriamos ejecutarlo directamentes:
$ chmod +x ./autoexpect
$ ./autoexpect
Grabar la secuencia de comandos que queremos automatizar, y para finalizar escribir «exit». De esta manera se genera un fichero expect de comandos de manera automatica que luego podriamos ejecutar cuando quisieramos.
Para reiniciar el router, en mi caso uso el siguiente script de expect:
#!/usr/bin/expect
spawn telnet [lindex $argv 0]
expect "Login:"
send [lindex $argv 1]
send "\r"
expect "Password:"
send [lindex $argv 2]
send "\r"
expect -exact "\r
\r
Login successful\r
\r
--> "
send "reboot"
send "\r"
sleep 1
interact
exit
Como veis, realmente hago un telnet a la ip del router que paso como parametro, espero por la cadena «Login:» y le paso el login, espero por la cadena «Password» y le paso el password, espero por la cadena «–>» que es la que me indica que ya puedo escribir el comando en mi router, y para acabar le paso la cadena «reboot» que es el comando que quiero ejecutar, y finalizo.
Guardo este script como reboot_router.sh
y ya podria ejecutarlo siempre que quisiera:
$ chmod +x ./reboot_router.sh
$ ./reboot_router.sh 192.168.1.1 PERICO EL_DE_LOS_PALOTES
Tras unos segundos, el router se reinicia y ya tengo nueva IP. chachi!! ^^
En vuestro caso, si el script no es identico debe ser bastante parecido. En el siguiente enlace encontrareis mas informacion:
Si haceis COPY & PASTE del script, cuidado con las dobles comillas, que wordpress las pone mal y entonces el script os dara error al intentar ejecutarlo.
Muy bueno lo del telnet. No lo sabía.
Gracias y un saludo
No sabia que podia entrar a mi router a traves de telnet. Muchas gracias 🙂
Pero esto no es válido para todos los routers.
@fede
Cierto, no funciona con todos solo con aquellos a los que puedas acceder mediante telnet y por consola de comandos.
Es muy interesante este tema pero tnego dos dudas:
1) Esta función trabajaría igual tanto para windows
como para linux.
2) Yo necesito trabajar con windows alguien me puede
pasar un enlace donde descargar expect.
Muchas gracias.
Si, deberia funcionar igual.
Como tu bien dices necesitarias expect para Windows. En su dia consegui encontrar un binario (pero me costo).
A ver si encuentras algo aqui:
http://expect.nist.gov/#windows
Seguramente tengas que adaptar un poco el script, pero no deberia diferir mucho.
Gracias Jose
En esa página ya estuve, pero el enlace que hay en expect para windows esta obsoleto o roto.
Asi que he intentado entrar en esa universidad a ver si veia algo y por otras web y nada.
No se si hay por ahi otras funciones que hagan algo parecido. Ya que en un lugar remoto tengo un equipo y necesito que en él corra una aplicación que testee la conexion a internet (ping…) y si falla que entre en el router (telnet) y lo restart.
Como esto a de ser autónomo mi problema es como interactuo con el router cuando me pide el password…ahi es donde entraría la funcion expect u otra pero para windows, ya que en ese equipo corren aplicaciones sobre windows.
Tal vez usando Cygwin, te instala un entorno Unix en Windows desde el cual puedes aprovechar las utilidades y comandos de consola de Unix.
Reblogueó esto en .