Controlando a sua banda da internet

12 de novembro de 2010

A pedido de um amigo que migrou para o Linux e não conseguiu encontrar ferramenta equiparável para o Linux, resolvi criar esse simples script que tem a função de controlar a sua banda de internet na rede.

O objetivo desse script é ficar varrendo a rede à procura de máquina online, e caso as encontre é reduzida a taxa de download e upload da máquina que estiver consumindo muita banda. O script pode ser executado em qualquer máquina na rede, mas o objetivo é rodar na máquina que estiver consumindo mais banda.

A utilidade desse script está voltada para aqueles que gostam de baixar muitos arquivos, geralmente grande, na internet e acaba ocupando toda a banda, deixando praticamente nada para os demais computadores que estão conectados à rede, dessa forma, deixando a rede lenta. Com esse script em execução basta que uma máquina apareça na rede que automaticamente a taxa de download e upload será reduzida, deixando as demais máquinas, que estão na rede, navegar com uma largura de banda maior.

Críticas e sugestões para novas implementações são sempre bem vindas!

Download do script v0.2

Para executar o script:

$ sudo ./controle-de-banda.sh

ou

$ bash controle-de-banda.sh
#!/bin/bash

# Por Tales A. Mendonça - 12/11/2010 - v0.2
# talesam.org

clear
# Checa a permissão
if test $(id -u) != 0; then
	echo -e "e[1m *e[me[31m ERRO:e[m Sem permissão para executar o script"
	echo -e "e[1m *e[m Execute-o com e[33msudoe[m ou como e[33mroote[m"
	exit 0
fi
# Checa se o wondershaper está instalo
if [ "$(whereis wondershaper)" = "wondershaper:" ]; then
	echo -e "e[1m *e[me[31m ERRO:e[m Você não possui oe[m e[33mwondershaper e[minstalado, favor instalar"
	echo -e "e[1m *e[m Saindo do script.."
	sleep 2
	exit 1
fi

echo ""
echo -e "Programa para controlar, limitar, a banda, tráfego, de uma máquina na rede.nEste script funciona da seguinte maneira: A máquina que estiver com um tráfego muitonelevado, por exemplo, baixando algum arquivo grande e ocupando toda a banda da redenpoderá rodar esse script para que esta mesma máquina seja limitada caso possua maisnmáquina em rede acessando a internet."

echo ""
echo -e "Escolha um valor para o e[1mDownloade[m ou [Enter] para default (*)"
echo ""
echo -e "  1.  e[32m128e[m kbps =  e[33m16e[m   KB/s"
echo -e "  2.  e[32m256e[m kbps =  e[33m32e[m   KB/s"
echo -e "  3.  e[32m300e[m kbps =  e[33m37.5e[m KB/s"
echo -e "* 4.  e[32m512e[m kbps =  e[33m64e[m   KB/s"
echo -e "  5.  e[32m600e[m kbps =  e[33m75e[m   KB/s"
echo -e "  6. e[32m1024e[m kbps = e[33m128e[m   KB/s"
echo -e "  0. e[31mSaire[m"
read down
case $down in
	1) down=128
		d=16
	;;
	2) down=256
		d=32
	;;
	3) down=300
		d=37.5
	;;
	5) down=600
		d=75
	;;
	6) down=1024
		d=128
	;;
	0) exit 0
	;;
	*) down=512
		d=64
	;;
esac
echo -e "  Download = e[33m$de[m KB/s"

echo ""
echo -e "Escolha um valor para o e[1mUploade[m ou [Enter] para default (*)"
echo ""
echo -e "  1.  e[32m128e[m kbps =  e[33m16e[m   KB/s"
echo -e "  2.  e[32m256e[m kbps =  e[33m32e[m   KB/s"
echo -e "  3.  e[32m300e[m kbps =  e[33m37.5e[m KB/s"
echo -e "* 4.  e[32m512e[m kbps =  e[33m64e[m   KB/s"
echo -e "  5.  e[32m600e[m kbps =  e[33m75e[m   KB/s"
echo -e "  6. e[32m1024e[m kbps = e[33m128e[m   KB/s"
echo -e "  0. e[31mSaire[m"
read up
case $up in
	1) up=128
		u=16
	;;
	2) up=256
		u=32
	;;
	3) up=300
		u=37.5
	;;
	5) up=600
		u=75
	;;
	6) up=1024
		u=128
	;;
	0) exit 0
	;;
	*) up=512
		u=64
	;;
