Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Aporte Saber nuestra IP publica. Servicio tipo no-ip o DynDNS
#1
Saludos amigos.

Si tenemos un servidor montado en casa y nuestro proveedor de internet no nos facilita una IP fija tendremos la necesidad de saber en todo momento nuestra IP pública. Vamos a montar un servicio tipo no-ip o DynDNS.

El servicio consta de dos partes, una en nuestro ordenador y por otra parte necesitaremos un servidor de internet, por ejemplo, si no tenemos un servicio de hosting, https://www.hostinger.es/ , nos ofrece de forma gratuita todo lo que necesitamos, 2 GB de almacenamiento, php y bases de datos MySQL. 



EN NUESTRO ORDENADOR

Tengo que aclarar que lo que explico a continuación lo he hecho bajo un sistema linux.

En  primer lugar crearemos un directorio en el servidor de nuestro pc, yo lo he llamado curl, la ruta sería /var/www/html/curl.

Abrimos nuestro editor de texto favorito y escribimos

#!/bin/bash
curl -d "value1=pepico" http://midominio.com/curl/index.php


Lo guardamos con el nombre 1.sh, por ejemplo, y le damos permisos de ejecución. En la última linea cambiar midominio.com por el de nuestro servidor de hosting, también, donde vemos value1=pepico. cambiamos el nombre por el que queramos.

Este script lo que hace es enviar el nombre de usuario a nuestra página index.php del servidor de hosting mediante el método post.

Ahora vamos a editar crontab para que nuestro script se ejecute cada dos horas. Abrimos un terminal y escribimos 

sudo gedit /etc/crontab


y en crontab añadimos esta línea

0 */2    * * *    root    /var/www/html/curl/1.sh


guardamos y cerramos. Como hemos dicho, ésto hará que nuestro script se ejecute cada dos horas.

Ya hemos terminado en nuestro PC, ahora iremos a nuestro servidor de hosting.



EN NUESTRO SERVIDOR DE HOSTING 

Deberemos crear una base de datos MySQL con nombre curl, con una tabla llamada datos y 4 columnas, id (int, primary key, auto_increment), nombre (varchar 50), ip (varchar 50) y fecha (timestamp, CURRENT_TIMESTAMP)

Ahora vamos a crear la página index que recogerá los datos que le hemos enviado antes por el script bash y los introducirá en nuestra base de datos. Paso previo es crear también una página conex.

conex.php

Código PHP: (Seleccionar todo)
<?php
// hostname o ip del servidor de Base Datos
$bd_host='localhost';
 
// nombre de usuario 
$bd_usuario='usuario';
 
// la contraseña para la BBDD  
$bd_password='contraseña';
 
// nombre del BBDD
$bd_base='curl';
$conexion = new mysqli($bd_host$bd_usuario$bd_password$bd_base);
 
