você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

Scripts Shell para obter seu ip 24h por dia na internet discada!

Colaboração: Rafael Henrique da Silva Correia

Data de Publicação: 15 de Janeiro de 2007

Gostaria de mostrar 2 scripts pra vocês que estão me ajudando muito no meu dia-a-dia. Sou um usuário de internet discada, como todos sabem, suas características marcantes são a lentidão e as quedas, 1 por hora dependendo do provedor (se não mais). Eu queria desenvolver um programa que me mantivesse conectado 24h por dia mesmo que eu não estivesse em casa, essa era minha proposta inicial, porém também gosto de usar meu computador mesmo que não esteja em casa, resumindo ssh :)

Criei então dois scripts (um deles baseado na Mala direta de Júlio César Neves no Cantinho do Shell) deste mesmo site!

O primeiro é um script para verificar se a conexão está ativa de um em um minuto, em caso de queda de conexão ele reconecta pelo wvdial

O segundo (que foi baseado na mala direta) envia meu ip de uma em uma hora para meu e-mail! Porque em uma reconexão eu perco meu ip anterior por não ser estático.

wvdial

(o objetivo desta dica é usar o wvdial para conectar, se no caso seu modem não estiver em pleno funcionamento descarte essa dica)

O wvdial é um discador em modo texto do GNU/Linux, encontrado em quase todas as distribuições (se não todas). Ele é muito fácil de ser configurado, você só precisa escrever um arquivo de configuração chamado wvdial.conf no diretório /etc.

Como configurá-lo??

Uma coisa acaba se tornando simples quando você quebra a cabeça durante 3 meses pra ver isso funcionar, no meu caso apanhei de 10x0 do meu modem durante 3 meses, mas quando você passa um tempo quebrando a cabeça você aprende como funcionam as coisas. Há um tempo atrás usava o gnome-ppp (discador do Gnome) agora só uso o wvdial, porque gostei mais dele e ele não tem tantos problemas como o gnome-ppp.

Como configurar seu arquivo ``/etc/wvdial.conf:``

[Dialer Defaults]
Modem = [local do dev do modem]
ISDN = off
Modem Type = Analog Modem
Baud = 115200
Init = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 =
Init4 =
Init5 =
Init6 =
Init7 =
Init8 =
Init9 =
Phone = [número a ser discado]
Phone1 =
Phone2 =
Phone3 =
Phone4 =
Dial Prefix =
Dial Attempts = 1
Dial Command = [discagem tom=ATM1L3DT pulso=ATM1L3DT]
Ask Password = off
Password = [senha]
Username = [seu username COMPLETO]
Auto Reconnect = off
Abort on Busy = on
Carrier Check = on
Check Def Route = on
Abort on No Dialtone = on
Stupid Mode = on
Idle Seconds = 0
Auto DNS = on
;Minimize = off
;Dock = on
;Do NOT edit this file by hand!

Esta seria a sintaxe do arquivo, o meu arquivo de exemplo está aqui:

[Dialer Defaults]
Modem = /dev/ttySL0
ISDN = off
Modem Type = Analog Modem
Baud = 115200
Init = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 =
Init4 =
Init5 =
Init6 =
Init7 =
Init8 =
Init9 =
Phone = 32418415
Phone1 =
Phone2 =
Phone3 =
Phone4 =
Dial Prefix =
Dial Attempts = 1
Dial Command = ATM1L3DT
Ask Password = off
Password = [minha senha]
Username = rafael_henriqu@itelefonica.com.br
Auto Reconnect = off
Abort on Busy = on
Carrier Check = on
Check Def Route = on
Abort on No Dialtone = on
Stupid Mode = on
Idle Seconds = 0
Auto DNS = on
;Minimize = off
;Dock = on
;Do NOT edit this file by hand!

Se o modem de vocês estiver configurado, e este arquivo (/etc/wvdial.conf) estiver certo quando vocês derem o comando:

$wvdial

no terminal ele vai conectar automaticamente. Detalhe deixe as permissões do arquivo /etc/wvdial.conf como 640 e o grupo que vocês tão vendo aí (consultem comandos chgrp e chmod para mais informações):

-rw-r----- 1 root dialout 616 2006-12-16 22:55 /etc/wvdial.conf

Script pra conexão:

#!/bin/bash
#verifique se o processo wvdial está sendo executado

pstree | grep wvdial >> /dev/null

# se wvdial não estiver rodando execute

if [ $? -ne 0 ]; then
clear
x=0
while [ 10 -gt $x ]; do
sleep 1
done
wvdial

