[GTER] Ferramenta Perl para visualização de Sessão BGP
willian pires
willian_pires at hotmail.com
Wed Jul 1 16:00:17 -03 2015
Senhores segue um "software/script" em perl que auxilia o seu suporte,consegue assim ver quais sessões em bgp estão ativas e "grifa" as inativas.
Basicamente, crie um arquivo verbgp.pl e de permissão de execução.O host de onde vc vai visualizar a sessão tem que ter permissão de snmp public.
Aí execute:
$verbgp.pl 178.55.21.1
Aceito sugestões de melhorias.
#!/usr/bin/perl
# script: versao 1.0 # autor: willian pires de souza willian_pires[ARROBA]emailquente.com# verbgp: depende de ping,snmpwalk e que o host onde executa tenha acesso snmp# bom uso.
use Term::ANSIColor;
$destino = $ARGV[0];$ptipo = $ARGV[1];$destino=~s/\s+//;
print "\e[H\e[J";print "\e[H";
if($ptipo eq ""){ $ptipo="ether";}
if($destino eq ""){ print "Digite um ip exemplo 10.16.9.17"; exit();}else{
$pstatus=`fping $destino | grep -i alive`;
print "O host: $destino sera acessado.\r\n"; sleep(1); if($pstatus ne ""){ &getall(); }else{ print "---- O Host: $destino esta indisponivel...\n"; }}
sub sec2human { my $secs = shift; $secs = int($secs); $tret="";
if ($secs >= 86400) { $tret .= sprintf("%02d",int($secs/86400))."d ";$secs = $secs - ((int($secs/86400)*86400)); } else {$tret.="00d ";} if ($secs >= 3600) { $tret .= sprintf("%02d",int($secs/3600))."h ";$secs = $secs - ((int($secs/3600)*3600)); }else {$tret.="00h ";} if ($secs >= 60) { $tret .= sprintf("%02d",int($secs/60))."m ";$secs = $secs - ((int($secs/60)*60)); }else {$tret.="00m ";} if ($secs >= 0) { $tret .= sprintf("%02d",int($secs))."s "; }else { $tret.="00s";} return $tret;}
sub getall(){print "\e[H\e[J";print "\e[H";
print "Acessando: $destino ";
$oid_as="snmpwalk -c public -v2c $destino 1.3.6.1.2.1.15.3.1.9 | awk -F \"INTEGER: \" '{ print \$2 }'";$oid_peer="snmpwalk -c public -v2c $destino 1.3.6.1.2.1.15.3.1.7 | awk -F \"IpAddress: \" '{ print \$2 }'";$oid_state="snmpwalk -c public -v2c $destino 1.3.6.1.2.1.15.3.1.2 | awk -F \"INTEGER: \" '{ print \$2 }'";$oid_msgrec="snmpwalk -c public -v2c $destino 1.3.6.1.2.1.15.3.1.12 | awk -F \"Counter32: \" '{ print \$2 }'";$oid_msgsen="snmpwalk -c public -v2c $destino 1.3.6.1.2.1.15.3.1.13 | awk -F \"Counter32: \" '{ print \$2 }'";$oid_prefixes="snmpwalk -c public -v2c $destino 1.3.6.1.4.1.9.9.187.1.2.4.1.1 | awk -F \"Counter32: \" '{ print \$2 }'";$oid_dprefixes="snmpwalk -c public -v2c $destino 1.3.6.1.4.1.9.9.187.1.2.4.1.6 | awk -F \"Gauge32: \" '{ print \$2 }'";$oid_uptime="snmpwalk -c public -v2c $destino 1.3.6.1.2.1.15.3.1.16 | awk -F \"Gauge32: \" '{ print \$2 }'";$getname=`snmpwalk -c public -v2c $destino SNMPv2-MIB::sysName.0 | awk -F \"STRING: \" '{ print \$2 }'`;
$getname=~s/\n+//;
@lista=`$oid_as`;print ".";@listb=`$oid_peer`;print ".";@listc=`$oid_state`;print ".";@listd=`$oid_msgrec`;print ".";@liste=`$oid_msgsen`;print ".";@listf=`$oid_prefixes`;print ".";@listg=`$oid_dprefixes`;print ".";@listh=`$oid_uptime`;print ".";
$port=0;print "\e[H\e[J";print "\e[H";
print color 'bold blue'; print "Dispositivo: $getname \nEndereco IP: $destino \r\n\n"; print color 'bold blue on_black';
printf("%-19s %-15s %-15s %-10s %-10s %-10s %-10s %-18s\n","Peer" ,"ASN", "Status","Msg Rec", "Msg Send", "Prefixes", "Denied", "Uptime"); print color 'reset';while(<@listb>){ $alias=substr($lista[$port],0,20); $descr=substr($listb[$port],0,20);
if(length($alias) > 2 && length($descr) > 2 && $alias eq $descr ){ $talias=$alias; }elsif(length($alias) > 2 && length($descr) > 2 && $alias ne $descr){ if(length($alias) > length($descr)){ $talias=$descr; }else{ $talias=$alias; } }elsif(length($alias)>2){ $talias=$alias; }elsif(length($descr) > 2){ $talias=$descr;
}
$talias=~s/\n+//;
$opers=$listc[$port]; $msgrec=$listd[$port]; $msgsen=$liste[$port]; $prefixes=$listf[$port]; $dprefixes=$listg[$port]; $uptime=$listh[$port]; $alias=~s/\n//; $descr=~s/\n//; $opers=~s/\n//; $msgrec=~s/\n//; $msgsen=~s/\n//; $prefixes=~s/\n//; $dprefixes=~s/\n//; $uptime=~s/\n//; $ouptime=&sec2human($uptime);
$pcolor="blue"; if($opers eq "1"){$pstate="Idle";$pcolor="bold white on_red";}elsif($opers eq "2"){$pstate="Connect";}elsif($opers eq "3"){$pstate="Active";$pcolor="bold red on_white";}elsif($opers eq "4"){$pstate="OpenSent";}elsif($opers eq "5"){$pstate="OpenConfirm";}elsif($opers eq "6"){$pstate="Established";$pcolor="green";} print color $pcolor; printf("%-19s %-15s %-15s %-10s %-10s %-10s %-10s %-18s\n",$descr ,$talias, $pstate, $msgrec,$msgsen,$prefixes,$dprefixes,$ouptime); print color 'reset'; $port++;}}
More information about the gter
mailing list