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
- 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.