Script paro o Vivo Zap no Linux

FONTE: http://www.gdhpress.com.br/

As conexões móveis estão se tornando as sucessoras do acesso discado, no sentido de que estão disponíveis em praticamente qualquer lugar, atendendo até mesmo as áreas mais afastadas, onde outras modalidades de conexões não estão disponíveis, além de fazerem a alegria de quem precisa de uma conexão contínua em qualquer lugar para trabalhar ou manter contato com os amigos.

Embora existam muitas arestas a aparar, as conexões via 3G são bem suportadas no Linux, muito embora a configuração nem sempre seja tão simples quando poderia.

Uma avanço importante foi a adição do suporte a modems 3G no NetworkManager, que já está disponível para os usuários do Ubuntu 8.10. Ao plugar um modem compatível, ele pergunta se você quer configurar a conexão e a partir daí a opção da rede 3G fica disponível na lisa de redes, pronta para ser ativada quando necessário. Entretanto, o NetworkManager ainda não oferece suporte a conexões via Bluetooth e nem atende a usuários de todas as distribuições.

Recentemente, recebi alguns equipamentos da Vivo para testes (agradecimentos ao Átila e ao Celso), o que me permitiu elaborar um script de conexão cobrindo as três principais formas de conexão no Linux, que são:

1- Um modem USB, ou um celular lugado na porta USB, sendo usado como modem
2- Conexão via Bluetooth DUN (que é o modo de compartilhamento usado nos Nokia e na maioria dos outros aparelhos)
3- Conexão via Bluetooth PAN (que é o modo usado no Windows Mobile)

A conexão via modems USB é relativamente simples, mas as outras duas são um pouco mais complicadas, mas o script ajuda a configurar a conexão fazendo apenas algumas perguntas simples.

Intencionalmente, ele foi escrito usando uma interface o mais simples possível, utilizando apenas menus de texto, de forma a ser o mais compatível possível e rodar em qualquer distribuição sem a necessidade de instalar pacotes adicionais. Para as conexões via USB ele precisa apenas que o wvdial esteja instalado (e que o Kernel em uso ofereça suporte ao modem) e para as conexões via Bluetooth ele precisa também do bluez, que vem pré-instalado em quase todas as distribuições atuais.

Ele inclui também alguns workarounds para problemas comuns (como o ajuste da rota padrão) e mensagens explicativas para erros comuns.

Por enquanto o script ainda está em testes, por isso alguns beta-testers seriam bem-vindos :). Apesar do nome, ele pode ser usado também para conexões com outras operadoras, basta substituir a seção de configuração no início do script.

Baixe aqui: http://www.gdhpress.com.br/blog/arquivos/conectar-vivozap

Para usar o script, valem os passos de sempre: use o “salvar como” em vez de clicar diretamente no link e use o “chmod +x” para ativar a permissão de execução. Por enquanto o script funciona apenas quando executado diretamente como root, devido à necessidade de modificar a configuração do ppp e do Bluetooth. Da primeira vez que é executado, o script faz as perguntas necessárias e gera um arquivo de configuração e a partir da segunda conexão ele conecta diretamente, usando a configuração anteriormente gerada. A idéia central é tornar a conexão o mais simples possível.

Para quem está curioso, aqui vai o “código fonte” do script (o Wordpress troca as aspas e alguns outro caracteres por causa do UTF-8, por isso não tente copiar o texto diretamente. Em vez disso, baixe usando o link acima).

#!/bin/sh
# Script para conectar no Vivo Zap usando um smartphone como modem
# Por Carlos E. Morimoto
# http://www.gdhpress.com.br
# http://www.guiadohardware.net
# Pode ser alterado e redistribuído livremente dentro dos termos da GPL
# Caracteres estranhos? Mude a codificação do editor para UTF-8# Configurações da Operadora
user=”vivo”
pass=”vivo”
telc=”*99#”
APN=”zap.vivo.com.br”

# Claro
#user=”claro”
#pass=”claro”
#telc=”*99***1#”
#APN=”claro.com.br”

# TIM
#user=”tim”
#pass=”tim”
#telc=”*99#”
#APN=”tim.br”