#senão não execute
else
clear
exit
fi

Problema da conexão resolvida e o ip agora como eu faço??

Agora eu tinha mais um problema. Como fazer para obter meu ip? Eu queria ficar com o servidor ssh no ar 24h por dia.

Problemas acabados pois já inventaram o sendmail (que é osso pra configurar) e o msmtp (que é facinho, facinho) ! No meu script 2 eu precisava de um "programinha" que me enviasse o ip certo, assim eu caio, o wvdial reconecta e o msmtp me envia o ip por email.

O msmtp é um programa de envio (recebimento não sei pois não testei ainda) de email em modo texto!!

Instalação e configuração msmtp

#apt-get install msmtp

No home do user que você quer usar o msmtp (no meu caso do /home/rafael) você criará o arquivo .msmtprc da seguinte forma:

#touch /home/<user>/.msmtprc
#vim /home/<user>/.msmtprc

Neste arquivo eu configurei o gmail para o envio de mensagens.

Configuração do .msmtprc

# Set default values for all following accounts.
defaults
tls on

# GMail
account gmail
host smtp.gmail.com
port 587
from rafaelhenriqu@gmail.com
auth on
user rafaelhenriqu@gmail.com
password <senha de vcs>
account default : gmail


Agora vou explicar:
account = nome da continha
host = smtp do server
port = porta
from = quem é você
auth = pra requerer autenticação
user = vocês
password = senha (ooohhh sério)
account default = conta padrão que vocês querem usar (ou seja pode configurar mais
de uma conta)

Vamos ao script

#!/bin/bash
echo -e "From: EU GMAIL<rafaelhenriqu@gmail.com>\nSubject: :) \nTo: EU YAHOO <rafael_henriqu@yahoo.com.br>\n\n$(ifconfig)\n\n" | msmtp -v "rafael_henriqu@yahoo.com.br"

Esse script é só de uma linha em Não confundam

Usei o echo -e pra escrever a mensagem:

From: EU GMAIL <rafaelhenriqu@gmail.com>
Subject: :)
To: EU YAHOO <rafael_henriqu@yahoo.com.br>

$(ifconfig)
Subject = assunto
to = destinatário
from = remetente (pode configura lá no arquivo .msmtprc também)
mensagem = $(ifconfig) pra me enviar o ip de uma em uma hora!

Usei o $ por que senão o echo escreveria como texto e não como comando ifconfig dando a resposta dessa forma:

rafael@host$ echo -e  (ifconfig)
(ifconfig)

rafael@host$ echo -e  $(ifconfig)
eth0       Encapsulamento do Link: Ethernet  Endereço de HW 00:11:2F:E0:5A:AA
inet end.: 192.168.0.1  Bcast:192.168.0.255  Masc:255.255.255.0
UP BROADCAST MULTICAST  MTU:1500  Métrica:1
pacotes RX:0 erros:0 descartados:0 excesso:0 quadro:0
Pacotes TX:0 erros:0 descartados:0 excesso:0 portadora:0
colisões:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
IRQ:185 Endereço de E/S:0xa000

lo         Encapsulamento do Link: Loopback Local
inet end.: 127.0.0.1  Masc:255.0.0.0
endereço inet6: ::1/128 Escopo:Máquina
UP LOOPBACK RUNNING  MTU:16436  Métrica:1
pacotes RX:28569 erros:0 descartados:0 excesso:0 quadro:0
Pacotes TX:28569 erros:0 descartados:0 excesso:0 portadora:0
colisões:0 txqueuelen:0
RX bytes:2131846 (2.0 MiB) TX bytes:2131846 (2.0 MiB)

ppp0       Encapsulamento do Link: Protocolo Ponto-a-Ponto
inet end.: 201.69.62.150  P-a-P:200.205.227.45  Masc:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1100  Métrica:1
pacotes RX:59255 erros:0 descartados:0 excesso:0 quadro:0
Pacotes TX:57405 erros:0 descartados:0 excesso:0 portadora:0
colisões:0 txqueuelen:3
RX bytes:56574238 (53.9 MiB) TX bytes:4910467 (4.6 MiB)

/etc/crontab

*/1 * * * *     rafael          /home/rafael/wv.sh
1    * * * *    rafael          /home/rafael/mandarip.sh

O script wv.sh conecta e reconecta o wvdial de um em um minuto. O script mandarip.sh manda o meu ifconfig de uma em uma hora.

Qualquer dúvida sobre o post: <rafaelhenriqu (a) gmail com>



Veja a relação completa dos artigos de Rafael Henrique da Silva Correia