Enviar IP dinâmico por e-mail

Publicado por Samuel Toaldo em 18/10/2012

[ Hits: 10.366 ]

 


Enviar IP dinâmico por e-mail



Oi piázada...

Depois de algumas pesquisas, adaptei um script para enviar o IP dinâmico do servidor por e-mail. Uma "mão na roda" para quem administra vários servidores que NÃO tem IP dedicado.

Vamos utilizar o sSMTP e o Gmail.

Instalando e configurando o sSMTP

Vamos instalar o sSMTP, responsável por enviar os e-mails:

Instalação do sSMTP em distribuições baseadas no Debian:

# apt-get install ssmtp

Após instalar o sSMTP, precisamos configurar os arquivos "ssmtp.conf" e "revaliases".

Editando ssmtp.conf:

# vim /etc/ssmtp/ssmtp.conf

Altere o conteúdo para:

root=postmaster
hostname=localhost
rewriteDomain=gmail.com
authUser=SEU_EMAIL@gmail.com
authPass=SUA_SENHA_DO_GMAIL
authMetod=plain
fromLineOverride=NO
mailhub=smtp.gmail.com:465
useTLS=YES


Editando "revaliases":

# vim /etc/ssmtp/revaliases

Insira a seguinte linha no fim do arquivo:

root:SEU_EMAIL@gmail.com:smtp.gmail.com:465


* Obs.: Repare que está em caixa alta as alterações que devem ser feitas nos arquivos.

Agora, vamos configurar o script para enviar o IP.

Criando o script para enviar o IP por e-mail

Crie o arquivo "enviar_ip.sh" dentro de /etc (para ficar organizado).

Criar o arquivo:

# vim /etc/enviar_ip.sh

Insira o seguinte conteúdo:

#!/bin/bash

# Obtém o IP externo do servidor e salva na memória

IP_ANTERIOR=`cat ip.txt`
IP_ATUAL=`lynx --dump http://checkip.dyndns.org/|cut -c24-`

echo IP atual: $IP_ATUAL, IP anterior: $IP_ANTERIOR

# Verifica se IP alterou e envia um email
if [ "$IP_ATUAL" = "$IP_ANTERIOR" ]; then
    echo "IP não mudou. Nada a fazer."
    exit 0

else

# Apaga o conteudo do arquivo
echo "" > ip.txt

echo "Ops, IP mudou. Enviando arquivo por email..."

# Atualiza o conteudo do arquivo
echo "$IP_ATUAL" > ip.txt

# Atutaliza o conteudo do arquivo para enviar o email
echo "Subject: [IP] NOME_DO_SERVIDOR - NOME_DO_CLIENTE" > enviar.txt
echo "From: SEU_EMAIL@gmail.com" >> enviar.txt
echo "$IP_ATUAL" >> enviar.txt

# Depois que criou o arquivo acima envia o email
ssmtp SEU_EMAIL@gmail.com < enviar.txt

fi


Obs.: Não se esqueça de salvar: wq!

Comentário sobre o script

A fato de curiosidade, vamos esclarecer as linhas do script. Se não tiver interesse, pule para a próximo passo.
  • IP_ANTERIOR=`cat ip.txt` → Coloca dentro de uma variável o último IP válido
  • IP_ATUAL=`lynx --dump http://checkip.dyndns.org/|cut -c24-` → Coloca dentro de uma variável o IP atualizado
  • echo IP atual: $IP_ATUAL, IP anterior: $IP_ANTERIOR → Compara as duas variáveis
  • if [ "$IP_ATUAL" == "$IP_ANTERIOR" ]; then → Verifica que as duas várias são iguais
    • echo "IP não mudou. Nada a fazer."
    • exit 0 → Se forem iguais, não retorna nada e sai
  • else → Se as variáveis forem diferentes, realiza o procedimento abaixo
  • echo "" > ip.txt → Apaga o último IP do arquivo
  • echo "$IP_ATUAL" > ip.txt → Coloca o IP atualizado no arquivo
  • echo "Subject: [IP] NOME_DO_SERVIDOR - NOME_DO_CLIENTE" > enviar.txt → Coloca o assunto no arquivo "enviar.txt"
  • echo "From: SEU_EMAIL@gmail.com" >> enviar.txt → Coloca o email que envio no arquivo "enviar.txt"
  • echo "$IP_ATUAL" >> enviar.txt → Coloca o IP atualizado no arquivo "enviar.txt"
  • ssmtp SEU_EMAIL@gmail.com < enviar.txt → Envia o email com o conteúdo do arquivo "enviar.txt"
  • fi → Finalizando script

Agora devemos tornar o script executável. Criando executável:

# chmod +x /etc/enviar_ip.sh

E precisamos criar os arquivos "ip.txt" para guardar o IP atualizado e o arquivo "enviar.txt" para guardar o que será enviado por e-mail.

Criando arquivos:

# touch ip.txt
# touch enviar.txt


Agora, execute o shell script e verifique se chegou a mensagem em seu e-mail:

Executando o script:

# /etc/enviar_ip.sh

Pronto, agora só precisa agendar no Crontab quantas vezes por dia quer rodar o script, e o executar a cada hora. Ficou assim:

Agendamento para enviar e-mail com o IP:

0 * * * * root /etc/enviar_ip.sh


Dúvidas e sugestões sempre são bem-vindas!

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

TinyMe - PCLinuxOS "leve"

Servidor Debian 8 (Jessie) - Guia de instalação, configuração e administração

Instalando Microsoft Office 2007 no Fedora

Instalando o PostgreSQL e pgAdmin3 no Ubuntu

Slackware + NetBeans 6.1

  