# Giro
#user=”giro@giro.click21.com.br”
#pass=”giro”
#telc=”#777″
#APN=”giro.click21.com.br”

# Ajusta o charset
export LANG=pt_BR.UTF-8
export CHARSET=UTF-8

# Verifica se o script está sendo executado pelo root.
# Por enquanto ele não funciona através do sudo por causa do uso do echo para
# escrever em arquivos de configuração.
if [ "`id -u`" != "0" ]; then
echo ‘Este script precisa ser executado como root. Digite “su -” para se logar
como root e execute o script novamente.
Se você está usando o Ubuntu, defina a senha de root usando o comando
“sudo passwd” e em seguida logue-se usando o “su -”.
Para facilitar, você pode copiar este script para a pasta /usr/local/bin/, de
forma a não precisar mais executá-lo usando o caminho completo ou o ./

read pausa
exit 0
fi

# Funções usadas ao longo do scrip

bpairing()
{

# Fecha o kbluetoothd
killall kbluetoothd.real &>/dev/null

echo “Localizando aparelhos com bluetooth nas proximidades:”
echo ”
hcitool scan
echo ”
echo ‘Digite o endereço do endereço bluetooth do seu aparelho, conforme mostrado
na lista acima (dica: você pode colar usando o botão do meio do mouse).
Se por acaso ele não aparecer, verifique se ele está configurado em modo
“Visível por todos”, ou informe o endereço manualmente. Nos Nokia, você pode
descobrir o endereço do bluetooth digitando *#2820#.
Ex: 00:21:FE:CF:A2:E1′
read blueaddr
echo blueaddr=\”$blueaddr\” >> /home/$USER/.3gconfig

echo ”
echo ‘Testando a conexão com o smartphone’
l2ping -c 3 $blueaddr
echo ”

clear
echo ‘Digite o PIN que será usado ao fazer o pairing entre o PC e o smartphone
O PIN é um código numérico de segurança, que você digita nos dois aparelhos ao
fazer o pareamento. É recomendável escolher um código com pelo menos 8 dígitos.
Ex: 2985679833′
read pin
echo “pin=\”$pin\”" >> /home/$USER/.3gconfig

# Descobre o nome da maquina. Se algo der errado, o nome é ‘pc’
nome=`cat /etc/hostname`
if [ -z "$nome" ]; then
nome=”pc”
fi

# Gera a configuração do hcid:
cat </etc/bluetooth/hcid.conf
options {
autoinit yes;
security auto;
pairing multi;
passkey “$pin”;
}
device {
name “$nome”;
class 0×3e0100;
iscan enable; pscan enable;
lm accept;
lp rswitch,hold,sniff,park;
}
EOF

# Coloca o PC em modo discoverable
cd /var/lib/bluetooth/??:??:??:??:??:??
sed -i -e “s/mode connectable/mode discoverable/g” config &>/dev/null
verif=`cat config | grep discoverable`
if [ -z "$verif" ]; then echo “mode discoverable” >> config; fi
cd /

# Reinicia o bluetooth e ativa a porta
/etc/init.d/bluetooth restart
hciconfig hci0 up &>/dev/null
}

bcanal()
{
clear
echo ‘Preciso agora saber qual é o canal usado pelo DUN no seu aparelho.
Os aparelhos da Nokia usam o canal 2 e aparelhos de outras marcas usam
geralmente o canal 1. Use o comando “sdptool search DUN” para descobrir qual
canal seu aparelho usa, em caso de dúvidas.

2 : Aparelhos da Nokia
1 : Aparelhos de outros fabricantes

Ex: 2′
read canal
channel=”channel $canal”
echo channel=\”channel $canal\” >> /home/$USER/.3gconfig

# Gera a configuração do rfcomm
echo ‘rfcomm0 {’ > /etc/bluetooth/rfcomm.conf
echo ‘ bind yes;’ >> /etc/bluetooth/rfcomm.conf
echo ” device $blueaddr;” >> /etc/bluetooth/rfcomm.conf
echo ” $channel;” >> /etc/bluetooth/rfcomm.conf
echo ” comment \”$nome\”;” >> /etc/bluetooth/rfcomm.conf
echo ‘}’ >> /etc/bluetooth/rfcomm.conf
}

