Controle de banda individual com shaper
Publicado por Denilson Martins (última atualização em 24/10/2014)
[ Hits: 5.219 ]
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
Monitora HD e envia e-mail caso atinja a um limite utilizado
Qual o maior número da variável RANDOM?
Script para criação de usuários do Samba
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Script de montagem de chroot automatica
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Assisti Avatar 3: Fogo e Cinzas (4)
Conky, alerta de temperatura alta (11)