esac
echo -e "  Upload = e[33m$ue[m KB/s"

echo ""
echo -e "Escolha o tempo gasto para a checagem na rede por máquinas online ou [Enter] para default (*)"
echo ""
echo -e "  1.   e[33m5e[ms"
echo -e "  2.  e[33m10e[ms"
echo -e "  3.  e[33m15e[ms"
echo -e "  4.  e[33m20e[ms"
echo -e "  5.  e[33m25e[ms"
echo -e "* 6.  e[33m30e[ms"
echo -e "  7.  e[33m35e[ms"
echo -e "  8.  e[33m40e[ms"
echo -e "  9.  e[33m45e[ms"
echo -e "  10. e[33m50e[ms"
echo -e "  11. e[33m55e[ms"
echo -e "  12. e[33m60e[ms"
echo -e "  0. e[31mSaire[m"
read tempo
case $tempo in
	1) tempo=5
	;;
	2) tempo=10
	;;
	3) tempo=15
	;;
	4) tempo=20
	;;
	5) tempo=25
	;;
	7) tempo=35
	;;
	8) tempo=40
	;;
	9) tempo=45
	;;
	10) tempo=50
	;;
	11) tempo=55
	;;
	12) tempo=60
	;;
	0) exit 0
	;;
	*) tempo=30
	;;
esac
echo -e "  Upload = e[33m$tempoe[ms"

echo ""
echo -e "Digite o intervalo de máquinas que deseja pingar.nEx.: Para pingar as máquina com IP final 100, 103 e 110, então defina o valor como e[34m100 110e[m. nPara definir apenar uma máquina, especifique valores iguais, como e[34m100 100e[m"
read faixaMaquina

# ----------------------------------------------- #
# ----------------------------------------------- #
### Não altere nada daqui para baixo ###

# Muda a linguagem para o padrão, inglês
LC_ALL_BACKUP=$LC_ALL
export LC_ALL=C

# Interface que será limitada a banda
iface="$(route -n | grep UG | cut -d " " -f1- | rev | cut -d " " -f1 | rev)"

# Pinga a faixa de IP definida
faixaIp="$(ifconfig $iface | grep "inet addr" | cut -d: -f2 | cut -d " " -f1 | rev | cut -d. -f2- | rev)"

# Último octeto do IP
finalIp="$(ifconfig $iface | grep "inet addr" | cut -d. -f4 | cut -d " " -f1)"

# Volta a linguagem para o formato original
export LC_ALL=$LC_ALL_BACKUP
# ----------------------------------------------- #

clear
# Libera toda a banda antes de iniciar o controle
echo -e "Liberando toda a banda.."
sleep 2
wondershaper clear $iface
sleep 1
clear

while : ; do
echo -e "Procurando máquina(s) online.."
x=1
	for ip in $(seq $faixaMaquina); do
		if [ "$ip" != "$finalIp" ]; then
			ping -c 1 $faixaIp.$ip>/dev/null
			if [ $? -eq 0 ]; then
				x=0
				echo -e "e[30;1m  -> $faixaIp.e[me[32;1m$ip e[m" && break # Máquina online
			else
				x=1
			fi
		fi
	done

	if [ $x != 0 ]; then
		echo -e "Máquinas online não encontradas, liberando toda a banda.."
		sleep 1
		wondershaper clear $iface # Libera toda a banda
	else
		echo -e "Encontrado máquina Online, setando valores para download e upload"
		echo -e "Download = e[33m$down kbpse[m, Upload = e[33m$up kbpse[m"
		sleep 1
		wondershaper $iface $down $up # Limita a banda
	fi
sleep $tempo ; clear
done