bmesg()
{
clear
echo ‘Falta agora o mais importante, que é fazer o pareamento entre o PC e
o smartphone. No aparelhos da Nokia com o S60, isso é feito através do
Configuraçs. > Conectiv. > Bluetooth. Use o direcional para a direita para
acessar o menu de dispositivos pareados e acesse o Opções > Novo Disp.
pareado > Mais dispositivos para iniciar a busca. Assim que o PC aparecer
na lista, clique no Parar e clique sobre ele para fazer o pairing. Quando
perguntado, informe o mesmo código PIN que definiu na opção anterior e
responda que sim quando ele perguntar se você deseja que o PC possa
abrir conexões automaticamente.
Obs: Se você está usando o Ubuntu, faça o pairing usando o applet Bluetooth
ao lado do relógio, clicando no Configurar novo dispositivo.
Se você já fez o pairig anteriormente, não é necessário fazê-lo de novo.

Depois de feito o pareamento, pressione Enter para continuar.’
read pausa
}

errowvdial()
{
echo ‘Não consegui encontrar o wvdial, que preciso para estabelecer a conexão.
Você pode instalá-lo usando o gerenciador de pacotes, ou diretamente via linha
de comando:

No Ubuntu, Kubuntu, Kurumin, Satux ou outra distribuição derivada do Debian use:
apt-get update
apt-get install wvdial

No Mandriva, use:
urpmi wvdial

No Fedora, use:
yum install wvdial

No OpenSUSE, use:
zypper install wvdial

(se por acaso ele estiver instalado em uma localização fora do padrão, crie
o link /usr/bin/wvdial, apontando para ele)’
}

checaporta()
{
echo “Detectando o modem USB…”
sleep 1

if [ -e "/dev/ttyACM0" ]; then
echo “Modem encontrado em /dev/ttyACM0″; sleep 2
porta=”/dev/ttyACM0″
echo ‘porta=”/dev/ttyACM0″‘ >> /home/$USER/.3gconfig

elif [ -e "/dev/ttyUSB1" ]; then
echo “Modem encontrado em /dev/ttyUSB1″; sleep 2
porta=”/dev/ttyUSB1″
echo ‘porta=”/dev/ttyUSB1″‘ >> /home/$USER/.3gconfig

elif [ -e "/dev/ttyUSB0" ]; then
echo “Modem encontrado em /dev/ttyUSB0″; sleep 2
porta=”/dev/ttyUSB0″
echo ‘porta=”/dev/ttyUSB0″‘ >> /home/$USER/.3gconfig

elif [ -e "/dev/usb/ttyUSB0" ]; then
echo “Modem encontrado em /dev/usb/ttyUSB0″; sleep 2
porta=”/dev/usb/ttyUSB0″
echo ‘porta=”/dev/usb/ttyUSB0″‘ >> /home/$USER/.3gconfig
else
echo ‘Não consegui localizar o modem. No Linux, modems GSM USB (e smartphones
em modo de acesso à web conectados ao PC via USB) são acessados pelo sistema
através da porta /dev/ttyACM0 ou /dev/ttyUSB0 , que é automaticamente criada
ao plugar o modem.

Se você está usando um smartphone, experimente desligá-lo, ligá-lo e conectá-lo
novamente. Se está usando um aparelho da Nokia, certique-se de que ele está
configurado para se conectar ao PC em modo PC suíte (a configuração vai no
Conectividade > USB). Em alguns aparelhos novos, como o E71 está disponível o
modo “Conect. PC à Internet”, mas ele não funciona no Linux. Use o modo PC
Suíte.

Se você está usando um modem huawei E220 ou E226 em uma distribuição antiga
(com um Kernel anterior ao 2.6.20), você precisa executar o arquivo huawei.out
para ativar o modem antes de executar este sctipt. Veja a dica no:
http://wiki.ubuntu-br.org/TimWeb

Se por acaso seu modem utiliza uma porta diferente, você pode indicá-la aqui,
e deixar que o script tente utilizá-la. Caso contrário pressione Ctrl+C para
sair.

Especifique a porta ou pressione Ctrl+C para sair
Ex: /dev/usb/ttyUSB1′
read porta

if [ -n "$porta" ]; then
echo “Usando $porta”
porta=”/dev/usb/ttyUSB0″
echo ‘porta=”/dev/usb/ttyUSB0″‘ >> /home/$USER/.3gconfig
else
exit 1
fi
fi
}

