en

AndorraDotNet

Comunitat d'usuaris .NET del pais dels pirineus

cdani

June 2008 - Artículos

  • Cambio automático de IP al perder conectividad; también control remoto

    Hola.

    Este es mi primer artículo en este blog. Trata sobre la creación de un servicio windows en visual basic .NET que mediante un ping a intervalos determinados verifica la existencia de conectividad, por ejemplo mediante una red wifi. En cuanto esta se pierde cambia la ip del pc, lo cual serviría por ejemplo si se tiene un sistema de conexión auxiliar en otro rango de ip, por ejemplo un router.

    Así mismo he añadido un tcplistener para recibir comandos remotamente, por ejemplo para forzarle a recuperar la ip inicial. Para esto no he implementado ninguna seguridad especial, por lo que no deja de ser un agujero "light". Esto en mi caso lo uso para ejecutar un bat remotamente que reinstala una nueva versión del servicio.

    Está hecho en Visual Studio 2005 a base de copiar y pegar código de aquí y de allá y no me he matado en absoluto, por lo que no esperéis un proyecto impoluto . El proyecto lo he hecho en catalán, aunque luego he cambiado los comentarios a castellano.

     

    Primero he creado un servicio de windows tal como explican aquí:

    http://www.developerfusion.co.uk/show/3441/2/

    Luego quería controlar varios parámetros mediante un fichero de configuración, por lo que he usado este generador de INI (retro total):

    http://www.experts-exchange.com/Programming/Q_21091756.html

    Los parámetros del ini son:

    [setup]
    mirarip=192.168.1.1
    intents=2
    novaportaenllac=192.168.10.254
    portaenllac=192.168.1.254
    iplocal=192.168.1.10
    interval_mirar_ip=30000
    servidor_auxiliar=sql1

    mirarip es la ip que usa para ver si ha perdido la conectividad (por ejemplo un servidor en el otro lado de la wifi).

    intents es el número de pings que hace antes de decidir que ha perdido la conectividad.

    novaportaenllac es la nueva puerta de enlace. cogerá la zona de esta puerta de enlace (10) y la ip local del pc para generar la nueva ip.

    portaenllac es la puerta de enlace por defecto.

    iplocal es una ip que verifica en cuanto ha perdido conectividad con mirarip. Esto sirve para detectar si el pc se ha quedado sin red, por lo que no tendría sentido cambiar la ip (por ejemplo si alguien ha desconectado el cable). Sería una ip que está en el mismo lado de la wifi que el pc.

    interval_mirar_ip es el número de milisegundos entre ping y ping.

    servidor_auxiliar sirve para tampoco cambiar la ip si se puede acceder a esta ip. Es una vuelta de tuerca antes de cambiar la ip del pc. Para deshabilitar esta funcionalidad, poner una ip inexistente.

     

    Para hacer un ping he cogido esto:

    http://www.elguille.info/colabora/puntoNET/ar_PingVBNET.htm

     

    Para cambiar la ip he mirado estos artículos:

    http://www.experts-exchange.com/Microsoft/Development/.NET/Q_23048931.html
    http://support.microsoft.com/?kbid=257748

     

    Y para el thread y el listener:

    http://support.microsoft.com/?scid=kb%3Ben-us%3B317421&x=15&y=10
    http://msdn2.microsoft.com/es-es/library/aa964694(vs.80).aspx
    http://geeks.ms/blogs/quintas/archive/2006/06/15/475.aspx

     

    Este programa no está muy depurado, por lo que para un entorno en producción hay que revisar e implementar la lógica que más convenga, puesto que lo hice muy a medida de lo que me interesaba.

     

    Este es el archivo del código fuente

    canviaip.rar

    Para instalar el servicio hay que usar el installutil, tal como lo explican en el enlace de la creación de un servicio. En cuanto hayas iniciado el servicio mira el visor de sucesos en la carpeta Aplicación si ha habido algún error.


    El proyecto para enviar comandos remotos está aquí:

    restauracanviip.rar

    Es muy simple, puesto que solo envía el comando al puerto de la ip del pc.

    Espero que os sea de utilidad.

    Daniel José.

AndorraDotNet.com
Ofrecido por Community Server (Commercial Edition)