Comentários
[1] Comentário enviado por tutu_bh em 18/10/2012 - 09:49h

A algum tempo postei um script com a mesma função que checava mais de uma interface, mas não sei por qual motivo não foi aprovado.

So que no meu caso eu utlizo o sendEmail.

nao sei se vai ficar bom aqui.

#!/bin/bash


#Script para enviado de email com novo ip do servidor.
#
#Crie o arquivo /etc/interfaces e coloque a(s) interface(s) com acesso a internet, se voce tiver mais de um link, coloque
# uma interface abaixo da outra.
#ex:
#eth0
#eth1
#
#É nescessario o programa sendEmail para envio do email
# ele pode ser encontro em: http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v156.zip
#
#descompacte o arquivo sendEmail.pl em /usr/bin
#
#

HOSTNAME=`hostname`
HORA_DIA=`date +%T----%D`

##### VARIAVEIS PARA ENVIO DO EMAIL
SEND=email_enviado@email.com
SENHA=XXXXXX
EMAIL=email@email.com
SERVIDOR=1.1.1.1



#=======================================================================

if test -e /etc/interfaces ;then
echo ""
else
echo "ARQUIVO DE INTERFACES NAO EXISTE, CRIE O ARQUIVO /etc/interfaces "
exit 0

fi

cat /etc/interfaces |
while read interfaces; do
echo "Checando IP interface $interfaces"
## Pegando o IP externamente
IP=`curl -k --interface $interfaces --silent http://getip.krisk.org/`

###### Checando a existencia do conf
if test -e /tmp/"$interfaces"_ip.tmp ; then
echo "Registro de IP existente"
else
echo "Criando arquivo com registro de IP"
touch /tmp/"$interfaces"_ip.tmp
echo "$IP" > /tmp/"$interfaces"_ip.tmp
fi
##### arquivo com Ip existente
IP_INI=`cat /tmp/"$interfaces"_ip.tmp`

#### Validando o ip existente para o novo
if test "$IP" = "$IP_INI"; then
echo "Ip continua o mesmo !"
else
echo "$IP" > /tmp/"$interfaces"_ip.tmp

echo "IP Mudou, enviando email."
sendEmail.pl -f $SEND -s $SERVIDOR -t $EMAIL -m "O novo IP do servidor e: $IP. O IP antigo era: $IP_INI " -u "O Ip do servidor $HOSTNAME mudou as

$HORA_DIA " -xu $SEND -xp $SENHA -q

fi
done

[2] Comentário enviado por samusrt em 18/10/2012 - 10:45h

Há.. não esqueçam de instalar o lynx:

apt-get install lynx

E comando IF tirem um sinal "=", pq senão o Crontab não vai fazer o IF. Fica assim:

if [ "$IP_ATUAL" = "$IP_ANTERIOR" ]; then
echo "IP não mudou. Nada a fazer."
exit 0

[3] Comentário enviado por cesar.info em 30/10/2012 - 12:09h

Ei... pra saber o ip válido (roteável) basta digitar:

# curl ifconfig.me

Retorna apenas o ip, sem precisar tratar nada.

[4] Comentário enviado por samusrt em 30/10/2012 - 15:53h


[3] Comentário enviado por cesar.info em 30/10/2012 - 12:09h:

Ei... pra saber o ip válido (roteável) basta digitar:

# curl ifconfig.me

Retorna apenas o ip, sem precisar tratar nada.



Poderia dar mais detalhes do seu comando???

[5] Comentário enviado por rfergomes em 08/05/2013 - 16:47h

[code]

#!/bin/bash

# Variaveis
IP=`lynx --dump http://checkip.dyndns.org/|cut -c24-`
ISP=`lynx --dump http://www.checkip.org/ | grep -i city | cut -c14-`
USUARIO=`logname | sed -r 's/(^.| .)/\U&/g'`
MAQUINA=`hostname | sed -r 's/(^.| .)/\U&/g'`
data=`date`
Email=/tmp/enviar.txt
Fonte=`pwd`
HD=`hddtemp /dev/sda | cut -c11-`
Processador=`sensors | grep Core | cut -c1-25`

clear
echo "Aguarde..."

# Preparando o envio por ssmtp com HTML
echo "to: email@dominio.com" > $Email
echo "Subject: [ NOVO STATUS DO SERVIDOR $MAQUINA ]" >> $Email
echo "From: rfergomes@ig.com.br" >> $Email
echo "MIME-Version: 1.0" >> $Email
echo "Content-Type: text/html; charset=\"us-ascii\"" >> $Email
echo "Content-Disposition: inline" >> $Email
echo >> $Email
echo "<html>" >> $Email
echo "<h1>Relatório do Servidor</h1>" >>$Email
echo "<h4>Temperatura dos Processadores <br> $Processador</h4>" >> $Email
echo >> $Email
echo "<h4>Temperatura do Disco Rígido <br> $HD</h4>" >> $Email
echo >> $Email
echo "<h2> IP Atual: $IP </h2>" >> $Email
echo >> $Email
echo "<hr>" >> $Email
echo "<h5><a href=mailto:rfergomes@gmail.com>$USUARIO</a> <br> <a href=http://www.ccbemusica.com.br>Acesse: CCB e M�sica</a><h5>" >> $Email
echo "<h4>ISP: $ISP <br> Data: $data <br>Usu�rio: $USUARIO <br>Maquina: $MAQUINA <br<Script: $Fonte</>" >> $Email

echo "</html>" >> $Email


# Enviando os dados acima por email
ssmtp rfergomes@gmail.com < $Email

clear
echo "*********************"
echo "* Email enviado!! *"
echo "*********************"
sleep 6
clear


[/code]


www.ccbemusica.com.br



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts