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!
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