Servidor casero: Script para conocer IP dinamica ( y pública )

Bien les cuento como esta el escenario:

* Una PC con GNU/Ubuntu Linux8.04, Apache, PHP, MYSQL y VSFTP (entre otras muchas chacharas)
* Conexión a Internet: ADSL a 512Mbps con IP Dinamica
* DNS proporcionado por dyndns.com (nombre de mi Servidor: guerrero.homelinux.org)
* NO utilizo aun el ddclient para actualizar automatica la IP en dyndns.com (apenas ayer lo baje y no le entendi mucho a la configuración tengo varias dudas hasta el momento)
* NO tengo UPS o NoBreak solo Regulador (y resulta que en estas temporadas de lluvia suele haber algunos apagones, asi que, esto provoca un inevitable cambio de IP pública para mi "HomeServer")

ahora, para los que ya esten ambientados en esto de servidores, podran decir que no es estrictamente necesario utilizar el servicio de dyndns.com, pero para cuestiones de usabilidad mia si lo requiero. En fin, lo importante es que solo me hacia falta implementar algo que me permitiera conocer la IP de mi "HomeServer" cada que cambie (o almenos cada cierto tiempo para que sepa si aun esta disponible mi "HomeServer") ya sea por apagon, desconexión , etc). todo esto para cuando este frente a mi "HomeServer" y este en mi trabajo oficina u otro lugar con acceso a internet.

Pues bien, para esto se me ocurrio la siguiente SOLUCIÓN:

* Hacer un script que ejecutara un navegador web (en modo text) que se conectara a una URL (dirección de web) que registrara la IP de mi "HomeServer"
* Este script se tiene que ejecutar de forma automatica preferentemente cada que se encienda el HomeServer y cada cierto tiempo
* Entonces en realidad no solo necesito del script si que, tambien de la URL que almacenará la IP. pa esto es necesario contar con algún espacio web que te permita crear paginas php o lo que sea que te permita almacenar tu IP y obiamente que tengas la manera de consultarlo facilmente.

bueno aqui va lo que hise:

  • postIP.sh (para hacer llegar la IP del HomeServer a la URL)
  • getIP.php (Archivo para obtener la IP y algunas otras chacharas, este va del lado de tu hostin o donde tengas tu espacio web.)
  • infoh.txt (Archivo que contien principalmente la IP del HomeServer, este va del lado de tu hostin o donde tengas tu espacio web.)

CONTENIDO DEL SCRIPT postIP.sh

#!/bin/bash

# Autor: Milton Muñoz Ortiz
#
#####################################################
# con este script puedes registrar tu IP en algun servidor
# al cual tu debes tener acceso para al menos poder subir
# el archivo getIP.php y poder crear el archivo infoh.txt
#
#
#
#### INSTRUCIONES SUGERIDAS PARA PROGRAMAR EJECUCIÓN AUTOMATICA DEL SCRIPT 'postIP.sh' ####
# antes de configurar debes de asegurate que el archivo 'postIP.sh' tenga permisos de ejecutable
# para esto ejecuta: chmod 755 ruta_donde_gurdaste/postIP.sh o chmod +x ruta_donde_gurdaste/postIP.sh
#
# ahora si
# PRIMER FORMA:
# Copiar 'postIP.php' en algunos de los siguientes directorios:
# /etc/cron.daily
# /etc/cron.hourly
# /etc/cron.monthly
# /etc/cron.weekly
#
# SEGUNDA FORMA: (SUGERIDA por cuestiones de mayor control en tiempos de ejecusión)
# Editar/Agregar al final del archivo /etc/crontab algo como la linea siguiente:
# 1 */2 * * * milton /home/milton/postIP.sh
#
# Esto se puede hacer con pico /etc/crontab por ejemplo.
#
# Ahora les explico como va esta cosa para los que aun no esten un poco aletrados con esto de cron
#
# Min Hrs DiasMes Meses DiasSemana Usuario Comando
# 0 */2 * * * milton /home/milton/postIP.sh
#
# Asi pues esto quiere decir que se ejecutará cada dos Horas todos los meses y dias de la semana,
# se ejecutara como si fuese lanzado por el usuario milton (aqui debes poner tu propio usuario).
# lo Último es el comando indicando su ruta completa
#
# Para mayor (y mucho mejor) información sobre cron pueden consultar con el sabio
# man cron
#
# aqui el real contenido del postIP.sh
#
#
# declarando variables para su fácil su configuración
LINKregistrarIP="http://tu.dominio.com/ruta/getIP.php" # URL al archivo getIP.php
BrowserText="lynx" # tambien puede usar "links" si lo prefieres
Retardo="10" # segundos de espera para antes de cerrar el BrowserText. sugierido 10, no poner 0 (cero) o 1 (uno)

