Administração de switch Cisco
Publicado por Ricardo Lino Olonca (última atualização em 25/10/2017)
[ Hits: 6.751 ]
Homepage: ricardoolonca.blogspot.com.br
Esse script é uma amostra de como é possível administrar uma grupo de switchs Cisco através do Bash Script. Ele usa o programa sshpass para se conectar aos equipamentos. Ele ainda não está terminado, mas decidi publicá-lo por que estou meio sem tempo de trabalhar nele.
Com ele já é possível:
- trazer o número de portas 10giga, giga, fast e ethernet geral e por equipamento;
- quantas portas estão em up, down, desconectadas, com erros, em cada equipamento e o total geral;
- criar, alterar e copiar vlans;
- descobrir em qual porta de qual switch um equipamento está, possibilitando derrubar a porta em questão;
- configurar um ip no switch;
- acessar o switch;
- configurar uma interface do switch como acesso, trunk ou voip;
- associar uma interface a uma ou mais vlans.
#!/bin/bash
# Gerencia os switchs e roteadores da empresa
# Feito por Ricardo Lino Olonca em 11/10/2017
# Versão Alfa 0.13.1
#set -x
# Variáveis
# Local de armazemanento das informações.
BASE=".sw"
DB="sw.dat"
DBDETALHES="swdetalhes.dat"
DBPORTAS="swportas.dat"
DBVLANS="swvlans.dat"
DBMAC="swmac.dat"
DBIP="swip.dat"
# Checa se a pasta existe
checa_arquivos(){
cd
if [ ! -d $BASE ]
then
mkdir $BASE
echo "Pasta criada"
fi
# Checa se o banco de dados existe
if [ ! -f $BASE/$DB ]
then
touch $BASE/$DB
elif [ ! -w $BASE/$DB ]
then
chmod +w $BASE/$DB
fi
if [ ! -f $BASE/$DBDETALHES ]
then
touch $BASE/$DBDETALHES
elif [ ! -w $BASE/$DBDETALHES ]
then
chmod +w $BASE/$DBDETALHES
fi
if [ ! -f $BASE/$DBPORTAS ]
then
touch $BASE/$DBPORTAS
elif [ ! -w $BASE/$DBPORTAS ]
then
chmod +w $BASE/$DBPORTAS
fi
if [ ! -f $BASE/$DBVLANS ]
then
touch $BASE/$DBVLANS
elif [ ! -w $BASE/$DBVLANS ]
then
chmod +w $BASE/$DBVLANS
fi
if [ ! -f $BASE/$DBMAC ]
then
touch $BASE/$DBMAC
elif [ ! -w $BASE/$DBMAC ]
then
chmod +w $BASE/$DBMAC
fi
if [ ! -f $BASE/$DBIP ]
then
touch $BASE/$DBIP
elif [ ! -w $BASE/$DBIP ]
then
chmod +w $BASE/$DBIP
fi
}
# Atualiza os dados de contiguração do switch. Devem ser passados o nome, ip, usuário, senha e senhaconfig como parâmetros.
atualiza_conf(){
nome=$1
ip=$2
usuario=$3
senha=$4
senhaconfig=$5
echo $senha > /dev/shm/$$.pass
echo "enable" > /dev/shm/$$
echo $senhaconfig >> /dev/shm/$$
echo "terminal length 0" >> /dev/shm/$$
echo "show running-config" >> /dev/shm/$$
echo "end" >> /dev/shm/$$
echo "exit" >> /dev/shm/$$
echo -n "$nome : "
cat /dev/shm/$$ | sshpass -f/dev/shm/$$.pass ssh $usuario@$ip > $BASE/$nome 2>/dev/null
if [ $? -ne 0 ]
then
echo -n "Não consegui conexão com o equipamento."
else
echo -n "Ok. "
fi
}
# Atualiza os detalhes do switch. Devem ser passados o nome, ip, usuário, senha e senhaconfig como parâmetros.
atualiza_detalhes(){
nome=$1
ip=$2
usuario=$3
senha=$4
senhaconfig=$5
echo "enable" > /dev/shm/$$
echo $senhaconfig >> /dev/shm/$$
echo "terminal length 0" >> /dev/shm/$$
echo "show version" >> /dev/shm/$$
echo "end" >> /dev/shm/$$
echo "exit" >> /dev/shm/$$
echo -n "Detalhes: "
cat /dev/shm/$$ | sshpass -f/dev/shm/$$.pass ssh $usuario@$ip > $BASE/$nome.versao 2>/dev/null
if [ $? -ne 0 ]
then
echo -n "Não consegui listar a versão do equipamento."
else
rom=`grep ROM $BASE/$nome.versao | head -1 | cut -d" " -f2-`
uptime=`grep uptime $BASE/$nome.versao | cut -d" " -f4-`
cpu=`grep -i cpu $BASE/$nome.versao| cut -d" " -f4-`
ethernet=`grep Ethernet $BASE/$nome.versao | grep -v Virtual | grep -v Giga | cut -d" " -f1`
giga=`grep Giga $BASE/$nome.versao | grep -v Ten | cut -d" " -f1`
ten=`grep Giga $BASE/$nome.versao | grep Ten | cut -d" " -f1`
ram=`grep memory $BASE/$nome.versao | grep volatile | cut -d" " -f1`
grep -v $nome $BASE/$DBDETALHES > /dev/shm/$$
echo $nome:$rom:$uptime:$cpu:$ethernet:$giga:$ten:$ram >> /dev/shm/$$
sort /dev/shm/$$ -o $BASE/$DBDETALHES
echo -n "Ok. "
fi
}
# Atualiza os detalhes das portas do switch. Devem ser passados o nome, ip, usuário, senha e senhaconfig como parâmetros.
atualiza_portas(){
nome=$1
ip=$2
usuario=$3
senha=$4
senhaconfig=$5
echo "enable" > /dev/shm/$$
echo $senhaconfig >> /dev/shm/$$
echo "terminal length 0" >> /dev/shm/$$
echo "show interface status" >> /dev/shm/$$
echo "end" >> /dev/shm/$$
echo "exit" >> /dev/shm/$$
echo -n "Portas: "
cat /dev/shm/$$ | sshpass -f/dev/shm/$$.pass ssh $usuario@$ip > $BASE/$nome.portas 2>/dev/null
if [ $? -ne 0 ]
then
echo -n "Não consegui listar as portas do equipamento."
else
grep -v ^$nome: $BASE/$DBPORTAS > /dev/shm/$$
mv /dev/shm/$$ $BASE/$DBPORTAS
grep '/' $BASE/$nome.portas >/dev/shm/$$.$nome.portas
linhas=`wc -l /dev/shm/$$.$nome.portas | cut -d" " -f1`
for i in `seq $linhas`
do
linha=`head -$i /dev/shm/$$.$nome.portas | tail -1`
porta=`echo "$linha" | cut -c1-10`
descricao=`echo "$linha" | cut -c11-29`
status=`echo "$linha" | cut -c30-42`
vlan=`echo "$linha" | cut -c43-53`
echo $nome:$porta:$descricao:$status:$vlan >> /dev/shm/$$.porta
done
cat /dev/shm/$$.porta >> $BASE/$DBPORTAS
sort $BASE/$DBPORTAS | uniq > /dev/shm/$$.porta
mv /dev/shm/$$.porta $BASE/$DBPORTAS
echo -n "Ok. "
fi
}
# Atualiza os detalhes das VLANS do switch. Devem ser passados o nome, ip, usuário, senha e senhaconfig como parâmetros.
atualiza_vlans(){
nome=$1
ip=$2
usuario=$3
senha=$4
senhaconfig=$5
echo "enable" > /dev/shm/$$
echo $senhaconfig >> /dev/shm/$$
echo "terminal length 0" >> /dev/shm/$$
echo "show vlan" >> /dev/shm/$$
echo "end" >> /dev/shm/$$
echo "exit" >> /dev/shm/$$
echo -n "Vlans: "
cat /dev/shm/$$ | sshpass -f/dev/shm/$$.pass ssh $usuario@$ip > $BASE/$nome.vlans 2>/dev/null
if [ $? -ne 0 ]
then
echo -n "Não consegui listar as VLANS do equipamento."
else
grep -v ^$nome $BASE/$DBVLANS > /dev/shm/$$
mv /dev/shm/$$ $BASE/$DBVLANS
grep ^[0-9] $BASE/$nome.vlans | grep -v \ 1500\ | sort -k1 -t" " -n > /dev/shm/$$.$nome.vlans
vlanslocais=`wc -l /dev/shm/$$.$nome.vlans | cut -d" " -f1`
for x in `seq $vlanslocais`
do
linha=`head -$x /dev/shm/$$.$nome.vlans | tail -1`
vlanlocais=`echo "$linha" | cut -c1-5`
descricao=`echo "$linha" | cut -c6-38`
echo $nome:$vlanlocais:$descricao >> /dev/shm/$$.vlans
done
cat /dev/shm/$$.vlans >> $BASE/$DBVLANS
sort $BASE/$DBVLANS -o /dev/shm/$$.vlans
uniq /dev/shm/$$.vlans > $BASE/$DBVLANS
echo -n "Ok. "
fi
}
# Atualiza os detalhes da tabela de mac-address do switch. Devem ser passados o nome, ip, usuário, senha e senhaconfig como parâmetros.
atualiza_macs(){
nome=$1
ip=$2
usuario=$3
senha=$4
senhaconfig=$5
echo "enable" > /dev/shm/$$
echo $senhaconfig >> /dev/shm/$$
echo "terminal length 0" >> /dev/shm/$$
echo "show mac address-table" >> /dev/shm/$$
echo "end" >> /dev/shm/$$
echo "exit" >> /dev/shm/$$
echo -n "Mac Address: "
cat /dev/shm/$$ | sshpass -f/dev/shm/$$.pass ssh $usuario@$ip > $BASE/$nome.mac 2>/dev/null
if [ $? -ne 0 ]
then
echo -n "Não consegui listar a tabela de endereços MAC."
else
grep -v ^$nome: $BASE/$DBMAC > /dev/shm/$$
mv /dev/shm/$$ $BASE/$DBMAC
egrep '([0-9a-f]{4}\.){2}[0-9a-f]{4}' $BASE/$nome.mac> /dev/shm/$$.$nome.mac
linhas=`wc -l /dev/shm/$$.$nome.mac | cut -d" " -f1`
for i in `seq $linhas`
do
linha=`head -$i /dev/shm/$$.$nome.mac | tail -1`
vlan=`echo "$linha" | cut -c1-8`
macaddress=`echo "$linha" | cut -c9-22`
porta=`echo "$linha" | cut -c38- | cut -d" " -f2 | grep -v ','`
echo $nome:$vlan:$macaddress:$porta >> /dev/shm/$$.mac2
done
cat /dev/shm/$$.mac2 >> $BASE/$DBMAC
sort $BASE/$DBMAC | uniq > /dev/shm/$$.mac2
mv /dev/shm/$$.mac2 $BASE/$DBMAC
echo -n "Ok. "
fi
}
# Atualiza os dados referentes aos IP e Mac conectados aos switchs. Devem ser passados o nome, ip, usuário, senha e senhaconfig como parâmetros.
atualiza_ip(){
nome=$1
ip=$2
usuario=$3
senha=$4
senhaconfig=$5
echo "terminal length 0" > /dev/shm/$$
echo "show ip arp" >> /dev/shm/$$
echo "exit" >> /dev/shm/$$
echo -n "IPs: "
cat /dev/shm/$$ | sshpass -f/dev/shm/$$.pass ssh $usuario@$ip > $BASE/$nome.ip 2>/dev/null
if [ $? -ne 0 ]
then
echo -n "Não consegui listar os IP conectados no equipamento."
else
egrep '([0-9a-f]{4}\.){2}[0-9a-f]{4}' $BASE/$nome.ip >/dev/shm/$$.$nome.ip
linhas=`wc -l /dev/shm/$$.$nome.ip | cut -d" " -f1`
for i in `seq $linhas`
do
linha=`head -$i /dev/shm/$$.$nome.ip | tail -1`
ips=`echo "$linha" | cut -c11-27`
macaddress=`echo "$linha" | cut -c39-53`
echo $ips:$macaddress >> /dev/shm/$$.ip
done
sort /dev/shm/$$.ip | uniq >> $BASE/$DBIP
sort $BASE/$DBIP | uniq > /dev/shm/$$.ip
mv /dev/shm/$$.ip $BASE/$DBIP
echo "Ok. "
fi
}
# Atualiza os dados do servidor. Sempre passar o nome do switch como primeiro parâmetro.
atualiza_dados(){
nome=$1
ip=`grep ^$nome: $BASE/$DB | cut -d":" -f2`
usuario=`grep ^$nome: $BASE/$DB | cut -d":" -f4`
senha=`grep ^$nome: $BASE/$DB | cut -d":" -f5`
senhaconfig=`grep ^$nome: $BASE/$DB | cut -d":" -f6`
atualiza_conf $nome $ip $usuario $senha $senhaconfig
atualiza_detalhes $nome $ip $usuario $senha $senhaconfig
atualiza_portas $nome $ip $usuario $senha $senhaconfig
atualiza_vlans $nome $ip $usuario $senha $senhaconfig
atualiza_macs $nome $ip $usuario $senha $senhaconfig
atualiza_ip $nome $ip $usuario $senha $senhaconfig
}
# Atualiza todos os dados do switch. Sempre deve ser passado o nome do switch como primeiro parâmetro.
atualizar(){
if [ $1 == "todos" ]
then
for i in `cut -d":" -f1 $BASE/$DB`
do
atualiza_dados $i
done
else
nome=$1
atualiza_dados $nome
fi
rm /dev/shm/$$* 2>/dev/null
}
# Inclui um switch no sistema e coleta suas informações.
incluir(){
echo -n "Nome do dispositivo :"
read nome
nome=`echo $nome | sed 's/ //g'`
grep ^$nome: $BASE/$DB 2>/dev/null >/dev/null
if [ $? -eq 0 ]
then
echo "Equipamento já cadastrado."
read
else
echo -n "IP do dispositivo :"
read ip
echo -n "Descrição :"
read descricao
echo -n "Usuário para conexão :"
read usuario
echo -n "Senha de acesso :"
read -s senha
echo -n -e "\n"
echo -n "Senha de acesso para configuração global :"
read -s senhaglobal
echo "$nome:$ip:$descricao:$usuario:$senha:$senhaglobal" >> $BASE/$DB
sort $BASE/$DB -o $BASE/$DB
atualizar $nome
echo "Equipamento cadastrado."
read
fi
}
# Lista os switchs.
listar(){
opcaolistar=a
while [ $opcaolistar != "s" ]
do
linhas=`wc -l $BASE/$DB | cut -d" " -f1`
for i in `seq $linhas`
do
echo -n $i" - "
linha=`head -$i $BASE/$DB | tail -1 | cut -d":" -f1-3 --output-delimiter=" "`
nome=`echo $linha | cut -d" " -f1`
ip=`echo $linha | cut -d" " -f2`
descricao=`echo $linha | cut -d" " -f3-`
echo "$nome $ip $descricao"
done
echo -n -e "\n"
echo "0 - Sair"
echo -n -e "\n"
echo -n "Digite a opção: "
read opcaolistar
case $opcaolistar in
0)
return
;;
*)
echo $opcaolistar | grep -e [a-z] 2>/dev/null >/dev/null
if [ $? -eq 0 ]
then
return
else
nome=`head -$opcaolistar $BASE/$DB | tail -1 | cut -d":" -f1`
listardetalhes $nome
fi
;;
esac
done
}
# Acessa o switch. Deve-se passar o nome do switch
acessar(){
nome=$1
ip=`grep ^$nome $BASE/$DB | cut -d":" -f2`
usuario=`grep ^$nome $BASE/$DB | cut -d":" -f4`
senha=`grep ^$nome $BASE/$DB | cut -d":" -f5`
echo $senha > /dev/shm/$$.pass
sshpass -f/dev/shm/$$.pass ssh $usuario@$ip
rm /dev/shm/$$*
}
# Copia uma VLAN para outros switchs. Precisa passar o id da VLAN como parâmetro.
copiavlan(){
vlan=$1
cont=1
unset switch
echo -n -e '\n'
echo "0 - Todos"
for i in `cut -d":" -f1 $BASE/$DB`
do
echo "$cont - $i"
let cont=cont+1
done
echo -n -e '\n'
echo "Digite "c" para cancelar."
echo -n -e '\n'
while [ -z $switch ]
do
echo -n "Para qual switch você quer copiar a VLAN?: "
read switch
echo $switch | grep -v '[[:punct:]]' | grep -v '[[:alpha:]]' 2>/dev/null >/dev/null
if [ $? -ne 0 ]
then
break
elif [ $switch -ge $cont ]
then
break
fi
case $switch in
0)
unset nomelocal
vlanlocal=$vlan
for i in `cut -d":" -f1 $BASE/$DB`
do
grep :$vlanlocal\ : $BASE/$DBVLANS | grep $i 2>/dev/null >/dev/null
if [ $? -ne 0 ]
then
nomelocal=$nomelocal" "$i
fi
done
;;
*)
nomelocal=`cut -d":" -f1 $BASE/$DB | head -$switch | tail -1`
;;
esac
for i in $nomelocal
do
ip=`grep ^$i: $BASE/$DB | cut -d":" -f2`
usuario=`grep ^$i: $BASE/$DB | cut -d":" -f4`
senha=`grep ^$i: $BASE/$DB | cut -d":" -f5`
senhaconfig=`grep ^$i: $BASE/$DB | cut -d":" -f6`
nomevlan=`grep :$vlanlocal\ : $BASE/$DBVLANS | head -1 | cut -d":" -f3`
criacaovlan $i $ip $usuario $senha $senhaconfig $vlanlocal $nomevlan
done
done
}
# Exclui um IP do switch. O nome do switch e a VLAN precisaM se passado como parâmetro.
excluirip(){
nome=$1
vlan=$2
ip=`grep ^$nome: $BASE/$DB | cut -d":" -f2`
usuario=`grep ^$nome: $BASE/$DB | cut -d":" -f4`
senha=`grep $nome: $BASE/$DB | cut -d":" -f5`
senhaconfig=`grep $nome: $BASE/$DB | cut -d":" -f6`
echo $senha > /dev/shm/$$.pass
echo "Apagando o IP da vlan $vlan no switch $nome."
echo "terminal length 0" > /dev/shm/$$
echo "enable" >> /dev/shm/$$
echo "$senhaconfig" >> /dev/shm/$$
echo "configure terminal" >> /dev/shm/$$
echo "no interface vlan $vlan" >> /dev/shm/$$
echo "exit" >> /dev/shm/$$
echo "copy running-config startup-config" >> /dev/shm/$$
cat /dev/shm/$$ | sshpass -f/dev/shm/$$.pass ssh $usuario@$ip >/dev/null 2>/dev/null
echo "O IP foi apagado"
read
atualiza_ip $nome $ip $usuario $senha $senhaconfig
}
# Altera os dados de uma VLAN de um switch. É necessário passar o nome do swtich e o número da VLAN como parâmetros.
alterarvlan(){
nome=$1
vlan=$2
echo "A VLAN está presente nos seguintes switchs"
echo -n -e "\n"
grep $vlan $BASE/$DBVLANS | cut -d":" -f1
echo -n -e '\n'
echo "1 - Mudar a descrição"
echo "2 - Excluir"
echo "3 - Copiar a VLAN para outros switchs"
echo "4 - Configurar um IP"
echo "5 - Excluir um IP"
echo -n -e '\n'
echo "0 - Voltar"
echo -n -e '\n'
echo -n "Digite a opção :"
read opcaoalteravlan
case $opcaoalteravlan in
1)
echo -n "Digite o nome da VLAN :"
read descricao
if [ 1 != 1$descricao ]
then
if [ $nome == "todos" ]
then
unset nome
for i in `grep :$vlan\ : $BASE/$DBVLANS | cut -d":" -f1`
do
nome="$nome$i "
done
fi
vlanlocal=$vlan
descricaolocal=$descricao
for i in $nome
do
echo $i
ip=`grep ^$i: $BASE/$DB | cut -d":" -f2`
usuario=`grep ^$i: $BASE/$DB | cut -d":" -f4`
senha=`grep ^$i: $BASE/$DB | cut -d":" -f5`
senhaconfig=`grep ^$i: $BASE/$DB | cut -d":" -f6`
echo $senha > /dev/shm/$$.pass
echo "enable" > /dev/shm/$$
echo $senhaconfig >> /dev/shm/$$
echo "configure terminal" >> /dev/shm/$$
echo "vlan $vlanlocal" >> /dev/shm/$$
echo "name $descricaolocal" >> /dev/shm/$$
echo "end" >> /dev/shm/$$
echo "copy running-config startup-config" >>/dev/shm/$$
echo "" >>/dev/shm/$$
echo "exit" >> /dev/shm/$$
cat /dev/shm/$$ | sshpass -f/dev/shm/$$.pass ssh $usuario@$ip >/dev/null 2>/dev/null
echo -n -e '\n'
echo "Descrição alterada."
linha=`grep -n ^$i: $BASE/$DB | cut -d":" -f1`
atualiza_vlans $i $ip $usuario $senha $senhaconfig
echo -n -e '\n'
done
rm /dev/shm/$$*
fi
;;
2)
if [ $nome == "todos" ]
then
unset nome
for i in `grep :$vlan\ : $BASE/$DBVLANS | cut -d":" -f1`
do
nome="$nome$i "
done
fi
vlanlocal=$vlan
for i in $nome
do
echo -n -e '\n'
echo $i
ip=`grep ^$i: $BASE/$DB | cut -d":" -f2`
usuario=`grep ^$i: $BASE/$DB | cut -d":" -f4`
senha=`grep ^$i: $BASE/$DB | cut -d":" -f5`
senhaconfig=`grep ^$i: $BASE/$DB | cut -d":" -f6`
echo $senha > /dev/shm/$$.pass
echo "enable" > /dev/shm/$$
echo $senhaconfig >> /dev/shm/$$
echo "terminal length 0" >> /dev/shm/$$
echo "configure terminal" >> /dev/shm/$$
echo "no vlan $vlanlocal" >> /dev/shm/$$
echo "end" >> /dev/shm/$$
echo "copy running-config startup-config" >>/dev/shm/$$
echo "" >>/dev/shm/$$
echo "exit" >> /dev/shm/$$
cat /dev/shm/$$ | sshpass -f/dev/shm/$$.pass ssh $usuario@$ip >/dev/null 2>/dev/null
echo -n -e '\n'
echo "VLAN $vlanlocal excluída"
grep -v ^$i:$vlanlocal\ : $BASE/$DBVLANS | sort -o $BASE/$DBVLANS
atualiza_vlans $i $ip $usuario $senha $senhaconfig
done
rm /dev/shm/$$*
;;
3)
copiavlan $vlan
;;
4)
echo -n "Digite o IP: "
read iplocal
echo $iplocal | sed 's/\.//g' | grep -v '[[:punct:]]' | grep -v '[[:alpha:]]' 2>/dev/null >/dev/null
if [ $? -ne 0 ]
then
echo "IP inválido."
else
erro=0
for i in `echo $iplocal | sed 's/\./ /g'`
do
if [ $i -lt 0 ] && [ $i -gt 255 ]
then
erro=1
fi
done
if [ $erro -eq 1 ] 2>/dev/null >/dev/null
then
echo "O IP é inválido."
else
echo -n "Digite a máscara de rede (255.255.255.0=24; 255.255.0.0=16, etc): "
read mascara
echo $mascara | sed 's/\.//g' | grep -v '[[:punct:]]' | grep -v '[[:alpha:]]' 2>/dev/null >/dev/null
if [ $? -ne 0 ] || [ $mascara -lt 0 ] || [ $mascara -gt 32 ]
then
echo "Máscara de rede inválida."
else
configuraip $nome $vlan $iplocal $mascara
fi
fi
fi
read
;;
5)
excluirip $nome $vlan
;;
*)
return
;;
esac
}
# Apenas listas as VLANs de um swithc. O nome do switch deve ser passado como parâmetro.
listarvlanswitch(){
nome=$1
echo -n -e '\n'
linhas=`grep ^$nome: $BASE/$DBVLANS | wc -l`
for i in `seq $linhas`
do
vlan=`grep ^$nome: $BASE/$DBVLANS | head -$i | tail -1 | cut -d":" -f2`
desc=`grep ^$nome: $BASE/$DBVLANS | head -$i | tail -1 | cut -d":" -f3`
echo "$vlan - $desc"
done
echo -n -e '\n'
}
# Lista as VLANs existentes no switch. É necessário passar o nome do switch como parâmetro.
listarvlans(){
nome=$1
listarvlanswitch $nome
echo "0 - Voltar"
echo -n -e '\n'
echo -n "Qual vlan você quer alterar? :"
read opcaovlan
if [ $opcaovlan -ne 0 ]
then
alterarvlan $nome $opcaovlan
fi
}
# Habilita mais uma VLAN em uma interface de acesso. Precisa passar como parâmetro o nome do switch, o nome da interface e o id da VLAN
habilitavlanacesso(){
nome=$1
interface=$2
vlan=$3
echo -n "Esta é uma VLAN de VOiP?: "
read voip
echo "Vou configura a interface $interface do switch $nome na VLAN $vlan"
ip=`grep ^$nome: $BASE/$DB | cut -d":" -f2`
usuario=`grep ^$nome: $BASE/$DB | cut -d":" -f4`
senha=`grep $nome: $BASE/$DB | cut -d":" -f5`
senhaconfig=`grep $nome: $BASE/$DB | cut -d":" -f6`
echo $senha > /dev/shm/$$.pass
echo "terminal length 0" > /dev/shm/$$
echo "enable" >> /dev/shm/$$
echo $senhaconfig >>/dev/shm/$$
echo "configure terminal" >>/dev/shm/$$
echo "interface $interface" >>/dev/shm/$$
if [ $voip == "s" ] || [ $voip == "S" ]
then
echo "switchport voice vlan $vlan" >>/dev/shm/$$
else
echo "switchport access vlan $vlan" >>/dev/shm/$$
fi
echo "end" >>/dev/shm/$$
echo "copy running-config startup-config" >>/dev/shm/$$
echo "" >>/dev/shm/$$
echo "exit" >> /dev/shm/$$
cat /dev/shm/$$ | sshpass -f/dev/shm/$$.pass ssh $usuario@$ip >/dev/shm/$$.trunk 2>/dev/null
}
# Habilita mais uma VLAN em uma interface em trunk. Precisa passar como parâmetro o nome do switch, o nome da interface e o id da VLAN
habilitavlantrunk(){
nome=$1
interface=$2
vlan="$3"
echo "terminal length 0" > /dev/shm/$$
echo "enable" >> /dev/shm/$$
echo $senhaconfig >>/dev/shm/$$
echo "configure terminal" >>/dev/shm/$$
echo "interface $interface" >>/dev/shm/$$
echo "switchport trunk allowed vlan $vlan" >>/dev/shm/$$
echo "end" >>/dev/shm/$$
echo "copy running-config startup-config" >>/dev/shm/$$
echo "" >>/dev/shm/$$
echo "exit" >> /dev/shm/$$
cat /dev/shm/$$ | sshpass -f/dev/shm/$$.pass ssh $usuario@$ip >/dev/shm/$$.trunk 2>/dev/null
atualiza_portas $nome $ip $usuario $senha $senhaconfig
}
# Altera a descrição de uma interface de rede. O nome do switch, a interface e a nova descrição devem ser passados como parâmetros.
alteradescricao(){
nomelocal=$1
interface=$2
descricao="$3"
echo "Vou alterar a descrição da interface $interface do switch $nomelocal para $descricao."
ip=`grep ^$nomelocal: $BASE/$DB | cut -d":" -f2`
usuario=`grep ^$nomelocal: $BASE/$DB | cut -d":" -f4`
senha=`grep $nomelocal: $BASE/$DB | cut -d":" -f5`
senhaconfig=`grep $nomelocal: $BASE/$DB | cut -d":" -f6`
echo $senha >/dev/shm/$$.pass
echo "enable" >/dev/shm/$$
echo $senhaconfig >>/dev/shm/$$
echo "terminal length 0" >>/dev/shm/$$
echo "configure terminal" >>/dev/shm/$$
echo "interface $interface" >>/dev/shm/$$
echo "description $descricao" >>/dev/shm/$$
echo "end" >>/dev/shm/$$
echo "copy running-config startup-config" >>/dev/shm/$$
echo "" >>/dev/shm/$$
echo "exit" >> /dev/shm/$$
cat /dev/shm/$$ | sshpass -f/dev/shm/$$.pass ssh $usuario@$ip >/dev/shm/$$.trunk 2>/dev/null
read
}
# Configura um endereço IPv4 na VLAN do switch. O nome do Switch, a VLAN, o IP e a máscara de rede precisam ser passados como parâmetros.
configuraip(){
nomelocal=$1
vlan=$2
ip=$3
case $4 in
0) mascara=0.0.0.0 ;;
1) mascara=128.0.0.0 ;;
2) mascara=192.0.0.0 ;;
3) mascara=224.0.0.0 ;;
4) mascara=240.0.0.0 ;;
5) mascara=248.0.0.0 ;;
6) mascara=252.0.0.0 ;;
7) mascara=254.0.0.0 ;;
8) mascara=255.0.0.0 ;;
9) mascara=255.128.0.0 ;;
10) mascara=255.192.0.0 ;;
11) mascara=255.224.0.0 ;;
12) mascara=255.240.0.0 ;;
13) mascara=255.248.0.0 ;;
14) mascara=255.252.0.0 ;;
15) mascara=255.254.0.0 ;;
16) mascara=255.255.0.0 ;;
17) mascara=255.255.128.0 ;;
18) mascara=255.255.192.0 ;;
19) mascara=255.255.224.0 ;;
20) mascara=255.255.240.0 ;;
21) mascara=255.255.248.0 ;;
22) mascara=255.255.252.0 ;;
23) mascara=255.255.254.0 ;;
24) mascara=255.255.255.0 ;;
25) mascara=255.255.255.128 ;;
26) mascara=255.255.255.192 ;;
27) mascara=255.255.255.224 ;;
28) mascara=255.255.255.240 ;;
29) mascara=255.255.255.248 ;;
30) mascara=255.255.255.252 ;;
31) mascara=255.255.255.254 ;;
32) mascara=255.255.255.255 ;;
esac
echo -n -e '\n'
echo "Vou configurar o ip $ip/$mascara na VLAN $vlan do switch $nomelocal"
iplocal=`grep ^$nomelocal: $BASE/$DB | cut -d":" -f2`
usuario=`grep ^$nomelocal: $BASE/$DB | cut -d":" -f4`
senha=`grep $nomelocal: $BASE/$DB | cut -d":" -f5`
senhaconfig=`grep $nomelocal: $BASE/$DB | cut -d":" -f6`
echo $senha >/dev/shm/$$.pass
echo "enable" >/dev/shm/$$
echo $senhaconfig >>/dev/shm/$$
echo "terminal length 0" >>/dev/shm/$$
echo "configure terminal" >>/dev/shm/$$
echo "interface vlan$vlan" >>/dev/shm/$$
echo "ip address $ip $mascara" >>/dev/shm/$$
echo "end" >> /dev/shm/$$
echo "copy running-config startup-config" >>/dev/shm/$$
echo "" >>/dev/shm/$$
echo "exit" >> /dev/shm/$$
cat /dev/shm/$$ | sshpass -f/dev/shm/$$.pass ssh $usuario@$iplocal >/dev/shm/$$ 2>/dev/null
atualiza_ip $nomelocal $iplocal $usuario $senha $senhaconfig
}
#Mostra informações de uma interface de rede de um switch. É necessário passar no nome do switch e a interface como parâmetros
showinterface(){
nomelocal=$1
interface=$2
iplocal=`grep ^$nomelocal: $BASE/$DB | cut -d":" -f2`
usuario=`grep ^$nomelocal: $BASE/$DB | cut -d":" -f4`
senha=`grep $nomelocal: $BASE/$DB | cut -d":" -f5`
echo $senha >/dev/shm/$$.pass
echo "show interface $interface" >/dev/shm/$$
echo "exit" >> /dev/shm/$$
cat /dev/shm/$$
cat /dev/shm/$$ | sshpass -f/dev/shm/$$.pass ssh $usuario@$iplocal | more
}
# Administra uma interface do switch. É necessário passar o nome do switch e o nome da interface
adminterfaces(){
nomelocal=$1
interfacelocal=$2
unset opcao
echo -n -e "\n"
echo -e "Switch: $nomelocal" '\t' "Interface: $interfacelocal"
echo -n -e "\n"
echo "1 - Incluir em uma VLAN"
echo "2 - Excluir de uma VLAN"
echo "3 - Derrubar a interface"
echo "4 - Levantar a interface"
echo "5 - Alterar a descrição"
echo "6 - Mais informações"
echo -n -e "\n"
echo -n "Digite a opção (0 para cancelar): "
read opcao
case $opcao in
1)
listarvlanswitch $nomelocal
echo -n "Digite a VLAN :"
read opcaovlan
grep ^$nomelocal:$opcaovlan\ : $BASE/$DBVLANS >/dev/null
if [ $? -eq 0 ]
then
grep ^$nomelocal:$interfacelocal\ : $BASE/$DBPORTAS | grep trunk >/dev/null
if [ $? -eq 0 ]
then
echo "Vou configura a interface $interface do switch $nome na(s) VLAN(s) $vlan"
ip=`grep ^$nomelocal: $BASE/$DB | cut -d":" -f2`
usuario=`grep ^$nomelocal: $BASE/$DB | cut -d":" -f4`
senha=`grep $nomelocal: $BASE/$DB | cut -d":" -f5`
senhaconfig=`grep $nomelocal: $BASE/$DB | cut -d":" -f6`
echo $senha > /dev/shm/$$.pass
echo "terminal length 0" > /dev/shm/$$
echo "show interface $interfacelocal trunk | begin Vlan" >> /dev/shm/$$
echo "exit" >> /dev/shm/$$
cat /dev/shm/$$ | sshpass -f/dev/shm/$$.pass ssh $usuario@$ip >/dev/shm/$$.trunk 2>/dev/null
vlanlocal=`head -4 /dev/shm/$$.trunk | tail -1 | awk '{print $2}'`
echo $vlanlocal | grep none >/dev/null
if [ $? -eq 0 ]
then
echo $opcaovlan
else
opcaovlan="$opcaovlan,$vlanlocal"
fi
habilitavlantrunk $nomelocal $interfacelocal $opcaovlan
else
habilitavlanacesso $nomelocal $interfacelocal $opcaovlan
fi
fi
atualiza_portas $nomelocal $ip $usuario $senha $senhaconfig
;;
2)
grep ^$nomelocal:$interfacelocal $BASE/$DBPORTAS | grep trunk >/dev/null
if [ $? -eq 0 ]
then
ip=`grep ^$nomelocal: $BASE/$DB | cut -d":" -f2`
usuario=`grep ^$nomelocal: $BASE/$DB | cut -d":" -f4`
senha=`grep $nomelocal: $BASE/$DB | cut -d":" -f5`
senhaconfig=`grep $nomelocal: $BASE/$DB | cut -d":" -f6`
echo $senha > /dev/shm/$$.pass
echo "terminal length 0" > /dev/shm/$$
echo "show interface $interfacelocal trunk | begin Vlan" >> /dev/shm/$$
echo "exit" >> /dev/shm/$$
cat /dev/shm/$$ | sshpass -f/dev/shm/$$.pass ssh $usuario@$ip >/dev/shm/$$.trunk 2>/dev/null
for i in `head -4 /dev/shm/$$.trunk | tail -1 | awk '{print $2}' | sed 's/,/ /g' `
do
grep ^$nomelocal:$i\ : $BASE/$DBVLANS | cut -d":" -f2-
done
echo -n -e "\n"
echo -n "Qual VLAN você quer excluir da interface? (0 para cancelar): "
read opcao
if [ $opcao -eq 0 ]
then
return
fi
echo "Vou retirar a VLAN $opcao."
unset x
for i in `strings /dev/shm/$$.trunk | head -4 | tail -1 | awk '{print $2}' | sed 's/,/ /g'`
do
if [ $i -ne $opcao ]
then
x="$x $i"
fi
done
echo $x
read
habilitavlantrunk $nomelocal $interfacelocal "$x"
else
echo "Esta interface não está em trunk."
fi
atualiza_portas $nomelocal $ip $usuario $senha $senhaconfig
;;
3|4)
ip=`grep $nomelocal $BASE/$DB | cut -d":" -f2`
usuario=`grep $nomelocal $BASE/$DB | cut -d":" -f4`
senha=`grep $nomelocal $BASE/$DB | cut -d":" -f5`
senhaconfig=`grep $nomelocal $BASE/$DB | cut -d":" -f6`
echo "Alterando o status da porta."
echo $senha > /dev/shm/$$.pass
echo "enable" > /dev/shm/$$
echo $senhaconfig >> /dev/shm/$$
echo "terminal length 0" >> /dev/shm/$$
echo "configure terminal" >> /dev/shm/$$
echo "interface $interfacelocal" >> /dev/shm/$$
if [ $opcao -eq 3 ]
then
echo "shutdown" >> /dev/shm/$$
else
echo "no shutdown" >> /dev/shm/$$
fi
echo "end" >> /dev/shm/$$
echo "copy running-config startup-config" >>/dev/shm/$$
echo "" >>/dev/shm/$$
echo "exit" >> /dev/shm/$$
cat /dev/shm/$$ | sshpass -f/dev/shm/$$.pass ssh $usuario@$ip >/dev/null 2>/dev/null
echo "Porta alterada."
read
atualiza_portas $nomelocal $ip $usuario $senha $senhaconfig
;;
5)
echo -n "Digite a descrição para a interface $interfacelocal (0 para cancelar): "
read descricao
if [ "$descricao" != "0" ]
then
alteradescricao $nomelocal $interfacelocal "$descricao"
atualiza_portas $nomelocal $ip $usuario $senha $senhaconfig
fi
;;
6)
showinterface $nomelocal $interfacelocal
read
;;
*)
return
;;
esac
rm /dev/shm/$$*
}
# Lista as interfaces do switch. É necessário passar o nome do switch como parâmetro.
listarinterfaces(){
nomelocal=$1
unset interfacelocal
echo -e "Switch" '\t' "Porta" '\t' "Descrição" '\t' "Situação" '\t' "VLAN"
grep ^$nomelocal $BASE/$DBPORTAS >/dev/shm/$$
linhas=`wc -l /dev/shm/$$ | cut -d" " -f1`
for i in `seq $linhas`
do
echo -n "$i - "
head -$i /dev/shm/$$ | tail -1
done
echo -n -e "\n"
while [ -z $interfacelocal ]
do
echo -n "Digite a interface (0 para sair): "
read interfacelocal
done
if [ $interfacelocal != "0" ]
then
echo $interfacelocal | grep -v '[[:punct:]]' | grep -v '[[:alpha:]]' 2>/dev/null >/dev/null
if [ $? -eq 0 ]
then
if [ $interfacelocal -le $linhas ] && [ $interfacelocal -gt 0 ]
then
interfacelocal=`head -$interfacelocal /dev/shm/$$ | tail -1 | cut -d":" -f2`
adminterfaces $nomelocal $interfacelocal
fi
fi
fi
echo -n -e "\n"
}
# Altera os dados de um switch já cadastrado. O nome do equipamento deve ser passado como parâmetro.
alterarswitch(){
nome=$1
ip=`grep ^$nome: $BASE/$DB | cut -d":" -f2`
descricao=`grep ^$nome: $BASE/$DB | cut -d":" -f3`
usuario=`grep ^$nome: $BASE/$DB | cut -d":" -f4`
echo -n "Nome do dispositivo ($nome):"
read nomelocal
if [ "a"$nomelocal != "a" ]
then
nomeantigo=$nome
nome=$nomelocal
grep ^$nome: $BASE/$DB 2>/dev/null >/dev/null
if [ $? -eq 0 ]
then
echo "Esse nome de equipamento já existe no cadastrado."
read
return
fi
fi
echo -n "IP do dispositivo ($ip): "
read iplocal
if [ "a"$iplocal != "a" ]
then
ip=$iplocal
fi
echo -n "Descrição ($descricao): "
read descricaolocal
if [ "a"$descricaolocal != "a" ]
then
descricao=$descricaolocal
fi
echo -n "Usuário para conexão ($usuario): "
read usuariolocal
if [ "a"$usuariolocal != "a" ]
then
usuario=$usuariolocal
fi
echo -n "Senha de acesso : "
read -s senha
echo -n -e "\n"
echo -n "Senha de acesso para configuração global :"
read -s senhaglobal
grep -v ^$nomeantigo: $BASE/$DB | sort -o $BASE/$DB
echo "$nome:$ip:$descricao:$usuario:$senha:$senhaglobal" >> $BASE/$DB
echo -n -e "\n"
sort $BASE/$DB -o $BASE/$DB
sed s/$nomeantigo:/$nome:/ $BASE/$DBDETALHES | sort -o $BASE/$DBDETALHES
sed s/$nomeantigo:/$nome:/ $BASE/$DBMAC | sort -o $BASE/$DBMAC
sed s/$nomeantigo:/$nome:/ $BASE/$DBPORTAS | sort -o $BASE/$DBPORTAS
sed s/$nomeantigo:/$nome:/ $BASE/$DBVLANS | sort -o $BASE/$DBVLANS
echo "Equipamento atualizado."
read
}
# Lista dos detalhes de um switch. Deve-se passar o nome do swtich como parâmetro
listardetalhes(){
opcaoexec=a
while [ $opcaoexec != "s" ]
do
nome="$1"
linha=`grep ^$nome: $BASE/$DBDETALHES`
hostname=`grep hostname $BASE/$nome | cut -d" " -f2`
rom=`echo $linha | tail -1 | cut -d":" -f2`
uptime=`echo $linha | tail -1 | cut -d":" -f3`
cpu=`echo $linha | tail -1 | cut -d":" -f4`
ethernet=`echo $linha | tail -1 | cut -d":" -f5`
giga=`echo $linha | tail -1 | cut -d":" -f6`
ten=`echo $linha | tail -1 | cut -d":" -f7`
ram=`echo $linha | tail -1 | cut -d":" -f8`
vlan=`grep ^$nome: $BASE/$DBVLANS | wc -l`
echo "Nome do equipamento: $hostname"
echo "Versão da ROM : $rom"
echo "A quanto tempo está ligado: $uptime"
echo "Tipo de CPU: $cpu"
echo "Quantidade de VLANs: $vlan"
echo "Quantidade de interfaces Fast Ethernet: $ethernet"
echo "Quantidade de interfaces Giga Ethernet: $giga"
echo "Quantidade de interfaces 10 Giga Ethernet: $ten"
echo "Memória Ram: $ram"
echo -n -e "\n"
echo "1 - Acessar"
echo "2 - Atualizar"
echo "3 - Listar VLANs"
echo "4 - Criar VLAN"
echo "5 - Listar interfaces"
echo "6 - Alterar informações de acesso"
echo "7 - Exclui"
echo -n -e "\n"
echo "0 - Sair"
echo -n -e "\n"
echo -n "Digite a opção: "
read opcaoexec
echo $opcaoexec | grep -e [a-z] 2>/dev/null >/dev/null
case $opcaoexec in
1)
acessar $nome
;;
2)
atualizar $nome
;;
3)
listarvlans $nome
;;
4)
criarvlan $nome
;;
5)
listarinterfaces $nome
;;
6)
alterarswitch $nome
;;
7)
excluir $nome
read
return
;;
*)
return
;;
esac
done
}
# Exclui um dispostivo.
excluir(){
x=a$1
if [ $x == "a" ]
then
echo -n -e "\n"
cont=1
for i in `cut -d":" -f1 $BASE/$DB`
do
echo "$cont - $i"
let cont=$cont+1
done
echo -n -e "\n"
echo "0 - Cancelar"
echo -n -e "\n"
echo -n "Qual equipamento você quer excluir? :"
read excluir
else
excluir=`grep -n ^$nome: $BASE/$DB | cut -d":" -f1`
fi
if [ $excluir -ne 0 ]
then
erro=0
equipamento=`head -$excluir $BASE/$DB | tail -1 | cut -d":" -f1 `
grep -v ^$equipamento $BASE/$DB > /dev/shm/$$
mv /dev/shm/$$ $BASE/$DB
grep -v ^$equipamento $BASE/$DBDETALHES > /dev/shm/$$
mv /dev/shm/$$ $BASE/$DBDETALHES
grep -v ^$equipamento $BASE/$DBPORTAS > /dev/shm/$$
mv /dev/shm/$$ $BASE/$DBPORTAS
grep -v ^$equipamento $BASE/$DBVLANS > /dev/shm/$$
mv /dev/shm/$$ $BASE/$DBVLANS
grep -v ^$equipamento $BASE/$DBMAC > /dev/shm/$$
mv /dev/shm/$$ $BASE/$DBMAC
rm $BASE/$equipamento $BASE/$equipamento.*
echo -n -e "\n"
echo "Equipamento excluído."
fi
}
# Cria uma VLAN. É necessário passar o nome, ip, usuário, senha, senha de config do switch, id e nome da VLAN
criacaovlan(){
nome=$1
ip=$2
usuario=$3
senha=$4
senhaconfig=$5
id=$6
vlan=$7
echo "$senha" >/dev/shm/$$.pass
echo "terminal length 0" >/dev/shm/$$
echo "enable" >>/dev/shm/$$
echo "$senhaconfig" >>/dev/shm/$$
echo "configure terminal" >>/dev/shm/$$
echo "vlan $id" >>/dev/shm/$$
echo "name $vlan" >>/dev/shm/$$
echo "copy running-config startup-config" >>/dev/shm/$$
echo "" >>/dev/shm/$$
echo "exit" >> /dev/shm/$$
cat /dev/shm/$$ | sshpass -f/dev/shm/$$.pass ssh $usuario@$ip >/dev/null 2>/dev/null
echo -n -e '\n'
echo "VLAN criada."
atualiza_vlans $nome $ip $usuario $senha $senhaconfig
rm /dev/shm/$$*
}
# Criar uma VLAN no switch especificado. Precisa passar o nome do equipamento como parâmetro
criarvlan(){
echo -n -e '\n'
echo -n "Digite o ID da VLAN: "
read id
echo $id | grep -v '[[:punct:]]' | grep -v '[[:alpha:]]' 2>/dev/null >/dev/null
if [ $? -ne 0 ]
then
echo "O ID precisa ser um número inteiro."
read
elif [ -z $id ]
then
return
elif [ $id -lt 2 ] || [ $id -gt 4098 ]
then
echo "O ID é inválido"
read
else
grep :$id\ : $BASE/$DBVLANS | grep -v ^$nome2 >/dev/null >/dev/null
if [ $? -ne 0 ]
then
echo -n "Digite o nome da VLAN :"
read nomevlan
if [ -z $nomevlan ]
then
nomevlan="VLAN$id"
fi
ip=`grep ^$nome: $BASE/$DB | cut -d":" -f2`
usuario=`grep ^$nome: $BASE/$DB | cut -d":" -f4`
senha=`grep ^$nome: $BASE/$DB | cut -d":" -f5`
senhaconfig=`grep ^$nome: $BASE/$DB | cut -d":" -f6`
criacaovlan $nome $ip $usuario $senha $senhaconfig $id $nomevlan
read
else
echo "A VLAN já existe."
read
fi
fi
}
# Mostra a quantidade de equipamento em cada VLAN.
vlans(){
somaportas=0
somahosts=0
echo -e Vlan '\t' Nome '\t\t' Portas' 'Hosts
for i in `cut -d":" -f2 $BASE/$DBVLANS | sort -n | uniq`
do
desc=`grep :$i\ : $BASE/$DBVLANS | cut -d":" -f3- | head -1 | sed 's/://g'`
portas=`cut -d":" -f5 $BASE/$DBPORTAS | grep ^$i$ | wc -l`
hosts=`grep " $i " $BASE/$DBMAC | cut -d":" -f3 | sort | uniq | wc -l`
echo -e $i '\t' $desc '\t' $portas '\t '$hosts
let somahosts=$somahosts+$hosts
let somaportas=$somaportas+$portas
done
echo -n -e '\n'
echo -e '\t 'Portas = $somaportas '\t' Hosts = $somahosts
echo -n -e "\n"
echo "Opções"
echo -n -e "\n"
echo "0 - Sair"
echo "Digite o número da VLAN para alterá-la."
echo -n -e "\n"
echo -n "Digite a opção: "
read opcaovlan
case $opcaovlan in
0)
echo "Você escolheu sair"
;;
*)
alterarvlan todos $opcaovlan
;;
esac
}
# Mostra em qual porta de qual switch um determinado IP está, e permite derrubar a porta.
mac(){
echo -n -e "\n"
while [ -n $ip ]
do
echo -n "Digite o endereço IP (0 para cancelar): "
read ip
if [ -z $ip ]
then
ip=0
elif [ $ip == "0" ]
then
return
else
break
fi
done
mac=`grep $ip\ : $BASE/$DBIP | cut -d":" -f2 | head -1`
if [ -z $mac ]
then
echo "Não encontrei o ip solicitado"
read
return
fi
linhas=`grep -i $mac $BASE/$DBMAC | wc -l`
if [ $linhas -ne 0 ]
then
echo -n -e "\n"
echo -e Switch '\t' VLAN '\t' Porta
for i in `seq $linhas`
do
switch=`grep -i $mac $BASE/$DBMAC | head -$i | tail -1 | cut -d":" -f1`
vlan=`grep -i $mac $BASE/$DBMAC | head -$i | tail -1 | cut -d":" -f2`
porta=`grep -i $mac $BASE/$DBMAC | head -$i | tail -1 | cut -d":" -f4-`
prob=`grep "$porta" $BASE/$DBMAC | wc -l`
echo -e $prob' '$i' '$switch' '$vlan' '$porta >> /dev/shm/$$
done
sort -n /dev/shm/$$ | head -1 | awk '{print $3"\t"$4"\t"$5}'
echo -n -e "\n"
echo -n "Devo derrubar a porta? : (s/n)"
read opcaomac
if [ $opcaomac == "s" ] || [ $opcao == "S" ]
then
switch=`sort -n /dev/shm/$$ | cut -d" " -f3 | head -1`
porta=`sort -n /dev/shm/$$ | cut -d" " -f5 | head -1`
ip=`grep $switch $BASE/$DB | cut -d":" -f2`
usuario=`grep $switch $BASE/$DB | cut -d":" -f4`
senha=`grep $switch $BASE/$DB | cut -d":" -f5`
senhaconfig=`grep $switch $BASE/$DB | cut -d":" -f6`
echo "Derrubando a porta."
echo $senha > /dev/shm/$$.pass
echo "enable" > /dev/shm/$$
echo $senhaconfig >> /dev/shm/$$
echo "terminal length 0" >> /dev/shm/$$
echo "configure terminal" >> /dev/shm/$$
echo "interface $porta" >> /dev/shm/$$
echo "shutdown" >> /dev/shm/$$
echo "end" >> /dev/shm/$$
echo "copy running-config startup-config" >>/dev/shm/$$
echo "" >>/dev/shm/$$
echo "exit" >> /dev/shm/$$
cat /dev/shm/$$ | sshpass -f/dev/shm/$$.pass ssh $usuario@$ip >/dev/null 2>/dev/null
echo "Porta derrubada."
read
rm /dev/shm/$$*
else
echo -n -e "\n"
fi
else
echo "Não encontrei o MAC solicitado."
read
fi
}
# Inicio do programa
# Menu principal
opcao=9
checa_arquivos
while [ $opcao -ne 0 ]
do
echo -n -e "\n"
echo "Total de equipamento cadastrados: "`wc -l $BASE/$DB | cut -d" " -f1`
echo "Total de VLANS: "`cut -d":" -f2 $BASE/$DBVLANS | sort | uniq | wc -l`
echo "Total de portas: "`wc -l $BASE/$DBPORTAS | cut -d" " -f1`
echo "Total de portas em up : "`grep connect $BASE/$DBPORTAS | grep -v notconnect | wc -l`
echo "Total de portas em down (sem cabo) : "`grep notconnect $BASE/$DBPORTAS | wc -l`
echo "Total de portas inativas (sem configuração) : "`grep inactive $BASE/$DBPORTAS | wc -l`
echo "Total de portas desabilitadas (shutdown) : "`grep disabled $BASE/$DBPORTAS | grep -v err-disabled | wc -l`
echo "Total de portas com erro : "`grep err-disabled $BASE/$DBPORTAS | wc -l`
echo "Total de portas em trunk : "`grep trunk $BASE/$DBPORTAS | wc -l`
echo "Total de portas de acesso : "`grep -v trunk $BASE/$DBPORTAS | wc -l`
echo "Total de dispositivo : "`cut -d":" -f3 $BASE/$DBMAC | sort | uniq | wc -l`
echo -n -e "\n"
echo "1 - Incluir dispositivos"
echo "2 - Excluir dispositivos"
echo "3 - Listar dispositivos"
echo "4 - Atualizar banco de dados"
echo "5 - Consulta de mac-address"
echo "6 - VLANS"
echo "0 - Sair"
echo -n -e "\n"
echo -n "Digite a opção: "
read opcao
echo $opcao | grep -e [a-z] 2>/dev/null >/dev/null
if [ $? -eq 0 ]
then
opcao=0
else
case $opcao in
1)
incluir
;;
2)
excluir
;;
3)
listar
;;
4)
atualizar todos
;;
5)
mac
;;
6)
vlans
;;
*)
;;
esac
fi
done
Gerenciamento de espaço em disco
Analisador de rede com aviso em net send
Criação de pasta com senha no Apache
Nenhum comentário foi encontrado.
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
fusermount3 no Ubuntu 25.10 - mantenha o perfil do AppArmor
[Resolvido] dlopen(): error loading libfuse.so.2 AppImages require FUSE to run.
Criação de diretórios e aplicação de restrições de acesso no Linux
diferença entre o Tor baixado pelo Gerenciador de Aplicativos e o Tor ... (5)
VOL já não é mais como antes? (28)
Atualizei meu ubuntu e desliguei e ele não inicia corretamente (18)









