Desconectar Wifi del router desde script (via telnet)

Hola buenas.
Después de pelearme mucho con esto: hilo_ssh-al-router-desde-consola-falla-con-putty-va-bien_2013579
Finalmente opté por acceder al router vía telnet (solo de modo local).

Pues bien, si accedo manualmente al router y le doy la orden:
wireless disable

y después
wireless enable


Lo hace correctamente y todo va bien.

Pero si lo hago a través de un script que he intentado hacer para automatizarlo, parece que funciona pero no de forma correcta.
Es decir cuando ejecuto el script de apagado de wifi parece que lo hace bien, pero al ejecutar el script de encendido de wifi, este se enciende (la luz del router), pero en el portatil o smartphone la señal no aparece o bien aparece muy débil y no conecta.

Es por ello que he pensado que algo está mal en script que utilizo:
>nano wifi_off.exc
#!/usr/bin/expect

set timeout 20
set TelnetAddr "192.168.1.1"
set user "admin"
set password "passw"
spawn telnet $TelnetAddr

expect "Login:"
send "$user\r"
expect "Password:"
send "$password\r"

expect ">"
send "wireless disable\r"
expect ">"
send "logout\r"


Primero he pensado que igual se hace el logout demasiado deprisa y puse un sleep, pero no.

A ver si veis alguna barbaridad xd

P.D. Como dato, comentar que si luego del apagado a través del script entro manualmente y le vuelvo a dar la orden de "wireless disable" muestra esto:
> wireless disable
device wl0 is not a slave of br0
device wl0.1 is not a slave of br0
device wl0.2 is not a slave of br0
device wl0.3 is not a slave of br0
Nunca he usado expect, de hecho no lo conocía (gracias :P). Sin embargo, hace unos años, para la carrera tuve que hacerme básicamente lo que tu intentas: un programilla por línea de comandos para encender o apagar el wifi de mi router. Lo hice en java, a saco vía la interfaz web, y no respondo de la calidad (o ausencia de la misma) del código. Pero funcionaba perfectamente :P

Supongo que lo podrás adaptar fácilmente a tu router. Si te interesa dímelo y te lo pasaré.


EDIT: Bueno, acabo de echarle un ojo al código... quizá sea un pateo adaptarlo a otros routers porque hay que meterse con HTTP requests y demás movidas, no difíciles, pero que ahora mismo a mi me daría pereza xD
Buenas,
Si te va bien pásamelo y intento adaptarlo.
Con la de horas que he perdido ya no viene de alguna más.
No entiendo porqué me pasa eso, es muy raro...
Échale un vistazo a Crontab ;)
noentiendero escribió:Échale un vistazo a Crontab ;)

No entiendo exactamente a que te refieres.
El Crontab en principio no lo utilizaría ya que lo que intento es crear un script para apagar el wifi desde el rPi conectándome a el vía ssh.
DS_impact escribió:
noentiendero escribió:Échale un vistazo a Crontab ;)

No entiendo exactamente a que te refieres.
El Crontab en principio no lo utilizaría ya que lo que intento es crear un script para apagar el wifi desde el rPi conectándome a el vía ssh.


oh no se por que se me metio en la cabeza que estabas intentando automatizar el apagado y el encendido [tomaaa]
wenasss

hice este script para otro hilo, sirve para reiniciar la conexion adsl en caso de estar caida...
pero cambiando los comandos "cmd2,cmd3", por los de wifi, te deberia funcionar

tendria que funcionar en qualquier router que tenga el puerto telnet abiero y lleve un linux embebido dentro.

#!/bin/bash
#configuracion isp y router
dns=80.58.61.250      #pon aqui la dns de tu isp, ahora esta puesta la de telefonica(eliminar en caso de cortar el trozo de mas abajo)
host=192.168.0.1    #aqui la ip de tu ruter
port=23
user=usuario      #cambia usuario por el del router
pass=contraseña      #cambia contraseña por la del router

#estas son las ordenes que se enviaran al router
cmd1=sh                                        #abre una shell en el terminal del router
cmd2="adsl connection --down"       #apaga el adsl
cmd3="adsl connection --up"           #enciende el adsl
cmd4=reboot                                  #reinicia el router

#Elimina este trozo si no quieres que compruebe el estado de la conexion de adsl
#ya que solo envia las ordenes al router en caso de estar caida la conexion
if `ping -c 1 $dns> /dev/null` ;then
echo Servidor DNS:Online
else
echo Servidor DNS:Offline
echo Reiniciando ADSL
#eliminar hasta aqui

#este trozo que sigue son las ordenes que se envian al router atraves de telnet(que estan mas arriba)
( echo open ${host}
sleep 1
echo ${user}
sleep 1
echo ${pass}
sleep 1
echo ${cmd1}
sleep 2
echo ${cmd2}
sleep 2
echo ${cmd3}
sleep 2
echo ${cmd4} ) | telnet

fi


editado:

este ya esta puesto para lo que necesitas...
#!/bin/bash
#configuracion isp y router
host=192.168.0.1    #aqui la ip de tu ruter
port=23
user=usuario      #cambia usuario por el del router
pass=contraseña      #cambia contraseña por la del router

#estas son las ordenes que se enviaran al router
cmd1=sh                                        #abre una shell en el terminal del router
cmd2="ifconfig wl0 down"       #apaga el wifi
cmd3="ifconfig wl0 up"           #enciende el adsl
cmd4="exit"                                  #sale de la shell
cmd5=exit                                     #sale del router

#este trozo que sigue son las ordenes que se envian al router atraves de telnet(que estan mas arriba)
( echo open ${host}
sleep 1
echo ${user}
sleep 1
echo ${pass}
sleep 1
echo ${cmd1}
sleep 2
echo ${cmd2}
sleep 2
echo ${cmd3}
sleep 2
echo ${cmd4}
sleep 2
echo ${cmd5} ) | telnet
Gracias chicos, este fin de semana espero tener tiempo para probarlo.

Gracias!
Pregunta tonta, si es para apagar el router por la noche o a X horas, has mirado si el router no trae ya una pagina de configuracion para ello?
8 respuestas