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.
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.
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:
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:
Se observarmos o início de um arquivo MIB vamos ter as seguintes informações:
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.
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
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 Dado | Descriçã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:

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.

Estamos às ordens!