if (
$conexion->connect_errno
{
 
   echo "No se pudo conectar a la Base Datos: (" $mysqli->connect_errno ") " $mysqli->connect_error;
}
?>


index.php 

Código PHP: (Seleccionar todo)
<?php

include("conex.php");
if(
$_POST)
 
     {
 
        $queryInsert "INSERT INTO datos (nombre, ip) VALUES ('".$_POST['value1']."', '".$_SERVER['REMOTE_ADDR']."');";
 
 
        $resultInsert mysqli_query($conexion$queryInsert); 
 
 
        if($resultInsert)
 
        {
 
           echo "<strong>Se ingresaron los registros con exito</strong>. <br>";
 
        }
 
        else
 
        {
 
           echo "No se ingresaron los registros. <br>";
 
        }
 
 
     }
?>


Con esto ya tenemos nuestra última ip metida en la base de datos.

Ahora vamos a crear dos sencillas páginas para saber cual es nuestra actual ip pública de nuestro PC, buscar.php y encontrado.php.

buscar.php

Código PHP: (Seleccionar todo)
<html>
<
head>
<
title>Entrada de enlaces</title>
<
meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</
head>

<
body>
<
form action="encontrado.php" method="post">
 
 Nombre:<br>
 
 <input type="text" name="nombre"><br><br>
 
 <input type="submit" value="Submit">
</
form>
</
body>
</
html


Nos mostrará un sencillo formulario donde debemos poner nuestro nombre de usuario que está en el script bash.

encontrado.php 

Código PHP: (Seleccionar todo)
<html>
<
head>
<
title>Entrada de enlaces</title>
<
meta charset="UTF-8">
</
head>
<
body>
<?
php
include("conex.php");
$consulta "SELECT nombre, ip, DATE_FORMAT(fecha, 'Con fecha: %d/%m/%y y hora: %H:%i:%s') AS fecha FROM datos WHERE nombre = '" $_POST["nombre"] . "' ORDER BY id  DESC LIMIT 1";
$resultado $conexion -> query($consulta);
echo 
"<span style='color: blue;'>Extracción de último dato ...</span> <br><br>";
while(
$fila $resultado -> fetch_array())
{
echo 
"Usuario: " $fila["nombre"] . "<br>";
echo 
"Última IP asignada: " $fila["ip"] . "<br>";
echo 
"" $fila["fecha"] . "<br><hr>";
}
mysqli_free_result($resultado);
mysqli_close($conexion);
?>
</body>
</html> 


Nos mostrará la última ip pública que tenemos asignada y a que fecha y hora se captó.

Cita:Extracción de último dato ... 

Usuario: pepico
Última IP asignada: 11.111.11.111
Con fecha: 29/04/17 y hora: 18:00:02



Todo esto está bien, pero queremos algo mas, no tener que ir a un formulario para saber nuestra ip, lo que queremos es poner en el navegador una dirección y que nos redireccione a nuestro servidor local, una dirección tipo "midominio.com/pepico". Recordad que pepico era nuestro usuario con el que se guardaban las ip de nuestro servidor local.

Bien, como al poner esa dirección en el navegador, el directorio pepico no existe, el servidor nos enviará un error 404, página no encontrada. Vamos a crear una página de error 404 tuneada por nosotros.

Antes de nada vamos a tener que tocar el archivo .htaccess para que cuando se de el error 404 nos muestre nuestra página 404. Abrimos el archivo .htaccess y añadimos la linea

ErrorDocument 404 /404.php
 
Con esto le decimos que cuando se produzca el error 404 nos muestre la página 404.php.

Ahora vamos a crear la página 404.php, que a continuación diré lo que hace.

404.php

Código PHP: (Seleccionar todo)
<html>
<
head>
<
title>Entrada de enlaces</title>
<
meta charset="UTF-8">
<
script language="JavaScript">
function 
enviar()
{
document.form.submit();
}
</script>
</head>
<body onload="enviar()">
<?php
$url 
 "{$_SERVER['REQUEST_URI']}";
$resultado str_replace("/"""$url);
?>
<form method="POST" action="curl/redireccionar.php" name="form">
<p><input type="text" value="<?php echo $resultado?>" name="nombre"></p>
<p><input type="submit" value="Enviar" name="B1"></p>
</form>
</body>
</html> 


Esta página lo que hace es eliminar de la dirección web todo lo que vaya antes de la barra "/", en nuestro caso quedaría pepico y lo envía directamente a otra página que luego vamos a crear, redireccionar.php, la cual estará dentro del directorio curl.

redireccionar.php

Código PHP: (Seleccionar todo)
<html>
<
head>
<
title>Entrada de enlaces</title>
<
meta charset="ISO-8859-1" />
</
head>
<
body>
<?
php
include("conex.php");
$consulta "SELECT nombre, ip, DATE_FORMAT(fecha, 'Con fecha: %d/%m/%y y hora: %H:%i:%s') AS fecha FROM datos WHERE nombre = '" $_POST["nombre"] . "' ORDER BY id  DESC LIMIT 1";
$resultado $conexion -> query($consulta);
 
if (
$fila $resultado -> fetch_array())

echo 
"<script language=\"javascript\">window.location.href=\"http://" $fila["ip"] . "\";</script>";
}
else {
echo 
"NO encontrado";
}
mysqli_free_result($resultado);
mysqli_close($conexion);


?>
</body>
</html> 


Esta página lo que hace es buscar en la base de datos la última ip registrada del usuario que queremos, en este caso pepico , y nos redirecciona directamente a esa ip. Si ese usuario no existe o nos equivocamos al escribir la dirección, la página actuará como una página 404 y nos mostrará un mensaje de "no encontrada".

Todo el proceso, desde que pones la dirección en el navegador hasta que te redirecciona a la ip de tu servidor local es limpio y automático.


Bueno, espero que le sirva a alguien de ayuda.

Saludos.
[Imagen: chuck.gif]
Responder

#2
Está realmente bien este post, tremendamente útil. Ya estoy deseando llegar a casa para probarlo. A mi me viene de perlas, para mi proyecto a largo plazo. Gracias, maestro!
Responder

#3
Me alegro que te guste. La verdad que puede ser interesante para temas de domótica e internet de las cosas para conectar con nuestro servidor local.
[Imagen: chuck.gif]
Responder



Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)