checarrota()
{
clear
echo ‘Muitas distribuições antigas (anteriores a 2008) usam uma versão bugada do
wvdial que não altera a rota padrão depois de conectado, o que faz com que o
sistema continue tentando acessar através da placa de rede ou outra conexão já
existente em vez de acessar usando a conexão 3G, o que causa o famoso “conecta
mas não navega”. Nesses casos, é necessário rodar o comando “route del default”
antes de estabelecer a conexão. Se este é o seu caso, responda “s” e farei isso
para você.’
echo ”
echo ‘Remover a rota padrão antes de conectar? (s/n)’
read resposta

if [ "$resposta" = "s" ]; then
delroute=”1″; echo ‘delroute=”1″‘ >> /home/$USER/.3gconfig
else
delroute=”0″; echo ‘delroute=”0″‘ >> /home/$USER/.3gconfig
fi

}

reconfigurar()
{

echo ‘Este é um script para conectar no Vivo Zap usando um modem 3G USB ou um
smarthphone que permita o acesso via DUN ou PAN, via Bluetooth.
Para usá-lo, é necessário fazer o pareamento entre o PC e o smartphone, o que
faremos no passo seguinte. O script usa o wvdial para fazer a conexão, por
isso é necessário que ele esteja instalado. Você pode instalá-lo usando o
gerenciador de pacotes, basta fazer uma busca por “wvdial.”‘
echo ”
echo ‘Qual tipo de aparelho você está usado?’
echo ”
echo ‘1 Modem USB (ou um smartphone ligado na porta USB’
echo ‘2 Smartphone com o Windows Mobile 6, com o Compartilhamento de Internet’
echo ‘3 Smartphone da Nokia ou outro com suporte a DUN via Bluetooth’
echo ”
echo “(responda 1, 2 ou 3)”
read resposta
clear

# Só por via das dúvidas…
mkdir /home/$USER/ &>/dev/null

if [ "$resposta" = "1" ]; then
conn=”usb”
echo ‘conn=”usb”‘ > /home/$USER/.3gconfig
elif [ "$resposta" = "2" ]; then
conn=”pan”
echo ‘conn=”pan”‘ > /home/$USER/.3gconfig
elif [ "$resposta" = "3" ]; then
conn=”dun”
echo ‘conn=”dun”‘ > /home/$USER/.3gconfig
else
echo ‘Ops, você digitou uma opção inválida. Este script ainda não foi
devidamente instruído a lidar com condições inesperadas, por isso será fechado.’
exit 1
fi

# Função para conexão USB
if [ "$conn" = "usb" ]; then
echo ‘Certifique-se de que seu modem GSM ou smartphone está ligado à porta USB.’
sleep 2
checaporta
checarrota
fi

# Função para Bluetooth PAN (Windows Mobile)
if [ "$conn" = "pan" ]; then
bpairing
bmesg
# Precisamos remover a rota padrão antes de ativar a conexão, já que não
# usamos o wvdial
delroute=”1″
echo ‘delroute=”1″‘ >> /home/$USER/.3gconfig
fi

# Função para Bluetooth DUN
if [ "$conn" = "dun" ]; then
bpairing
bcanal
bmesg
checarrota
porta=”/dev/rfcomm0″
echo ‘porta=”/dev/rfcomm0″‘ >> /home/$USER/.3gconfig
fi

# Pergunta sobre o DNS
#clear
#echo “Usar os servidores DNS do provedor? (s/n)”
#read resposta
#if [ "$resposta" = "n" ]; then
#echo ‘Digite o servidor de DNS primário’
#echo ‘ex: 208.67.222.222′
#read dns1; echo “dns1=$dns1″ >> /home/$USER/.3gconfig; echo ”
#echo ‘Digite o servidor de DNS secundário’
#echo ‘ex: 208.67.220.220′
#read dns2; echo “dns2=$dns2″ >> /home/$USER/.3gconfig
#autodns=”off”; echo ‘autodns=”off”‘ >> /home/$USER/.3gconfig
#else
autodns=”on”
echo ‘autodns=”on”‘ >> /home/$USER/.3gconfig
#fi

}

#ativafirewall()
#{
#clear
#echo ‘Ativar o firewall para a conexão da Internet? (s/n)’
#read resposta
#if [ "$resposta" = "s" ]; then
#sifirewall=”on”; echo ’sifirewall=”on”‘ >> /home/$USER/.3gconfig
#else
#sifirewall=”off”; echo ’sifirewall=”off”‘ >> /home/$USER/.3gconfig
#fi
#}

#checafirewall()
#{
#if [ "$sifirewall" = "on" ] then
# echo “Ativando o firewall…”
# echo ‘iptables -A INPUT -p tcp -i ppp0 –syn -j DROP’ >> /etc/ppp/ip-up
# echo ‘iptables -A INPUT -p udp -i ppp0 –dport 1:1024 -j DROP’ >> /etc/ppp/ip-up
#fi
#}

#checadns()
#{
#if [ "$autodns" = "off" ] then
# echo “echo \”nameserver $dns1\” > /etc/resolv.conf” > /etc/ppp/ip-up
# echo “echo \”nameserver $dns2\” >> /etc/resolv.conf” >> /etc/ppp/ip-up
#fi
#}

# Início do script

clear
# Verifica o arquivo de configuração e decide entre usá-lo ou gerar um novo

if [ -e "/home/$USER/.3gconfig" ]; then

echo “Configuração encontrada em ~/.3gconfig.”
echo ‘Pressione Enter para continuar (e usar a configuração salva) ou
pressione “c” (e depois Enter) se quiser reconfigurar o script.

Pressione Enter para continuar ou c para reconfigurar:’
read resposta
clear

if [ "$resposta" = "c" ]; then

# Se respodido “c”, reconfigura
rm -f /home/$USER/.3gconfig
reconfigurar

else

# Senão, carrega a configuração
echo “Carregando configuração em /home/$USER/.3gconfig”
sleep 1
. /home/$USER/.3gconfig

fi

else

# Se não encontra o script, reconfigura
reconfigurar

fi

# Terminada a configuração, a conexão é ativada:

# Deleta a rota padrão caso tenha sido solicitado pelo usuário
if [ "$delroute" = "1" ]; then
echo “Desativando rota padrão (para que seja usada a conexão 3G)”
echo “route del default”
route del default
fi

# Função para conexão USB

if [ "$conn" = "usb" ]; then

modprobe usbserial

# Substitui o DNS do provedor caso solicitado
#checadns

# Ativa o firewall, caso solicitado
#checafirewall

echo ‘[Dialer 3g]‘ > /etc/wvdial.conf
echo Modem = $porta >> /etc/wvdial.conf
echo Baud = 921600 >> /etc/wvdial.conf
echo DialCommand = ATDT >> /etc/wvdial.conf
echo Check Def Route = on >> /etc/wvdial.conf
echo ‘FlowControl = Hardware(CRTSCTS)’ >> /etc/wvdial.conf
echo Username = $user >> /etc/wvdial.conf
echo Password = $pass >> /etc/wvdial.conf
echo Phone = $telc >> /etc/wvdial.conf
echo Stupid mode = 1 >> /etc/wvdial.conf
echo Auto Reconnect = on >> /etc/wvdial.conf
echo “Auto DNS = $autodns” >> /etc/wvdial.conf
echo Init1 = ATZ >> /etc/wvdial.conf
echo ‘Init2 = ATQ0 V1 E1 S0=0 &C1 &D2′ >> /etc/wvdial.conf
echo ISDN = 0 >> /etc/wvdial.conf
echo Modem Type = Analog Modem >> /etc/wvdial.conf

if [ -e "/usr/bin/wvdial" ]; then

echo ‘discando…

Pressione Ctrl+C para encerrar a conexão.

wvdial 3g’
sleep 1
wvdial 3g

else
errowvdial
fi

fi

# Função para Bluetooth DUN

if [ "$conn" = "dun" ]; then

# Fecha o kbluetoothd
killall kbluetoothd.real &>/dev/null

# Reinicia o bluetooth e ativa a porta
/etc/init.d/bluetooth restart
hciconfig hci0 up

echo “Gerando configuracao do wvdial…”

sed -i -e “/lcp-echo-interval 30/D” /etc/ppp/options
sed -i -e “/lcp-echo-failure 4/D” /etc/ppp/options

# Substitui o DNS do provedor caso solicitado
#checadns

# Ativa o firewall, caso solicitado
#checafirewall

echo ‘[Dialer 3g]‘ > /etc/wvdial.conf
echo Modem = $porta >> /etc/wvdial.conf
echo Baud = 921600 >> /etc/wvdial.conf
echo DialCommand = ATDT >> /etc/wvdial.conf
echo Check Def Route = on >> /etc/wvdial.conf
echo ‘FlowControl = Hardware(CRTSCTS)’ >> /etc/wvdial.conf
echo Username = $user >> /etc/wvdial.conf
echo Password = $pass >> /etc/wvdial.conf
echo Phone = $telc >> /etc/wvdial.conf
echo Stupid mode = 1 >> /etc/wvdial.conf
echo Auto Reconnect = on >> /etc/wvdial.conf
echo “Auto DNS = $autodns” >> /etc/wvdial.conf
echo Init1 = ATZ >> /etc/wvdial.conf
echo ‘Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0′ >> /etc/wvdial.conf
echo Init5 = AT+CGDCONT=1,\”IP\”,\”$APN\”,\”\”,0,0 >> /etc/wvdial.conf
echo ISDN = 0 >> /etc/wvdial.conf
echo Modem Type = Analog Modem >> /etc/wvdial.conf

if [ -e "/usr/bin/wvdial" ]; then

echo ‘discando…

Pressione Ctrl+C para encerrar a conexao

Se algo der errado durante a discagem, experimente reiniciar o smartphone
e tentar de novo. Nos Nokia, é muito comum que o subsistema bluetooth fique
travado, impedindo que você se conecte, o que é rapidamente resolvido ao
desligar e ligar novamente.

wvdial 3g’
sleep 1
wvdial 3g

else

errowvdial

fi

fi

# Função para Bluetooth PAN (Windows Mobile)

if [ "$conn" = "pan" ]; then

echo ‘Ative o compartilhamento no smartphone, clicando no “Iniciar > Programas >
Compartilhamento de Internet”. Use a opção “PAN do Bluetooth” como conexão para
o PC. Ao clicar no “Conectar” o aparelho passa para o modo NAP, onde ele fica
disponível para conexão do PC. Em caso de erros, verifique se o pairing foi
feito corretamente e se o PC foi definido como dispositivo autorizado nas
configurações do Bluetooth

echo “Tentando se conectar a $blueaddr…”
echo ‘Da primeira vez que a conexão é feita, o smartphone exibe uma mensagem
perguntando se deve aceitar conexões vindas do PC.

echo “pand -n –role PANU –connect $blueaddr”
pand -n –role PANU –connect $blueaddr
sleep 1
echo “dhclient bnep0″
dhclient bnep0
echo ”
ifconfig bnep0

echo ‘Se tudo deu certo, a rede bluetooth foi estabelecida e seu PC recebeu
um endereço na faixa 192.168.0.x, com o smartphone compartilhando a conexão
e ficando disponível através do endereço 192.168.0.1 (que é usado pelo PC
como gateway e como DNS), de forma similar ao que temos ao compartilhar a
conexão usando o ICS do Windows.

Para fechar a conexão posteriormente, use (como root):

pand -K

Para listar as conexões ativas (em caso de dúvidas sobre se a conexão está
ativada ou não) use:

pand -l

Este script não funciona no Ubunto 8.10 devido ao bug no bluez:
https://bugs.launchpad.net/ubuntu/+source/bluez-utils/+bug/192043

fi

# Caso tenha deletado a rota padrão no início do script, recarrega a
# configuracao da rede, restaurando a rota padrao
if [ "$delroute" = "1" ]; then
/etc/init.d/networking restart &>/dev/null
/etc/init.d/NetworkManager restart &>/dev/null
fi

exit 0

Comentários

Postagens mais visitadas