KeepAlive para conexão discada (ou não)

Alguns provedores (principalmente os gratuitos) fazem um controle de conexões ativas, ou seja, aquele usuário que estiver sem atividade pode perder sua cota de banda ou simplesmente ser desconectado. Este script feito em bash se propõe a "enganar" o provedor, para que o mesmo pense que sua conexão está sempre ativa.

[ Hits: 10.539 ]

Por: Carlos em 28/06/2004 | Blog: http://nullterminated.livejournal.com/


Introdução



E aí galera, beleza?

Estou escrevendo este meu primeiro artigo porque achei interessante compartilhar uma solução que dei a um problema que pode ser comum a muitos irmãos Linuxers.

Como a maioria dos brasileiros que utilizam a internet, meu acesso a grande rede é via PPP discado (a situação está difícil, não dá para disponibilizar de R$ 100,00 por mês tendo duas bocas para alimentar :P). O que acontece é que alguns provedores (principalmente os gratuitos, apesar da AOL já utilizar deste artifício há algum tempo) monitoram o nível de atividade de seus usuários para ver se suas conexões estão ativas ou não, e, aquelas que não apresentarem um certo nível de atividade são "graciosamente" terminadas ou tem sua banda realocada para outros usuários com mais atividade. Esse artifício não é de todo mal, pois como estes provedores tem muitos acessos e a banda é cara, esta foi a maneira encontrada por eles para "otimizar" os acessos para aqueles que "precisam", tirando daqueles que estão "ociosos".

O que acontece é que o que mais gosto de fazer na internet é ler textos, que por vez são longos (eu os salvo posteriormente em disco, mas como a curiosidade é maior e o texto já está na tela...) e quase sempre após ler um texto eu tinha a ingrata surpresa de minha conexão ter sido terminada :(.

Deixando o blá-blá-blá de lado, vamos ao que interessa! Este script feito em bash scripting realiza um determinado número de interações (determinado pela variável TOT). Cada interação realiza um determinado número de "pings" (ICMP echos) a um servidor qualquer, dando um delay entre eles (para que o IDS do servidor não pense que você está tentando fazer um flood nele). O código é bem simples e fácil de entender por quem manja um pouco de programação e bash. Redirecionei todas as mensagens (tanto as do STDOUT como do STDERR) para o device "null", mas você pode redirecioná-las para arquivos de log se desejar, elas tem que ser redirecionadas para poder rodar o script em background.

Segue o código fonte, ele pode ser melhorado com certeza e mais parametrizado, mas da maneira que está funciona muito bem.

#!/bin/sh

CONT=1
TOT=500
while [ $CONT -lt $TOT ]; do
    ping -c 20 www.paginadoseuprovedor.com.br > /dev/null 2>&1
    CONT=$((CONT+1))
    sleep 40
done

Valeu galera, até a próxima!

null_terminated - null_terminated@linuxmail.org
   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Aventuras e desventuras com o kernel 2.6

Software livre, software comunitário!

Script "apagador de linhas"

O Software Livre e a Soberania Nacional

Leitura recomendada

Brincando com vetores - complemento

XML de NF-e ou CT-e ou MDF-e - Como validar usando os pacotes de esquemas do Governo

Desinstalando todos os programas instalados a partir de uma data específica

Multi-head usando udev e Xnest

Impressora PDF via Samba para estações Windows

  
Comentários
[1] Comentário enviado por lordello em 29/06/2004 - 00:54h

Huumm... isso é interessante, mas não seria mais fácil usar o crontab?
Tipo assim:
# crontab -e
*/1 * * * * ping -c 20 www.paginadoseuprovedor.com.br > /dev/null 2>&1
Pronto, a cada minuto será executado o comando que você criou.
Para aumentar o intervalo é só mudar de */1 para */2 ou */3 etc...
Falow ae!!

[2] Comentário enviado por null_terminated em 29/06/2004 - 14:24h

Boa lordello,

Mais a minha intenção alem de tudo era mostrar uma brincadeirinha em bash para a galera, a tua solução só tem o empecilho de ter que tirar do crontab a linha toda vida q vc não estiver conectado, sou meio chato com performance, e não gosto de processos rodando sem necessidade, por mais insignificante que seja a degradação a performance global da maquina por conta de um simples "ping". Mais agradeço muito pela tua sugestão.

[]'s

[3] Comentário enviado por JuNiOx em 30/06/2004 - 13:17h

muito interessante esse script
t+

[4] Comentário enviado por enioha em 30/06/2004 - 14:57h

Tá de parabéns tambem concordo sobre processos desnecessários, já vi sistemas inteiros pararem por um processinho que a primeira vista não era nada. mas no caso havia gerado um loop no sistema.

D+

[5] Comentário enviado por arturaugusto em 02/07/2004 - 00:47h

nao vejo isso como muito util,se os provedoress diminuem sua banda quando esta ocioso, intaum um ping continuo nao vai resolver grande coisa, pois vc nao esta realmente usando sua banda, se estiver vc tera a preferencia...

[6] Comentário enviado por PgDn em 02/07/2004 - 02:15h

pequeno trecho tirado do ppp-up.. para quem nao sabe o ppp-up é um arquivo q é executado toda vez que o pppd tem uma conexao com sucesso, ou seja, toda vez q vc se conecta na internet...

# If you want to ping the other end to keep the connection open.
# The output from ping will goto >/dev/null, you won't see it.
# Ping -i 60 = send ping every 60 seconds to remote = $5.

#(ping -i 60 $5 &) >/dev/null 2>&1


.... resumindo basta descomentar tal linha para que ele envie um ping a cada 60 segundo assim mantendo a conexao viva..e isso somente quando vc estiver conectado...

O arquivo ppp-up .. normalmente fica em /etc/ppp/ ele é util também se vc quiser colocar determinados serviços q se ativem na hora q vc conecta

[7] Comentário enviado por null_terminated em 23/03/2005 - 15:09h

Só para registrar um comentário que não registrei na época do post (:-) faz tempo eu sei...)

O ping envia pacotes ICMP, portanto está transferindo dados, então está utilizando a banda sim!!

Mas se você quiser algo mais "efetivo", substituta o ping por:

echo GET www.meuprovedor.com.br | nc www.meuprovedor.com.br 80

esta linha faz uma requisicao HTTP ao WebServer do seu provedor...

[]'s

[8] Comentário enviado por df.castro em 29/03/2005 - 17:47h

Olá amigos....

Estou fazendo, Ciência da Computação, e pesquisando sobre ping...encontrei este artigo, que tanto estou precisando para a resolução de um trabalho.
O trabalho basei-se no script acima...porém ainda nao programamos em script e sim e C. Portanto gostaria que me ajudasse na transformação do mesmo.
Ciente da ajuda, já segue os agradecimentos...

[9] Comentário enviado por Century_Child em 10/06/2006 - 18:38h

Não seria mais fácil simplesmente deixar um download rodando?

[10] Comentário enviado por bosetti em 25/07/2006 - 12:54h

Concordo, deixe um download rodando, pois se não estiver usando a internet, disconecte...
vai que vc deixou a internet ligada de madruga e acordou 10 horas da manhã... imaginas essas 4 horas a mais pesando no seu bolso =p


Contribuir com comentário