jueves, agosto 28, 2014

Enviar un correo electrónico con nuestra ip real linux

Correo electrónico con la ip real de nuestra máquina.


ACTUALIZADO: Ahora es inteligente, y comprueba la ip anterior, y si es diferente envia el correo, y si no, no hace nada.

Tras probar el servicio como noip.com, que estaba bien, pero me hacia cosas raras, me quitaban los host de la pagina, y no podia volverlos a crear porque decian que ya existia. He buscado la solución para  que la propia raspberry cada 3 días me envie un correo con la ip (aunque tengamos ip dinamicas, estando los routers siempre encendidos y usandose para llamar por telefonos apenas cambian de ip).


1º Instalar el programa que se usara para enviar correos electrónicos. Y otros servicios que ayudaran a conectarse.

sudo apt-get install libnet-ssleay-perl libio-socket-ssl-perl sendemail

Curiosamente una de las funciones tiene un bug, si os da el error de:
"invalid SSL_version specified at /usr/local/share/perl/5.14.2/IO/Socket/SSL.pm line 332"

Debeis editar el fichero:
 
sudo nano usr/share/perl5/IO/Socket/SSL.pm

Y cambiar la linea donde indique:

m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))$}i

Por

m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i

Es igual pero ha quitado el $ entre los parentesis finales.

2Aº Creamos un archivo ejecutable SH: Ejecutarse cada x dias.

#!/bin/bash

# Get your ip
ip=`wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'`;

echo $ip

sendemail -f CuentaQueEnvia@gmail.com -t CuentaAEnvia@gmail.com -s smtp.gmail.com:587 -u "La ip es ${ip}" -m "La ip es ${ip}. Vamos lo mismo que arriba" -v -xu CuentaSin@ -xp ClaveCuenta -o tls=yes
2Bº Creamos un archivo ejecutable SH. Cuando se ejecuta comprueba un archivo donde se guarda la ultima ip, y si es diferente manda correo, si no, nada.

#!/bin/bash

# Get your ip
ip_antigua=`head -1 ipexterna`;
ip_nueva=`wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'`;


if [ $ip_antigua != $ip_nueva ]
then
   
     sendemail -f CuentaQueEnvia@gmail.com -t CuentaAEnvia@gmail.com -s smtp.gmail.com:587 -u "La ip es ${ip_nueva}" -m "La ip es ${ip_nueva}. Vamos lo mismo que arriba" -v -xu CuentaSin@ -xp ClaveCuenta -o tls=yes
     wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//' > ipexterna

fi
3º Modificamos el cron para que se ejecute cuando queramos:



crontab -e

30 8 */3 * * sh /home/pi/script.sh

Como detalle importante que he aprendido es el */3, en este caso, el día del mes lo divide entre 3, solo se ejecutara cuando el resto es 0. Se puede poner la periocidad que querais, y también es aplicable para los demás campos (el día de la semana, la hora, minutos.....) y lo envia cada 3 dias empezando desde ese día. Después de observarlo, al parecer coge el día en el que se crea el archivo, se reinicia la raspberry, no lo tengo claro. Pero una vez que coge la frecuencia, lo envia cada 3 dias.

Os recuerdo que el formato de grub es:
minuto hora día_del_mes mes día_de_la_semana

Los siguientes valores numéricos son válidos para cada uno de los campos:

Minuto: Entre 0 y 59
Hora: Entre 0 y 23
Día del mes: Entre 0 y 31
Mes: Entre 0 y 12
Día de la semana: Entre 0 y 7. 0 y 7 equivalen al domingo

Adicionalmente, en los campos mes y día_de_la_semana, podemos usar las tres primera letras del nombre del mes y de los días (en inglés), esto puede ser en mayúsculas o minúsculas. Por lo tanto los valores validos para los días de la semana son: Mon (Lunes), Tue (Martes), Wed (Miércoles), Thu (Jueves), Fri (Viernes), Sat (Sábado), Sun (Domingo); y los valores válidos para los meses son: Jan (Enero), Feb (Febrero), Mar (Marzo), Apr (Abril), May (Mayo), Jun (Junio), Jul (Julio), Aug (Agosto), Sep (Septiembre), Oct (Octubre), Nov (Noviembre), Dec (Diciembre).


Poniendose * como comodin para decir todos.


Fuentes:
Bug conocido del sendemail
http://raspberrypi.stackexchange.com/questions/2118/sendemail-failure

Sacar la ip
http://www.garron.me/en/go2linux/what-is-my-public-ip-command-line.html

Manejo de Cron (muy bueno)
http://www.jveweb.net/archivo/2011/01/usando-cronjobs-en-linux.html

No hay comentarios: