Pular para o conteúdo

Gerenciando redes com Perl e SNMP

Muitas empresas utilizam softwares de código aberto nas mais diversas atividades. Em minha carreira deparei-me com sistemas de gerência de rede que não atendiam as necessidades do cliente. Minha intenção aqui é demonstrar de forma prática como o SNMP funciona, como entender as MIBs e principalmente, como usar o Perl para melhorar os sistemas de gerência, ou mesmo, criar o seu próprio.
Perfil removido removido
Hits: 52.430 Categoria: Perl Subcategoria: Rede
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Parte 2: O que você deve saber sobre MIBs

O código abaixo é a representação do objeto 1.3.6.1.2.1.1.3 - ou iso.org.dod.internet.mgmt.mib-2.system.sysUpTime - de um arquivo MIB II. Este objeto permite que obtenhamos o tempo em que um sistema está operacional, ou seja, o SysUpTime de um elemento.

1  sysUpTime OBJECT-TYPE
2  SYNTAX Time Ticks
3  MAX-ACCESS Read Only
4  STATUS Current
5  DESCRIPTION  
6   The time (in hundredths of a second) since the
7   network management portion of the system was last
8   re-initialized.  
9   ::= { system 3 }
10

As MIBs são escritas em ASN.1 (Abstract Syntax Notation 1). O ASN.1 é mantido pela ISO e utilizada para as mais diversas finalidades, desde descrever Controle Aéreo até a sua placa de rede. O ASN.1 é uma especificação muito extensa e queremos aqui passar apenas o que você necessita para melhorar sua habilidades de administrador de uma rede.

Observe que o documento é estruturado. A seção DESCRIPTION, na linha 5, é a mais interessante para os administradores pois ela diz o que este objeto faz. Neste caso, como já dissemos ela retorna o tempo, em centésimos de segundos desde a última inicialização do sistema. Na terceira linha temos o MAX-ACCESS. Este define a ação que o administrador pode tomar com o objeto. Pode ser "read-only", "read-write", "read-create", "not-accessible" e "accessible-for-notify". A segunda linha apresenta a SYNTAX, que nada mais é que o tipo de dados que recebemos ou devemos usar para configurar o objeto. A lista de tipos é extensa, mas podemos destacar como principais os descritos na tabela:

Tipo de DadoDescrição
OBJECT IDENTIFIER Notação formada por uma sequência de números decimais separados por ponto que representa o objeto dentro da árvore de objetos. No nosso exemplo o objetct-type é 1.3.6.1.2.1.1.3 que é traduzido para sysUpTime.
INTEGER Valor numérico inteiro que pode ser utilizado para representar estados (0 = "down", 1= "up", 3 = "dormant") ou valores quantitativos como número de bytes transmitidos.
OCTET STRING String de bytes. Pode ser utilizada para representar, por exemplo, caracteres ASCII
IpAdress e NetworkAdresso Representação de endereços IPv4. As versões 1 e 2 do SNMP não suportam o IPv6
Counter e Gauge São contadores. A diferença é que o Gauge aceita valores crescentes e decrescentes enquanto o Counter aceita apenas valores crescentes.
TimeTicks Utilizado para medir tempo.
"Sequence" e "Sequence of" Sequence é formado por uma sequência dos tipos de dados definidos pela ASN.1. E "Sequence of" representa uma sequência de objetos.


O OBJECT IDENTIFIER ou OID é uma representação única de um elemento dentro da árvore de objetos gerenciáveis do elemento. A figura abaixo representa uma árvore de objetos de um arquivo MIB:
Linux: Gerenciando redes com Perl e SNMP
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
Se observarmos o início de um arquivo MIB vamos ter as seguintes informações:

SNMPv2-SMI DEFINITIONS ::= BEGIN

-- the path to the root

org            OBJECT IDENTIFIER ::= { iso 3 }  --  "iso" = 1
dod            OBJECT IDENTIFIER ::= { org 6 }
internet       OBJECT IDENTIFIER ::= { dod 1 }

directory      OBJECT IDENTIFIER ::= { internet 1 }

mgmt           OBJECT IDENTIFIER ::= { internet 2 }
mib-2          OBJECT IDENTIFIER ::= { mgmt 1 }
transmission   OBJECT IDENTIFIER ::= { mib-2 10 }
experimental   OBJECT IDENTIFIER ::= { internet 3 }

private        OBJECT IDENTIFIER ::= { internet 4 }
enterprises    OBJECT IDENTIFIER ::= { private 1 }

security       OBJECT IDENTIFIER ::= { internet 5 }

snmpV2         OBJECT IDENTIFIER ::= { internet 6 }

Observando o arquivo e a imagem gerada por um software gráfico para leitura de MIBs vemos que "ISO" é a raiz da árvore. Seu OID é 1. ORG é definido como {iso 3}. Então ele é o terceiro elemento da árvore, dentro de "ISO". Seu OID é "1.3". Assim vão se formando os OIDs dentro da árvore. mib-2 é definida como {mgmt 1}. Então, mib-2 é "1.3.6.1.2.1".

Para nós, administradores de rede, os objetos mais interessantes estão dentro de "MIB-2" e "PRIVATE". "MIB-2" contém objetos que nos permitem gerenciar características que são comuns a diversos equipamentos e servidores de rede. Os objetos dentro de "PRIVATE" permitem gerenciar características específicas definidas por fabricantes. Nas figuras abaixo vemos os objetos dentro de ISO.org.dod.mgmt.mib-2.ospf que nos permite gerências as características do protocolo de roteamento OSPF em roteadores de qualquer fabricante que tenha implementado a gerencia via SNMP.
Linux: Gerenciando redes com Perl e SNMP
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   1. Gerenciando a rede com Perl e SNMP
   2. O que você deve saber sobre MIBs
   3. Legal! E como eu faço para minha rede responder ao protocolo SNMP?
   4. Criando uma solução SNMP personalizada com o Perl
   5. Moral da história...

Novidades do Kernel 2.6.35

Trabalhando com subredes

Outros recursos no OpenOffice: colunas, fundo e bordas

Instalando programas utilizando os fontes no seu Slackware com o checkinstall

Calculando máscara de sub-rede e broadcast

Instalação de MRTG em ambiente Windows

Impressão remota via WEB

Manipulação de sockets em Perl usando o IO::Socket::INET

Enviando notificações do Nagios para o MSN

Comparação entre Tcl e Perl

#1 Comentário enviado por removido em 23/03/2010 - 09:37h
Se tiver dúvidas ou comentários pode me enviar um e-mail: thiago@nerdsland.net
Estamos às ordens!
#2 Comentário enviado por irado em 24/03/2010 - 17:55h
caramba, um artigo de fôlego, muito bem explicado. Parabéns, thiago.
ps: vou tomar coragem e experimentar - risos.
#3 Comentário enviado por removido em 24/03/2010 - 21:15h
Escrever também me deixou um pouco sem folego. Mas o feedback das pessoas tem sido positivo.
Muito obrigado.
#4 Comentário enviado por juniomundo em 25/03/2010 - 00:32h
Muito obrigado Thiago, foi de grande valia. Paz e saúde pra ti.
#5 Comentário enviado por removido em 25/03/2010 - 05:01h
Muito obrigado Júnio. É sempre um prazer ajudar.
#6 Comentário enviado por alexandre035 em 18/06/2011 - 15:35h
Excelente.
#7 Comentário enviado por j3f1nh0 em 21/09/2012 - 14:30h
Pow cara, muito bom! Meu ajudou muito para o meu TCC!

Contribuir com comentário

Entre na sua conta para comentar.