SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: jomeron en Miércoles 8 de Abril de 2009, 11:03

Título: Reinicio automático del router
Publicado por: jomeron en Miércoles 8 de Abril de 2009, 11:03
Buenas a todos!!

 ese es mi problema, estoy intentando hacer un pequeño programa en C que se encargue de cada cierto tiempo reiniciar automáticamente el router. Mi problema es que una vez hago el telnet al router, con system("telnet 192.168.1.1");, me pide usuario y contraseña, pero no tengo ni idea de como hacer que el propio programa le de esa informacion al router mediante instrucciones. He estado buscando por ahí la solución y sólo lo he encontrado para linux, pero el problema es que yo lo quiero para windows. Si alguien me puede echar un cable quedaré muy agradecido.


  Chau
Título: Re: Reinicio automático del router
Publicado por: Eternal Idol en Miércoles 8 de Abril de 2009, 12:03
Si decis cual es la solucion en Linux seguramente podramos decirte como implementarla en Windows. Sino la forma es la logica, conectarte mediante TCP y el protocolo telnet, no hay mucha ciencia ...
Título: Re: Reinicio automático del router
Publicado por: jomeron en Miércoles 8 de Abril de 2009, 13:35
la solución en linux es :

#!/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 successfulr
r
–> “
send “reboot”
send “r”
sleep 1
interact
exit

en cuanto a lo de conectarse con telnet, lo que no se es como desde c, usando la instruccion system puedo acceder al router, puesto que despues de hacer  system("telnet 192.168.1.1") me pide usuario y contraseña.

Gracias por responder Eternal Idol
Título: Re: Reinicio automático del router
Publicado por: Eternal Idol en Miércoles 8 de Abril de 2009, 14:34
Bien pero esta solucion no es de C ... si queres usar eso en Windows podes instalar ActiveTcl (http://www.activestate.com/activetcl). Para instalar el package de Expect vas al bin y haces: teacup install Expect.

Y finalmente a tu script le agregas al principio:
package require Expect

Para ejecutarlo:
C:Tclbin>tclsh85.exe ex.tcl servidor juan perez
Título: Re: Reinicio automático del router
Publicado por: jomeron en Miércoles 8 de Abril de 2009, 17:01
genial eternal idol, chas gracias por la ayuda de verdad, intentare con lo que me dices. De todas formas, sabrias hacer lo que te digo en C, y si no, sabrias cmo utilizar lo del ActiveTcl este, a través de un programa en C?

gracias por la dedicacion    :good:
Título: Re: Reinicio automático del router
Publicado por: Eternal Idol en Miércoles 8 de Abril de 2009, 17:25
De nadas  B)  Para hacerlo en un programa (no tiene nada que ver con el script ese) tenes que usar sockets para conectarte por TCP con el servidor de Telnet y usando el protocolo del mismo intercambiar la informacion necesaria.

Para llamar al ActiveTcl supongo que con system("tclsh85.exe ex.tcl servidor juan perez"); lo podrias hacer tal y como llamas a telnet, sino con la API de Windows (CreateProcess).
Título: Re: Reinicio automático del router
Publicado por: Ruben3d en Jueves 9 de Abril de 2009, 04:41
Hola jomeron,

Desde C has de evitar a toda costa el uso de la función system porque es un grave problema de seguridad (es fácil escalar privilegios en función de los permisos del ejecutable). Para hacer lo que deseas has de, si no encuentras una librería que lo haga por ti, abrir un socket y transmitir los datos tú mismo. Una sesión telnet no es más que un socket abierto que redirige a la máquina remota todo lo que le llegue por stdin y envía a stdout todo lo que reciba. De esta forma no tienes más que enviar los datos necesarios y esperar las respuestas adecuadas para realizar las operaciones a través del socket.

Por otro lado, es posible que el router tenga instalado un agente SNMP. Si así es, consulta las MIBs que implementa y si hay alguna opción para gestionar el rearranque empleando esta funcionalidad, que sería lo más correcto.

Recibe un cordial saludo,

Rubén
Título: Re: Reinicio automático del router
Publicado por: Eternal Idol en Jueves 9 de Abril de 2009, 09:34
No creo que use esto mas que en su propia maquina pero bueno ya que estamos podrias decirnos que tipo de problema de seguridad entrañaria el uso de:
system("telnet 192.168.1.1");
y
system("tclsh85.exe ex.tcl servidor juan perez");