martes, 4 de marzo de 2014

Raspberry Pi: Conocer ip publica, y mandarla por correo con tarea cron

Con curl haremos una petición a alguna web que te dice tu ip (http://myip.dnsomatic.com/, http://myexternalip.com/raw, icanhazip.com, ifconfig.me):
pi@raspberrypi ~ $ sudo apt-get install curl # si nos hace falta instalar curl
pi@raspberrypi ~ $ curl icanhazip.com
xxx.xxx.xxx.xxx
Para enviar correos tenemos que instalar [fuente], sendmail, ssmtp, mailutils:
pi@raspberrypi ~ $ sudo apt-get install postfix mailutils
Para enviar emails:
echo "texto a teclear" | mail -s "Asunto" usuario1@dominio.com
Este seria el correo que querríamos mandar:
echo "$(curl ifconfig.me) $(date)" | mail -s "RaspberryPi: $(curl icanhazip.com) $(date)" enlamina@gmail.com
Creamos un script que mande el correo [*]:
pi@raspberrypi ~ $ vi scripts/mailip.sh

#!/bin/sh
# scripts/mailip.sh
# Correo con la ip externa
echo "$(curl ifconfig.me) $(date)" | mail -s "RaspberryPi: $(curl icanhazip.com) $(date)" enlamina@gmail.com
Guardamos con :wq y cambiamos permisos de ejeccución:
pi@raspberrypi ~ $ chmod u+x scripts/mailip.sh 
Comprobamos el estatus de el demonio de cron y editamos /etc/crontab y añadimos linea:
pi@raspberrypi ~ $ sudo /etc/init.d/cron status
[ ok ] cron is running.

pi@raspberrypi ~ $ sudo vi /etc/crontab 

# /etc/crontab: system-wide crontab
# m h dom mon dow user  command
00 10   * * *   pi     /home/pi/scripts/mailip.sh
y reiniciamos cron:
pi@raspberrypi ~ $ sudo /etc/init.d/cron restart
Se pueden programar tareas para cuando se inicia la maquina, ejemplo:
@reboot pi /home/pi/scripts/mailip.sh
Ahora vamos a usar un servicio de dns dinámico, será http://www.dnsdynamic.org/ API, y actualizaremos a la ip que tiene que apuntar cada media hora con una tarea cron, una vez que nos demos de alta creamos la tarea:
pi@raspberrypi ~ $ vi scripts/update_dnsdynamic.sh

#!/bin/bash

DNSD_USERNAME=enlamina@gmail.com
DNSD_PASS=mi_clave
DNSD_SERVER=www.dnsdynamic.org
DNSD_HOSTNAME=raspberryverdor.dnsdynamic.net
MY_IP=$(curl icanhazip.com)

curl -s -u $DNSD_USERNAME:$DNSD_PASS "https://$DNSD_SERVER/api/?hostname=$DNSD_HOSTNAME&myip=$MY_IP"
sleep 3
exit 0

Damos permisos de ejecución:
pi@raspberrypi ~ $ chmod u+x update_dnsdynamic.sh
Editamos con la herramienta de crontab para el usuario pi y añadimos la tarea:
pi@raspberrypi ~ $ sudo crontab -u pi -e

# m h  dom mon dow   command
*/30 * * * * /home/pi/scripts/update_dnsdynamic.sh

No hay comentarios:

Publicar un comentario