Enviar IP dinâmico por e-mail

Publicado por Samuel Toaldo em 18/10/2012

[ Hits: 10.643 ]

 


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

Área de Troca (swap)

Script pessoal para uso em firmware de access point para conexão automática de PPPOE

Comando tar detectando tipo de arquivo automaticamente

Darktable traduzido para pt_BR

Instalando e configurando sua Vivo Zap (Kyocera)

  

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