em Sem categoria

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

Artigo retirado do site Dicas-L da Unicamp

Colaboração: Rafael Henrique da Silva Correia

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 10×0 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 = [email protected]
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//.msmtprc
#vim /home//.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 [email protected]
auth on
user [email protected]
password
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\nSubject: 🙂 \nTo: EU YAHOO \n\n$(ifconfig)\n\n” | msmtp -v “[email protected]

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

Usei o echo -e pra escrever a mensagem:

From: EU GMAIL
Subject: 🙂
To: EU YAHOO

$(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:

[email protected]$ echo -e (ifconfig)
(ifconfig)

[email protected]$ 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.