45 Comentários

  1. Alexandre

    como sugestão, ao invés de usar ping para descobrir as maquinas. poderia usar arp -a

    fica mais rapido e não tem problema de dar um ping em uma maquina com firewall ativo que não irá responder ao ping.

    Responder
  2. Alexandre

    como sugestão, ao invés de usar ping para descobrir as maquinas. poderia usar arp -a

    fica mais rapido e não tem problema de dar um ping em uma maquina com firewall ativo que não irá responder ao ping.

    Responder
  3. Tales A. Mendonça


    Alexandre:

    como sugestão, ao invés de usar ping para descobrir as maquinas. poderia usar arp -a

    Obrigado, mas o arp não dará. Ele só mostra as máquina que “conversaram” com você nos últimos 60s e estiverem na mesma sub-rede. Não obtive sucesso usando ele, mas tem um comando que eu uso muito que independe de ping, o nmap com valores -sP xxx.xxx.xxx.* e já estou pensando em fazer um melhoramento com ele.

    Responder
  4. Tales A. Mendonça


    Alexandre:

    como sugestão, ao invés de usar ping para descobrir as maquinas. poderia usar arp -a

    Obrigado, mas o arp não dará. Ele só mostra as máquina que “conversaram” com você nos últimos 60s e estiverem na mesma sub-rede. Não obtive sucesso usando ele, mas tem um comando que eu uso muito que independe de ping, o nmap com valores -sP xxx.xxx.xxx.* e já estou pensando em fazer um melhoramento com ele.

    Responder
  5. marcondes

    Achei muito interessante.
    Como pode ser possivel fazer isso?

    Tem como explicar um pouco o funcionamento da coisa?

    Responder
  6. marcondes

    Achei muito interessante.
    Como pode ser possivel fazer isso?

    Tem como explicar um pouco o funcionamento da coisa?

    Responder
  7. Tales A. Mendonça


    marcondes:

    Achei muito interessante.
    Como pode ser possivel fazer isso?
    Tem como explicar um pouco o funcionamento da coisa?

    Olá marcondes, primeiro o “ser possível” acho que é só estudar o que deve ser feito, ter um pouco de conhecimento e abusar da criatividade.
    Não sei se deu uma olhada no script, mas está bem simples e comentado, fácil de entender, mas o programa faz o seguinte, fica pingando, varrendo a procura de máquinas na rede que não seja a sua e caso encontre, é setado um valor de download e upload definido pelo usuário. O programa ao ser executado fica em loop infinito. Se as máquinas forem desconectadas da rede, a velocidade é retornada para o valor original, máximo que a rede suporta.

    Abraços!

    Responder
  8. Tales A. Mendonça


    marcondes:

    Achei muito interessante.
    Como pode ser possivel fazer isso?
    Tem como explicar um pouco o funcionamento da coisa?

    Olá marcondes, primeiro o “ser possível” acho que é só estudar o que deve ser feito, ter um pouco de conhecimento e abusar da criatividade.
    Não sei se deu uma olhada no script, mas está bem simples e comentado, fácil de entender, mas o programa faz o seguinte, fica pingando, varrendo a procura de máquinas na rede que não seja a sua e caso encontre, é setado um valor de download e upload definido pelo usuário. O programa ao ser executado fica em loop infinito. Se as máquinas forem desconectadas da rede, a velocidade é retornada para o valor original, máximo que a rede suporta.

    Abraços!

    Responder
  9. marcondes

    legal, eu saquei a parada da procura de computadores na rede. só não entendi como isso é possivel. Como que acontece a mágica de configurar um limite de down e up em outra placa de rede… essa era minha dúvida.

    Responder
  10. marcondes

    legal, eu saquei a parada da procura de computadores na rede. só não entendi como isso é possivel. Como que acontece a mágica de configurar um limite de down e up em outra placa de rede… essa era minha dúvida.

    Responder
  11. Tales A. Mendonça


    marcondes:

    legal, eu saquei a parada da procura de computadores na rede. só não entendi como isso é possivel. Como que acontece a mágica de configurar um limite de down e up em outra placa de rede… essa era minha dúvida.

    Ele é configurado na própria máquina, esse é o objetivo e não nas demais, para isso tem programas mais complexos que fazem algo parecido com isso.

    Responder
  12. Tales A. Mendonça


    marcondes:

    legal, eu saquei a parada da procura de computadores na rede. só não entendi como isso é possivel. Como que acontece a mágica de configurar um limite de down e up em outra placa de rede… essa era minha dúvida.

    Ele é configurado na própria máquina, esse é o objetivo e não nas demais, para isso tem programas mais complexos que fazem algo parecido com isso.

    Responder
  13. marcondes

    Então a parada limita a conexão na minha máquina? Onde estou executando o script, caso alguem esteja copiando alguma coisa dos meus compartilhamentos os de alguma outra aplicação é isso?

    Responder
  14. marcondes

    Então a parada limita a conexão na minha máquina? Onde estou executando o script, caso alguem esteja copiando alguma coisa dos meus compartilhamentos os de alguma outra aplicação é isso?

    Responder
  15. Tales A. Mendonça


    marcondes:

    Então a parada limita a conexão na minha máquina? Onde estou executando o script, caso alguem esteja copiando alguma coisa dos meus compartilhamentos os de alguma outra aplicação é isso?

    Não, se você está baixando algo e comendo toda a banda e existem mais pessoas na rede que querem apenas navegar, não vão conseguir. Executando o script na sua máquina vai baixar a banda para que as outras possam navegar.

    Responder
  16. Tales A. Mendonça


    marcondes:

    Então a parada limita a conexão na minha máquina? Onde estou executando o script, caso alguem esteja copiando alguma coisa dos meus compartilhamentos os de alguma outra aplicação é isso?

    Não, se você está baixando algo e comendo toda a banda e existem mais pessoas na rede que querem apenas navegar, não vão conseguir. Executando o script na sua máquina vai baixar a banda para que as outras possam navegar.

    Responder
  17. João silva

    Não consegui realizar a execução desse script, não sei o que aconteceu. segui passo a passo.

    abri o terminal e digitei o 1° comando: $ bash controle-de-banda.sh

    e em seguida apareceu: $: comando não encontrado

    será que falta alguma coisa?

    Responder
  18. João silva

    Não consegui realizar a execução desse script, não sei o que aconteceu. segui passo a passo.

    abri o terminal e digitei o 1° comando: $ bash controle-de-banda.sh

    e em seguida apareceu: $: comando não encontrado

    será que falta alguma coisa?

    Responder
  19. Tales A. Mendonça


    João silva:

    Não consegui realizar a execução desse script, não sei o que aconteceu. segui passo a passo.
    abri o terminal e digitei o 1° comando: $ bash controle-de-banda.sh
    e em seguida apareceu: $: comando não encontrado
    será que falta alguma coisa?

    Olá, está usando qual distribuição Linux?
    tente dar um chmod +x controle-de-banda.sh e depois execute com ./controle-de-banda.sh

    Responder
  20. Tales A. Mendonça


    João silva:

    Não consegui realizar a execução desse script, não sei o que aconteceu. segui passo a passo.
    abri o terminal e digitei o 1° comando: $ bash controle-de-banda.sh
    e em seguida apareceu: $: comando não encontrado
    será que falta alguma coisa?

    Olá, está usando qual distribuição Linux?
    tente dar um chmod +x controle-de-banda.sh e depois execute com ./controle-de-banda.sh

    Responder
  21. Tales A. Mendonça


    Bruno:

    Tales,
    Descubra as máquinas da rede com um broadcast ARP.
    – NMAP
    http://www.netscantools.com/nstpro_arp_scan.html
    – etc….

    Olá e obrigado! Eu jé tinha procurado sobre isso logo depois que joguei o script no ar, mas estou meio sem tempo agora, talvez quando entrar de férias veja isso 😉 Mas se quiser pode pegar o script modificar, fiquei a vontade.

    Responder
  22. R@M

    Desculpe minha ignorancia mas esse script pode ser executado no windows?

    Responder
  23. R@M

    Desculpe minha ignorancia mas esse script pode ser executado no windows?

    Responder
  24. Tales A. Mendonça


    R@M:

    Desculpe minha ignorancia mas esse script pode ser executado no windows?

    Não sei te dizer porque nunca cheguei a testar. Mas tem um programa chamado cygwin que você consegue ter uma sistema unix dentro do Windows. Dê uma pesquisada.

    Responder
  25. SsWUUeZoX

    Testosterone is another powerful anabolic steroid that is usually taken to help with muscle growth and strength buy cialis uk Health Benefits

    Responder

Trackbacks/Pingbacks

  1. Script para limitação de de banda para downloads | Linux Ajuda - [...] A utilidade desse script está voltada para aqueles que gostam muito de baixar muitos arquivos, geralmente grandes, na internet…
  2. Script para limitação de de banda para downloads | Linux Ajuda - [...] A utilidade desse script está voltada para aqueles que gostam muito de baixar muitos arquivos, geralmente grandes, na internet…

Enviar Comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *