+3

Gerenciamento de Redes Utilizando o Protocolo SNMP

criado por Italo Marcelo de O. Costa em 24/01/2003 8:00pm
Para coletar a informação em um equipamento é interessante e necessário saber quais são os objetos existentes. Para visualizar todos os objetos do equipamento é só acessa-lo com o seguinte script:

<?php
// coleta de todos os objetos gerenciáveis do equipamento
$comando = "snmpwalk NÚMERO_IP_EQUIPAMENTO public";
passthru($comando,$result);
?>

Por exemplo, após ter conhecido os objetos de roteador cisco eu veriquei que os objetos que coletam a entrada e saída de bytes de suas duas interfaces são inInOctets e outInOctets:

<?php
// coleta de quantidade de entrada de bytes na sua interface
$saida = shell_exec("snmpwalk NÚMERO_IP_EQUIPAMENTO public interfaces.ifTable.ifEntry.ifInOctets");
ereg("Counter32: ([0-9]{1,}).*Counter32: ([0-9]{1,})",$saida, $valores);
$valor=$valores[1];

// coleta de quantidade de saída de bytes da sua interface
$saida = shell_exec("snmpwalk NÚMERO_IP_EQUIPAMENTO public interfaces.ifTable.ifEntry.ifOutOctets");
ereg("Counter32: ([0-9]{1,}).*Counter32: ([0-9]{1,})",$saida, $valores2);
$valor2=$valores2[1];
?>

Para eu verificar qual é a vazão da banda destas duas interfaces, utilizarei os objetos ifSpeed:

<?php
// coleta do valor da vazão das interfaces, neste caso serial e ethernet
// a serial que é da WAN e a ethernet da LAN
$saida = shell_exec("snmpwalk NÚMERO_IP_EQUIPAMENTO public interfaces.ifTable.ifEntry.ifSpeed");
ereg("Gauge32: ([0-9]{1,}).*Gauge32: ([0-9]{1,})",$saida, $valores);
$ethernet = $valores[1];
$serial = $valores[2];
?>

Bom, para gerar os gráficos eu utilizei a classe JpGraph já explicada aqui no PHPBrasil.com (http://phpbrasil.com/articles/article.php/id/315), é só pegar os valores e jogar na classe desejada:

<?php
// gráfico de linhas (linha azul e vermelha)
include("jpgraph.php");
include("jpgraph_line.php");
$graph = new Graph(400,200,"auto");
$graph->img->SetMargin(60,120,40,40);	
$graph->SetBackgroundImage("fundo_byte.png",2);
$graph->img->SetAntiAliasing("white");
$graph->SetScale("textlin");
$graph->SetShadow();
$graph->title->Set("QTDE DE BYTES - Ultimos Segundos");
// Use built in font
$graph->title->SetFont(FF_FONT1,FS_BOLD);$graph->legend->Pos(0.05,0.7,"right","center");
// Cria a primeira linha
$p1 = new LinePlot($datay);
$p1->mark->SetType(MARK_FILLEDCIRCLE);
$p1->mark->SetFillColor("red");
$p1->mark->SetWidth(4);
$p1->SetColor("blue");
$p1->SetCenter();
$p1->SetLegend("Bytes Enviados");
$graph->Add($p1);
// Cria a segunda linha
$p2 = new LinePlot($datay2);
$p2->mark->SetType(MARK_STAR);
$p2->mark->SetFillColor("red");
$p2->mark->SetWidth(4);
$p2->SetColor("red");
$p2->SetCenter();
$p2->SetLegend("Bytes Recebido");
$graph->Add($p2);
// Output line
$graph->Stroke();
?>

Percebam que existem duas variáveis chamadas datay e datay2. Para que? Porque quando eu coletava o valor no equipamento eu armazenava no MySQL. Essa coleta é feita a cada segundo e o script tem que verificar qual a diferença de um segundo para o outro, guardar no banco e exibir no gráfico.

Comentários:

Mostrando 1 - 6 de 6 comentários
Obrigado de Paula, estou fazendo uma implementação para NOBREAKS e vou aproveitar para inserir de impressora tbm.
31/10/2003 6:47am (~21 anos atrás)

Parabéns pelo artigo, sugiro incluir algo sobre "gerenciamento de impressoras" RFC1759 já que como vi, vc entende mesmo de SNMP. Abraços.
31/10/2003 6:04am (~21 anos atrás)

Eu é q agradeço a crítica.
Valeu Alexandro
25/03/2003 2:35pm (~21 anos atrás)

Leonardo, estou criando uma nova versão de minha homepage e vou disponibilizar o estudo completo que fiz sobre gerenciamento de rede utilizando o protocolo SNMP, ok. Existem tutoriais na net mas que tratam somente do snmp.... agora php e snmp..... somente na php.net... ou no proprio php_info... vc encontra alguma coisa... mas eh muito pouco.
Agradeço pela crítica.
31/01/2003 7:35am (~22 anos atrás)

Entaum Jayr, na maioria dos meus scripts eu trabalhava com a comunidade publica soh que somente o ip x tinha acesso a este roteador o restante era bloqueado... configuração do proprio sistema do roteador cisco.
Se vc tiver um ... dah uma olhanda no man ou no hlp... q ele te explica como fazer isso.

Abraços e muito obrigado pela crítica
27/01/2003 6:03am (~22 anos atrás)

Muito bom seu artigo.
Queria saber se, como no seu exemplo você usa parâmetros públicos para acesso ao roteador, se quanquer pessoa de posse do endereço do seu roteador conseguirá le-lo ou essa tarefa será dependente da conexão estar usando o input local do roteador.
Pergunto (claro por desconhecimento total de roteadores) pois assim, qualquer mane conseguiria fazer meu roteador entrar em overhead 8como alguns rackers tem feito com os DNS.
26/01/2003 10:46am (~22 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)