DynDNS (II)

En la anterior entrega, expliqué muy por encima como crear un clon de DynDns.

En esta entrega, voy a explicar el codigo que he creado. Quiero resaltar, que no voy a crear (por el momento) un script que actualice ningun servidor dns, puesto que no es esa mi intencion. Lo único que necesito es saber las ips que tienen mis clientes en un momento dado para poder conectarme a su ordenador personal o a su servidor y poder ofrecerles la asistencia remota.

Para empezar, analicemos las posibles opciones.

Opcion 1. Queremos saber la ip publica de un ordenador que se acaba de conectar. Le decimos a nuestro cliente/amigo que se conecte a una pagina determinada. Para ello la pagina le muestra la ip publica que tiene el cliente.

Opcion 2. Queremos saber la ip publica de un servidor el cual gestionamos y que se conecta a internet con una ip dinamica. Programamos un script en el servidor que se conecte automáticamente a esa pagina. Para ello, la página guarda la ip publica en nuestra bbdd.

Para ello he desarrollado un pequeño script en php con el siguiente codigo (elimino los datos correspondientes a las conexiones):

<?
/* Script para obtener las direcciones ip’s de los ordenadores que administramos
Programador: Francisco Javier Sánchez Galián
27 de Enero de 2011 */

$ip=$_SERVER[‘REMOTE_ADDR’];
$Usuario = $_GET[“u”];
$Password = $_GET[“p”];

if ($Usuario==”” && $Password==””)
print($ip);

$link=mysql_connect(“servidor”,”usuario”,”password”);
mysql_select_db(“bbdd”,$link);

if ($Usuario<>”” && $Password==””) {
$result=mysql_query(“select ip from ips where Usuario=’$Usuario'”);
$myrow=mysql_fetch_array($result);
print($myrow[0]); }

if ($Usuario<>”” && $Password<>””) {
$result=mysql_query(“select CodUsuario from ips where Usuario=’$Usuario’ and Password=’$Password’;”);
$myrow=mysql_fetch_array($result);
$CodUsuario = $myrow[0];
$result=mysql_query(“UPDATE ips SET ip=’$ip’ WHERE CodUsuario=$CodUsuario”); }
?>

La ultima parte se puede optimizar para que haga el update sin realizar la primera consulta, lo se, soy consciente, pero lo he hecho asi para que podais entenderlo mejor.

Como podéis ver claramente en este sencillo script si el usuario pone solamente en la direccion del navegador se le mostrará su ip. Si el usuario introduce su codigo de usuario, se mostrará la ip que esta almacenada en el sistema y si por último, introduce el codigo de usuario y su contraseña, se almacenará en la bbdd de mi servidor.

Parece engorroso? No, al contrario. Este script esta pensado para:

1) El usuario lo ejecute sin parametros y asi le mueste la ip actual.
2) El encargado de informatica lo ejecute solo con el codigo de usuario, asi muestra la ip almacenada
3) El servidor lo ejecute con codigo de usuario y password y asi se actualice la ip en la bbdd.

Ahora pasemos al servidor.

Este script en php se almacena en mi servidor, pero tenemos que ir al servidor de nuestro cliente/amigo para que ejecute el script que esta en nuestro servidor cada x minutos, horas o dias. Para ello nos autentificamos en el sistema y abrimos un terminal (o bendita consola)

Nos autentificamos como root y ponemos:

crontab -e

Con ello se nos abrira el editor por defecto para editar la lista de trabajos a ejecutar. Añadimos la siguiente linea

0,15,30,45 * * * * wget -O /dev/null “direccion?u=usuario&p=password”

guardamos y cerramos el editor.

Paso a describir que significa la linea. 0,15,30,45 significa que mi script se va a ejecutar cada 15 minutos. Los siguientes 4 asteriscos significan que se va a ejecutar a todas las horas del dia, todos los dias de la semana, de todos los meses del año y me va a ejecutar wget…. Este wget es un comando para obtener o descargar contenido desde la consola. En este caso le digo que el contenido me lo mande a /dev/null con el parametro -O y lo que tiene que descargar es “direccion?u=usuario&p=password”, es decir, actualizar la bbdd.

Donde direccion es la direccion donde tengo mi script, que por motivos de seguridad no desvelo en publico.

2 thoughts on “DynDNS (II)

Responder a DynDNS (I) – Fran Galian Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *