Administração de switch Cisco
Publicado por Ricardo Lino Olonca (última atualização em 25/10/2017)
[ Hits: 6.708 ]
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
mkzeowmp - zeo mount point para PZP (python, zope e plone)
Script contra ataques de Brutal Force por SSH.
Gerenciamento de clientes com cbq,squid e firewall no kurumin.
Verifica quais ports necessitam de atualização
Nenhum comentário foi encontrado.
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Como realizar um ataque de força bruta para desobrir senhas?
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
Scripts ou binários [RESOLVIDO] (3)
VOL já não é mais como antes? (10)
Pergunta: Meu teclado não está respondendo direito como e consertar? ... (4)









