Administração de switch Cisco
Publicado por Ricardo Lino Olonca (última atualização em 25/10/2017)
[ Hits: 6.355 ]
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
Acompanhamento de log squid com hora real
Verifica últimos arquivos criados
Script de backup para Gravador CD-R ou CD-Rw
Gerando HTML de status de HD e coneccao de internet
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Acabei de formatar meu ssd e deu erro (3)
Desempenho abaixo do esperado - travadas e congelamento do sistema ope... (5)
Bash ao invés de Fish no CachyOS (1)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta