Controle de banda individual com shaper
Publicado por Denilson Martins (última atualização em 24/10/2014)
[ Hits: 5.027 ]
Homepage: www.vivaolinux.com.br
Script para implementação de controle de banda utilizando o programa shaper, para derivados Debian.
#!/bin/bash dir_controle=/etc/shaper arq_dhcp=dhcpd.conf faixa=192.168.50 menu() { clear echo "#########################################" echo "# CONTROLE DE BANDA: #" echo "# ------------------------------------- #" echo "# 1-> ADICIONAR CONTROLE A UM IP: #" echo "# 2-> REMOVER CONTROLE DE UM IP: #" echo "# 3-> LISTAR IPS CONTROLADOS: #" echo "# 0-> APLICAR CONFIGURACOES: #" echo "# QUALQUER TECLA DIFERENTE PARA SAIR: #" echo "# ------------------------------------- #" echo "# DIGITE UMA OPCAO: #" echo "#########################################" read op case $op in 1) adicionar ;; 2) remover ;; 3) listar ;; 0) aplicar ;; *) exit ;; esac } #---------------------------CRIACAO DE ARQUIVOS--------------------------------- adicionar() { clear echo "DIGITE O IP PARA SER ADICIONADO AO CONTROLE (Final do IP)." read ip echo "DIGITE A BANDA EM [kbps] (1Mbps = 128 KBps)." read banda bandabps=`expr $banda / 8` ls -las $dir_controle/*down | grep $faixa.$ip >> /dev/null if [ "$?" == '1' ] ; then nome_arquivo cria_down cria_up echo "CONTROLE AO IP [$faixa.$ip] COM [$bandabps]KBps ADICIONADO" else echo "IP [$faixa.$ip] JA CONTROLADO"; fi echo "ENTER PARA VOLTAR AO MENU" read menu } nome_arquivo() { if [ -e $dir_controle/cbq-0010-XXX.XXX.XXX.XXX-down ]; then echo "[OK]" else > $dir_controle/cbq-0010-XXX.XXX.XXX.XXX-down # Apaga o default fi ls $dir_controle/*down | awk -F "-" '{ print $2}' >> temp num=`tail -1 temp` rm -rf temp num=`expr $num + 1` num=`printf "%04d\n" $num` # completa zeros a esquerda arquivo_down=$dir_controle/cbq-$num-$faixa.$ip-down arquivo_up=$dir_controle/cbq-$num-$faixa.$ip-up } cria_down() { echo "DEVICE=eth0,100Mbit,10Mbit" >> $arquivo_down echo "RATE="$banda"Kbit" >> $arquivo_down echo "WEIGHT="$bandabps"Kbit" >> $arquivo_down echo "PRIO=5" >> $arquivo_down echo "" >> $arquivo_down echo "RULE=$faixa.$ip" >> $arquivo_down echo "" >> $arquivo_down echo "BOUNDED=yes" >> $arquivo_down echo "ISOLATED=yes" >> $arquivo_down } cria_up() { echo "DEVICE=eth0,100Mbit,10Mbit" >> $arquivo_up echo "RATE="$banda"Kbit" >> $arquivo_up echo "WEIGHT="$bandabps"Kbit" >> $arquivo_up echo "PRIO=5" >> $arquivo_up echo "" >> $arquivo_up echo "RULE="$faixa.$ip"," >> $arquivo_up echo "" >> $arquivo_up echo "BOUNDED=yes" >> $arquivo_up echo "ISOLATED=yes" >> $arquivo_up } #---------------------------CRIACAO DE ARQUIVOS--------------------------------- #---------------------------REMOCAO DE ARQUIVOS--------------------------------- remover() { clear echo "DIGITE O IP QUE PODERA SER REMOVIDO DO CONTROLE" read ip remover_down=`ls $dir_controle/*down | grep $faixa.$ip` remover_up=`ls $dir_controle/*up | grep $faixa.$ip` if [ "$?" == '0' ] ; then echo "-------------------------------------------" echo " CONTROLES ENCONTRADOS" echo "$remover_down" echo "$remover_up" echo "-------------------------------------------" echo "REMOVER CONTROLE DO IP [$faixa.$ip]? (s/n) " read resp if [ "$resp" == 's' ] ; then rm -rf $remover_down rm -rf $remover_up echo "CONTROLE DO IP [$faixa.$ip] FOI REMOVIDO!" else echo "CONTROLE DO IP [$faixa.$ip] NAO FOI REMOVIDO!" fi else echo "O IP [$faixa.$ip] NAO FOI ENCONTRADO!" fi echo "ENTER PARA VOLTAR AO MENU" read menu } #---------------------------REMOCAO DE ARQUIVOS--------------------------------- #---------------------------LISTAR DE ARQUIVOS--------------------------------- listar() { if [ -e $dir_controle/cbq-0010-XXX.XXX.XXX.XXX-down ]; then rm -rf $dir_controle/cbq-0010-XXX.XXX.XXX.XXX-down # Apaga o default fi clear echo "LISTA DE USUARIOS COM CONTROLE DE BANDA ATIVADO" echo "-----------------------------------------------" ls $dir_controle/*down >> tmp while read tmp; do ip=`echo $tmp | awk -F "-" '{ print $3 }'` banda=`cat $tmp | grep WEI | awk -F "=" '{ print $2 }'` nome=`cat $arq_dhcp | grep $ip -B 2 | head -n 1 | awk '{ print $2 }'` mac=`cat $arq_dhcp | grep $ip -B 1 | head -n 1 | awk '{ print $3 }'` printf "Usuario -> $nome \t MAC -> $mac\n" printf "IP-> $ip\tBANDA -> $banda \n" done < tmp rm -rf tmp echo "-----------------------------------------------" echo "PRESSIONE ENTER PARA RETORNAR AO MENU" read menu } #---------------------------LISTAR DE ARQUIVOS--------------------------------- #---------------------------APLICAR CONFIGURACOES------------------------------ aplicar() { echo "DESEJA APLICAR AS CONFIGURACOES? (s/n) " read resp if [ "$resp" == 's' ] ; then if [ -e $dir_controle/cbq-0010-XXX.XXX.XXX.XXX-down ]; then rm -rf $dir_controle/cbq-0010-XXX.XXX.XXX.XXX-down # Apaga o default fi echo "--------------------------" echo "APLICANDO NOVAS DEFINICOES" sleep 1 /etc/init.d/shaper restart echo "--------------------------" echo "NOVAS DEFINICOES APLICADAS " echo "ENTER PARA RETORNAR MENU" read menu else echo "--------------------------" echo "ENTER PARA RETORNAR MENU" read menu fi } #---------------------------APLICAR CONFIGURACOES------------------------------ menu
Trocando MAC address de placa de rede
Proteja sua rede com um simples script de firewall
Alterando imagem do Grub no Ubuntu 10.04
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Visualizar arquivos em formato markdown (ex.: README.md) pelo terminal
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Alguém já usou o framework Avalonia para desenvolver interfaces de usu... (4)
Ajuda Pra Melhoria do NFTABLES. (8)
Sinto uma leve lentidão ao arrastar, miniminizar e restauras as janela... (2)
Pastas da raiz foram para a área de trabalho [RESOLVIDO] (7)