#ejecutando lynx con la URL para que capture nuestra IP publica
#lynx $LINKregistrarIP &
$BrowserText $LINKregistrarIP &

# Esperamos 10 segundos antes de proceder a cerrar lynx,
# 10 seg. por si esta muy lento el acceso a Internet,
# puedes reducir los segundos si tienes una muy buena velocidad de conexión
# pero no quites o lo dejes en cero o uno este SLEEP, de ser asi,
# lo mas probable es que no des el tiempo suficiente a LYNX para que llegue al LINK deceado.
sleep $Retardo

# Obtenet el PID de lynx actualmente ejecutado
# Puedes utilizar estas intrucciones para verificar cual de todas ellas te proporciona el PID correcto de lynx
# ps -u milton | grep lynx
# ps ax|grep lynx | cut -f 1 -d " "
# ps -C lynx -o pid=
# usamos esta última instrucción porque es la que nos proporciona solamente el PID.
#PIDLYNX=`ps -C lynx -o pid=`
PIDLYNX=`ps -C "$BrowserText" -o pid=`

# Ejecutando Kill para terminar lynx
# En caso de que esta intrucción no cierre el Lynx
# entonces reemplaza -HUP por -9 y ya lo debe cerrar sin problemas.
kill -HUP $PIDLYNX

# NOTA: tambien puedes ejecutar
# kill -HUP `ps -C lynx -o pid=`
# para no usar variable para el PID en tu script
# yo preferi escribirlo asi:
# 1ro. PIDLYNX=`ps -C lynx -o pid=`
# 2do. kill -HUP $PIDLYNX
# para mejor entendimiento del script.
########### Fin de postIP.sh #############

CONTENIDO DE getIP.php

<html>
<head>
<meta name="Charset" content="utf-8" />
</head>

<body>
<?php
$archivo = "infoh.txt";// Archivo en donde se guarda el info de quienes decargan el archivo
$abre = fopen($archivo, "a");// Abrimos nuevamente el archivo en modo Escribible y el apuntador al final, sustituir "a" por "w" para ubicar el puntero al inicio y asi siempre reemplazar el contenido por la nueva información

$IP=$_SERVER['REMOTE_ADDR'];//IP del Host visitante
//puedes omitar estas tres lineas siguientes estan solo para mostrar que puede optenes mas que la sola IP
$Fecha= date("j-M-y G:i:s");
$Host= $_SERVER['REMOTE_HOST']; //Nombre del Host visitante
$Browser= $_SERVER['HTTP_USER_AGENT']; //Navegador

// si no requieres mas que la IP pues entonces borra $Fecha | y | $Browser | $Host \n
$info= "$Fecha | $IP | $Browser | $Host \n";

$grabar = fwrite($abre, $info); // escribimos información del visitante
fclose($abre); // Cerramos la conexión al archivo
?>
</body>
</html>

CONTENIDO DE infoh.txt

(para los que no entiendan: infoh.txt lo pueden poner vacio es solo para que bayan a tener problemas la primera ves al tratar de escribir en el por no estar creado)

Ahora lo solo es cuestión de segui las intruciones marcadas en postIP.sh y de copiar getIP.php en su espacio web... y claro copiar su URL para pegarla dendro de postIP.sh (concretamente LINKregistrarIP="http://tu.dominio.com/ruta/getIP.php"

Dudas, Comentarios, pedradas, /etc/ ... a mi /home/ jejeje no es verdad en los comentarios!! bye.