Controle de banda individual com shaper
Publicado por Denilson Martins (última atualização em 24/10/2014)
[ Hits: 5.144 ]
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
Bloquear contas em servidor Zimbra após 45 dias
Script que retorno o IP da Comexão ADSL
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (15)
Secure boot, artigo interessante, nada técnico. (4)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









