De forma predeterminada Copaco brinda una IP pública dinámica a sus clientes, siempre que sepamos cual es la IP, podremos acceder a distintos servicios que estén disponibles en la PC, pero si casualmente te encontrás en un lugar remoto, y el IP ya no es el mismo (principalmente cuando se reinicia el modem, o se corta la energía eléctrica), no hay mucho que hacer, aquí veremos una forma de notificar el cambio de IP, mediante un E-Mail.
Hay varias formas de realizar este objetivo, aquí presento una alternativa, una manera más sencilla aun es hacerlo en Ruby con la Gema Pony.
Necesitamos:
- curl (Obtiene un archivo usando HTTP, instalar con cualquier paquete)
- php5-cli (Interprete de lineas de comando, instalar con cualquier paquete)
- Los archivos class.phpmailer.php y class.smtp.php (Generalmente se encuentra en /usr/share/php/libphp-phpmailer)
Tenemos dos opciones para averiguar nuestra IP:
- http://checkip.dyndns.org/
- http://whatismyip.org/
Estas URL’s nos devuelven la IP de la PC en donde estamos.
Funcionalidad:
En resumen, ejecutamos un script PHP en el Cron cada media hora, si el IP es distinto al último IP revisado, quiere decir que es un IP nuevo, lo almacena en un archivo ip_DB, y lo envía por mail a las personas correspondientes, si el IP no es nuevo, termina el programa, de esta manera estaremos seguros de contar con la dirección IP actual en nuestro buzón de correo.
<?php
require('/home/fulanito/cronjobs/ipmailer/class.phpmailer.php');
require('/home/fulanito/cronjobs/ipmailer/class.smtp.php');
$db_ip = "/home/fulanito/cronjobs/ipmailer/ip_DB";
$ip_nuevo = shell_exec("curl -s 208.78.70.70|sed -e 's/.*Dirección IP Actual: //' -e 's/<.*$//'"); //http://checkip.dyndns.org/
$ip_viejo = shell_exec("tail -n 1 $db_ip");
if ($ip_nuevo == $ip_viejo){
exit();
}
else { //Son diferentes, almacena el IP nuevo
$fp = fopen($db_ip, 'a');
fwrite($fp,$ip_nuevo);
fclose($fp);
}
$mail = new PHPMailer(); //Sin el parametro TRUE
$mail->IsSMTP(); //Diciendole a la Clase que usaremos SMTP
try {
$mail->SMTPAuth = true; //Habilitamos la autenticación SMTP
$mail->Host = "smtp.copaco.com.py"; //Fijamos el servidor SMTP
$mail->Port = 25; //Fijamos el puerto SMTP
$mail->Username = "fulanito@click.com.py"; //El nombre de la cuenta SMTP
$mail->Password = "xxxxx"; //La contraseña SMTP
$mail->AddReplyTo('fulanito@click.com.py', 'Fulano');
//Aquí van las cuentas que deseo notificar con el IP nuevo
$mail->AddAddress('usuario@dominio.com', 'Usuario');
$mail->AddAddress('otrousuario@otrodominio.com', 'Otro Usuario');
$mail->SetFrom('fulanito@click.com.py', 'Fulano');
$mail->AddReplyTo('fulanito@click.com.py', 'Fulano');
$mail->Subject = 'IP de la PC';
$mail->AltBody = ''; //Opcional - MsgHTML creará un texto de alternativa si no puede enviar como HTML
//Aquí se podría enviar en formato de html, pero simplemente enviamos el IP nuevo en texto plano.
// $mail->MsgHTML(file_get_contents('contents.html'));
$mail->MsgHTML($ip_nuevo);
$mail->Send();
echo "Mensaje enviado OK\n"; //Sin notificación
} catch (phpmailerException $e) {
echo $e->errorMessage(); //Error del PHPMailer
} catch (Exception $e) {
echo $e->getMessage(); //Error de cualquier otra cosa
}
?>
Como podemos ver, son 3 archivos que están en el mismo directorio, el archivo ip_DB que se comporta como una mini base de datos, el archivo en cuestión que codificamos (lo llamaremos: mailer.php), y las dos Clases que están en php.
Ahora veremos para ponerlo en el Cron, escribimos en la consola, como root o como otro usuario:
crontab -e
Quedaría algo así:
# m h dom mon dow command */30 * * * * /usr/bin/php5 /home/fulanito/cronjobs/ipmailer/mailer.php
Si no funciona, depuramos el cron mediante el siguiente código:
# m h dom mon dow command */30 * * * * /usr/bin/php5 /home/fulanito/cronjobs/ipmailer/mailer.php > /home/fulanito/cronjobs/ipmailer/errores.log
De esta manera arrojará los errores al archivo errores.log
Saludos!

Eduardo
Tuesday, 27 April 2010
Oh Dois!… yo creia que podía saber mi IP sin sin tener que convertirme un superprogramador web… ¿No hay pio una opción mas para el público general?
CrystalBlood
Tuesday, 27 April 2010
Pero se supone que no tenes acceso a la PC, entonces en ese caso te salva, y por otro lado, si se cambió la IP, la única forma de saberlo es estando frente a la PC, en el peor caso esperás media hora… jaja pero depende, podes bajarle el tiempo a 5 minutos en el cron también…
dieguitoplus
Tuesday, 27 April 2010
que mazorca, super util la info!
CrystalBlood
Tuesday, 27 April 2010
Che.. este Script debe funcionar en tu MAC también… ahora que pienso…
Arnal
Tuesday, 27 April 2010
excelente, una opcion mas para utilizar.
malditonerd
Tuesday, 27 April 2010
Un aplauso, muy bueno sinceramente. Me llevo la sintaxis del script que me viene bárbaro para otros usos que tengo en mente
¡Saludos!
Delphino
Wednesday, 28 April 2010
Gracias Amigo, no uso php, pero con FPC pienso utilizar tu idea, gracias por el tip.
kuiofer
Wednesday, 28 April 2010
Masa la app!!!!
Es decir, te tira un mail para ver en que IP esta
¿Se puede hacer una pagina web que levante la IP?
Asi con un “get” nomas ya tomas la IP y no hay mucho cambio en algun codigo que utilice la server esta
Awsome bro
Adrian
Wednesday, 28 April 2010
Muy bueno el código, pero podrías usar el servicio gratuito de http://www.dyndns.com que te permite crear un subdominio tipo mihost.dyndns.com el cual siempre va a apuntar a tu IP DINAMICA jaja, si, hace algo parecido a lo que vos haces, mediante un programa que corre en tu pc (o server) chequea cada cierto tiempo tu IP y cuando cambia, el programa actualiza el registro de tu ip en dyndns.
Algunos routers tienen integrado el servicio de http://www.dyndns.com y otros parecidos como http://www.no-ip.com
Al final, para saber tu ip solo bastaria con hacerle ping al subdominio que creaste
SlorawropMary
Wednesday, 8 December 2010
Hola, muy interesante el post, felicitaciones desde Panama!