La solución IT para el hogar.

PC - Portátiles - Servicio Técnico - Consultas

13 de febrero de 2016

Script para actualizar host de DynDns (GNU/Linux & Windows)

Buenas!, disculpen que hace rato no aporto nada a Internet. En esta ocasión les traigo un pequeño script realizado en php5 para actualizar un host de DynDns puesto que si tienen alguno seguramente se hayan visto más de una vez con problemas para actualizarlos desde un router/modem compatible con la funcionalidad DDNS. Muchas veces me pasaba que no se actualizaban mis host por varias semanas y debía ingresar a forzarlos dentro del router/modem.

Antes que nada quiero decir que existe una aplicación oficial por parte de la gente de DynDns pero que no me ha dado resultado puesto que cuando me actualizaba la IP en el host en vez de hacer el update con la IP pública la realizaba con la IP privada de mi red. Es decir alguna dirección por el estilo de las 192.168.1.x, etc.

Bueno el script es muy sencillo, utiliza un webservice de la url ifconfig.me mediante curl en el cual se obtiene un archivo json con el valor de la IP pública desde donde se realiza la petición. Esto se encuentra en una función llamada getActualIp() en el archivo updateDyn.php. Como se ve a continuación no es nada compleja y solo ejecuta el curl sobre ifconfig.me y decodifica el json guardando la IP pública actual en un archivo temporal llamado ip.tmp, el cual solo sirve para hacer debug o log de lo que recibe el curl y no tiene ninguna influencia en la correcta actualización del host DynDns.

function getActualIp(){
    $curlobj=curl_init("ifconfig.co/all.json");
    $file=fopen("ip.tmp","w");
    curl_setopt($curlobj, CURLOPT_HEADER, 0);
    curl_setopt($curlobj,CURLOPT_RETURNTRANSFER,1);
    $result=curl_exec($curlobj);
    curl_close($curlobj);
    $jsonarray=json_decode($result,true);
    $ip=$jsonarray["X-Real-Ip"][0];
    fputs($file,$ip);
    fclose($file);
    return $ip;
}


La otra parte esencial del programita se encuentra en la función que envía la actualización al webservice de DynDns mediante parámetros y petición GET. Esta función se llama updateDDNS y recibe como parámetros los valores usuario de dyndns, password/token de dyndns y el hostname que queremos actualizar. Y lo envía mediante la url como se ve a continuación. Notese que dentro de la función se llama a la función getActualIp() anteriormente comentada. En esta función también se escribe un archivo temporal llamado update-result.tmp y solo sirve como modo de log o debug, no influye en la correcta actualización.

function updateDDNS($user,$pass,$hostname){
    $ip=getActualIp();
    $url="https://$user:$pass@members.dyndns.org/nic/update?hostname=$hostname&myip=$ip";
    $curlobj=curl_init($url);
    $file=fopen("update-result.tmp","w");
    curl_setopt($curlobj,CURLOPT_POST, 0);
    curl_setopt($curlobj,CURLOPT_HTTPHEADER,array('Content-type: text/plain'));
    curl_setopt($curlobj,CURLOPT_HTTPHEADER,array('User-Agent: PHP/5.5.9'));
    curl_setopt($curlobj, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curlobj,CURLOPT_RETURNTRANSFER,1);
    $result=curl_exec($curlobj);
    curl_close($curlobj);
    fputs($file,$result);
    fclose($file);
    return 'RESULTADO-> '.$result;
}


Si no entiendes nada hasta ahora no te preocupes porque de aquí en más se explica que se debe cambiar para que el script ande sin necesidad de entender nada más.


Requerimientos para GNU/Linux:
  • Tener el paquete php5-cli instalado, se puede realizar de la siguiente manera:
    sudo apt-get install php5-cli
  •  Tener el paquete php5-curl, se puede realizar de la siguiente manera:
    sudo apt-get install php5-curl
Requerimientos para Windows:  
  • Para Windows se incluye el ejecutable de php5 en la carpeta php. Solo requerirá contar con el "Visual C++ Redistributable" según pruebas realizadas. El mismo se puede bajar de la página de MS. Antes que instalarlo recomiendo tratar de ejecutar la aplicación puesto que generalmente se encuentra instalado.
  • Importante: No se consiguió hacer andar el script en Windows XP 64 Bits Pro.

Parametros a modificar para ambos Sistemas Operativos


Abrir el archivo "updateDyn.php" y editar lo siguiente según tus datos de DynDns.org
 
$user="TU_USUARIO_DE_DynDns";
$pass="TU_KEY_DE_UPDATER_DynDns";


La KEY se genera desde el menú "Account Settings" de DynDns.



Parametros a modificar para Windows


En las propiedades del archivo "Actualizar desde DDNS  Windows.lnk" (el acceso directo), reemplazar lo verde por el nombre de host que queremos actualizar. El mismo debe existir en nuestra cuenta de DynDns, por ende debe ser creado antes de ejecutar la primer actualización.




Parametros a modificar para Linux


Abrir el archivo "Actualizar_desde_Linux.sh", ingresar entre las comillas de la siguiente linea el nombre de host que queremos actualizar. El mismo debe existir en nuestra cuenta de DynDns, por ende debe ser creado antes de ejecutar la primer actualización.

host="wunderoft-blog.dyndns.org"



Ejecución en Windows




Una vez configurados los parametros para Windows simplemente hacer doble clic en el acceso directo "Actualizar desde DDNS  Windows.lnk"

Ejecución en Linux

Una vez configurados los parametros para Linux simplemente ingresar por terminal a la carpeta donde se encuentra el archivo "Actualizar_desde_Linux.sh" y ejecutar la siguiente orden.

./Actualizar_desde_Linux.sh
 
Auto-Ejecución en Windows

Simplemente se copia y pega el acceso directo "Actualizar desde DDNS  Windows.lnk" adentro de la carpeta "Todos Los Programas>Inicio" y cada vez que inicie sesión la IP se actualizara.

Auto-Ejecución en Linux

Se agrega al cron una linea que llame al comando "Actualizar_desde_Linux.sh" especificando la ruta completa hasta donde se encuentra el mismo.


Links de descargas:

Enlace :



Saludos y espero que les sirva.