13.07.2015 Views

protótipo de um agente snmp para uma rede local utilizando a ...

protótipo de um agente snmp para uma rede local utilizando a ...

protótipo de um agente snmp para uma rede local utilizando a ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

iiiAGRADECIMENTOSAgra<strong>de</strong>ço a todos os professores do curso <strong>de</strong> Bacharelado em Ciências daComputação da Universida<strong>de</strong> Regional <strong>de</strong> Bl<strong>um</strong>enau pela ajuda prestada ao longo do curso,agra<strong>de</strong>ço principalmente ao professor Francisco A<strong>de</strong>ll Péricas por ter me orientado nestetrabalho final e por ter muita paciência, preocupação e <strong>de</strong>dicação.Agra<strong>de</strong>ço a todos os novos amigos que conheci em Bl<strong>um</strong>enau no <strong>de</strong>correr daFaculda<strong>de</strong>, principalmente ao Bogo e Luiz <strong>de</strong> Óculos amigões mesmo, Marlon, FabioSegundo, Heleno e Raphael.Agra<strong>de</strong>ço a toda galera da sala, que sempre nos momentos mais difíceis sempreajudávamos uns aos outros.Agra<strong>de</strong>ço a várias pessoas que me acompanharam nessa jornada como minhairmã Luana e meu gran<strong>de</strong> amigo Marcelo.Agra<strong>de</strong>ço principalmente aos meus pais Antonio e Gessi por terem me dado essaoportunida<strong>de</strong> tão valiosa e se não fosse a <strong>de</strong>dicação <strong>de</strong>les, não po<strong>de</strong>ria estar redigindo meutrabalho final.Agra<strong>de</strong>ço principalmente a Andreia Krambeck, por ser a pessoa mais especialque já conheci e por ter compartilhado dos momentos mais marcantes da minha vida.DEUS.E finalmente agra<strong>de</strong>ço a pessoa mais importante <strong>de</strong> todas, obrigado por tudo


ivSUMÁRIOLISTA DE FIGURAS...............................................................................................................viiLISTA DE SIGLAS E ABREVIATURAS ........................................................................... viiiRESUMO....................................................................................................................................ixABSTRACT.................................................................................................................................x1. INTRODUÇÃO.....................................................................................................................101.1 OBJETIVOS....................................................................................................................121.2 ORGANIZAÇÃO DO TRABALHO.............................................................................122. PROTOCOLO DE GERENCIAMENTO SNMP ...............................................................142.1 DESCRIÇÃO DE SNMP ...............................................................................................142.2 PONTOS POSITIVOS E NEGATIVOS DO SNMP ...................................................152.3 ELEMENTOS DO SNMP..............................................................................................162.3.1 AGENTES................................................................................................................162.3.2 GERENTES .............................................................................................................172.3.3 MANAGEMENT INFORMATION BASE (MIB) ...................................................182.4 OPERAÇÕES SNMP APLICAVÉIS ÀS VARIÁVEIS DA MIB..............................192.4.1 GET ..........................................................................................................................192.4.2. GETNEXT ..............................................................................................................192.4.3. SET ..........................................................................................................................192.4.4. TRAP.......................................................................................................................202.4.5. RESPONSES ..........................................................................................................202.5 OBJETOS PADRONIZADOS DE GERENCIAMENTO ...........................................212.6 CARACTERÍSTICAS EXTENSÍVEIS ........................................................................212.7 OBJETOS MIB DO SNMP............................................................................................222.7.1 OBJETOS DISCRETOS DA MIB .........................................................................222.7.2 TABELAS DE OBJETOS DA MIB ......................................................................222.7.3 TIPOS DE OBJETOS DE UMA MIB ...................................................................232.7.3.1 Tipo <strong>de</strong> Objetos <strong>de</strong> Texto.................................................................................242.7.3.2 Tipo <strong>de</strong> Objetos Contadores ............................................................................242.7.3.3 Tipo <strong>de</strong> Objetos <strong>de</strong> Medida..............................................................................242.7.3.4 Tipo <strong>de</strong> Objetos Inteiros...................................................................................242.7.3.5 Tipo <strong>de</strong> Objetos En<strong>um</strong>erados...........................................................................242.7.3.6 Tipo <strong>de</strong> Objetos Tempo....................................................................................252.7.3.7 Tipo <strong>de</strong> Objetos Objeto....................................................................................252.7.3.8 Tipo <strong>de</strong> Objetos En<strong>de</strong>reço IP...........................................................................252.7.3.9 Tipo <strong>de</strong> Objetos En<strong>de</strong>reço Físico ....................................................................252.7.3.10 Tipo <strong>de</strong> Objetos String...................................................................................252.7.3.11 Tipo <strong>de</strong> Objetos Tabela..................................................................................262.7.3.12 Tipo <strong>de</strong> Objetos Auxiliares............................................................................262.8 ACESSO A VALORES DA MIB..................................................................................262.9 COMPILANDO OBJETOS DA MIB ...........................................................................27


2.10 O SNMP SOBRE A CAMADA DE TRANSPORTE................................................272.10.1. SERVIÇOS EXIGIDOS PELO SNMP...............................................................292.10.2. FORMATO DA MENSAGEM SNMP...............................................................302.10.2.1. GetRequest PDU ...........................................................................................332.10.2.2. GetNextRequest PDU ...................................................................................352.10.2.3. GetBulkRequest PDU ...................................................................................382.10.2.4. SetRequest PDU............................................................................................402.10.2.5. Trap PDU.......................................................................................................432.10.2.6. InformRequest PDU......................................................................................452.10.2.7. GetResponse PDU.........................................................................................472.11 COMPONENTES ESSENCIAIS DO GERENCIADOR ..........................................472.11.1 FUNÇÕES DE ALARME ....................................................................................472.11.2 MONITORAMENTO DE FUNÇÕES.................................................................472.11.3 FUNÇÕES DE RECEPÇÃO................................................................................472.11.4 CONFIGURANDO FERRAMENTAS DO GERENCIADOR..........................472.11.5 COMPILADOR DE MIB .....................................................................................483. A PLATAFORMA JDMK ...................................................................................................493.1 DIFERENÇAS ENTRE O JDMK E AS DEMAIS PLATAFORMAS.......................493.2 BENEFÍCIOS DO JDMK ..............................................................................................503.3 COMO OPERA...............................................................................................................503.4 FERRAMENTAS AGREGADAS.................................................................................523.4.1 CONCEITOS CHAVES..........................................................................................524. MBEANS...............................................................................................................................544.1 MBEAN PADRÃO.........................................................................................................554.2 MBEAN DINÂMICO ....................................................................................................564.3 SERVIDOR MBEAN.....................................................................................................564.4 PROXY MBEANS .........................................................................................................574.4.1 PROXY MBEANS GENÉRICO (PMG)...............................................................574.5 CONECTORES E ADAPTADORES DE PROTOCOLOS ........................................584.6 MODELO DE NOTIFICAÇÃO DO JMX....................................................................594.7 O MECANISMO PUSH.................................................................................................604.8 O MECANISMO PULL.................................................................................................615. CRIANDO UM AGENTE SNMP .......................................................................................625.1 PROCESSO DE DESENVOLVIMENTO DE UMA MIB..........................................625.1.1 GERADOR DE MIB MBEANS.............................................................................635.2 IMPLEMENTANDO OS RECURSOS DA MIB.........................................................655.2.1 COMPILANDO O MBEANS E AGENTES.........................................................665.3 O ADAPTADOR DE PROTOCOLO SNMP...............................................................665.3.1 EXECUTANDO O ADAPTADOR SNMP ...........................................................675.3.2 CRIANDO A MIB...................................................................................................675.3.3 LIGANDO MBEANS DA MIB .............................................................................685.3.4 TENDO ACESSO AO MBEAN DA MIB ............................................................685.3.5 ADMINISTRANDO O ADAPTADOR SNMP....................................................695.4 EXECUTANDO O AGENTE SNMP...........................................................................705.4.1 ENVIANDO TRAPS...............................................................................................715.4.2 INTERAGINDO COM O GERADOR DE TRAPS..............................................745.5 LISTAS DE CONTROLE DE ACESSO (ACL) ..........................................................76v


5.5.1 FORMATO DO ARQUIVO ACL..........................................................................775.5.2 FORMATO DO GRUPO ACL...............................................................................775.5.3 FORMATO DO GRUPO DE TRAP......................................................................786. CONCLUSÃO.......................................................................................................................797. BIBLIOGRAFIA...................................................................................................................828. ANEXOS ...............................................................................................................................848.1 ANEXO 1 ........................................................................................................................848.2 ANEXO 2 ........................................................................................................................86vi


viiLISTA DE FIGURASFIGURA 1 - PROTOCOLO DE GERENCIAMENTO SNMP ................................................14FIGURA 2 - ELEMENTOS BÁSICOS DO SNMP ..................................................................18FIGURA 3 - PROTOCOLO SNMP SOBRE A CAMADA DE TRANSPORTE...................29FIGURA 4 - FORMATO DA MENSAGEM SNMP ................................................................31FIGURA 5 - ESTRUTURA DO CAMPO VARIABLEBINDINGS........................................33FIGURA 6 - FORMATO DA GETREQUEST PDU ................................................................33FIGURA 7 - PASSAGEM DA GETREQUEST PDU...............................................................34FIGURA 8 - FORMATO DA GETNEXTREQUEST PDU. ....................................................35FIGURA 9 - PASSAGEM DA GETNEXTREQUEST PDU....................................................36FIGURA 10 - FORMATO DA GETBULKREQUEST PDU...................................................38FIGURA 11- PASSAGEM DA GETBULKREQUEST PDU ..................................................40FIGURA 12 - ESTRUTURA DA SETREQUEST PDU...........................................................41FIGURA 13 - PASSAGEM DA SETREQUEST PDU .............................................................42FIGURA 14 - ESTRUTURA DA TRAP PDU - SNMP............................................................43FIGURA 15 - PASSAGEM DA TRAP PDU.............................................................................45FIGURA 16 - ESTRUTURA DA TRAP PDU - SNMPV2. .....................................................45FIGURA 17 - ESTRUTURA DA INFORMREQUEST PDU ..................................................46FIGURA 18 - PASSAGEM DA INFORMREQUEST PDU ....................................................46FIGURA 19 – CONCEITOS CHAVES PARA O JDMK.........................................................53FIGURA 20 - MECANISMO DE NOTIFICAÇÃO REMOTA...............................................60FIGURA 21 – PROCESSO DE DESENVOLVIMENTO DE UMA MIB..............................63FIGURA 22 – EXECUTANDO O AGENTE SNMP................................................................70FIGURA 23 – ACESSANDO O AGENTE VIA PROTOCOLO HTML................................70FIGURA 24 – INTERAGINDO COM O AGENTE SNMP.....................................................71FIGURA 25 – INTERAGINDO COM O GERADOR DE TRAPS .........................................74FIGURA 26 – INTERAGINDO COM O GERADOR DE TRAPS II......................................75FIGURA 27 – RESULTADO DO ENVIO DE TRAPS NO AGENTE SNMP.......................76


viiiLISTA DE SIGLAS E ABREVIATURASACL Access Control ListAPI Application Program InterfaceASCII American Standard Co<strong>de</strong> for Information InterchangeASN.1 Abstract Syntax Notation OneCMIP Common Management Information ProtocolEGP Exterior Gateway ProtocolFDDI Fiber Distributed Data InterfaceFTP File Transfer ProtocolIEEE Institute of Electrical and Electronics EngineersIP Internet ProtocolISO International Organization for StandardizationHTML Hipertext Markup LanguageHTTP Hipertext Transfer ProtocolJDMK Java Dynamic Management KitJMX Java Management ExtensionsLAN Local Area NetworkMIB Management Information BaseNMS Network Management StationOID Object I<strong>de</strong>ntifierPC Personal ComputerPDU Protocol Description UnitRFC Request for CommentRMI Remote Method InvocationSMTP Simple Mail Transfer ProtocolSNMP Simple Network Management ProtocolTCP Transmission Control ProtocolUDP User Datagram ProtocolWAN Wi<strong>de</strong> Area Network


ixRESUMOEste trabalho apresenta <strong>um</strong> estudo na aplicação do protocolo <strong>de</strong> gerenciamentoSimple Network Management Protocol (SNMP) através da especificação e implementação<strong>de</strong> <strong>um</strong>a aplicação <strong>de</strong> <strong>um</strong> <strong>agente</strong> SNMP <strong>para</strong> dispositivos <strong>de</strong> <strong>um</strong>a re<strong>de</strong> Local Área Network(LAN), utilizado na implementação a linguagem Java e a plataforma <strong>de</strong> <strong>de</strong>senvolvimentoJava Dynamic Management Kit (JDMK).


xABSTRACTThis paper presents a study in the application of the management protocolSimple Network Management Protocol (SNMP) through of the specification andimplementation of an application of an agent SNMP for <strong>de</strong>vices of a Local Area Network(LAN), used in the implementation the language Java and the <strong>de</strong>velopment platform JavaDynamic Management Kit (JDMK).


101. INTRODUÇÃOAtravés dos avanços das tecnologias <strong>de</strong> interconectivida<strong>de</strong> e dos benefíciosproporcionados pelas Re<strong>de</strong>s <strong>de</strong> Computadores, cada vez mais computadores sãointerconectados nas organizações. Paralelamente, a diminuição dos custos dosequipamentos permite adquirir e agregar à re<strong>de</strong> cada vez mais equipamentos, <strong>de</strong> tiposdiversos, tornando essas re<strong>de</strong>s cada vez maiores e mais complexas. Com isso, as re<strong>de</strong>scomeçaram a ser interconectadas muito rapidamente; re<strong>de</strong>s locais conectadas a re<strong>de</strong>sregionais, as quais, por sua vez, ligadas a backbones nacionais.Hoje essas re<strong>de</strong>s são extremamente importantes <strong>para</strong> o dia-a-dia <strong>de</strong> muitasempresas em todo o mundo, porque, junto com sua utilização, vem a eficácia e acompetitivida<strong>de</strong>. Essa importância vem crescendo <strong>de</strong> tal forma que as empresas têm setornados altamente <strong>de</strong>pen<strong>de</strong>ntes <strong>de</strong>stas re<strong>de</strong>s, sentindo imediatamente o impacto quando osseus recursos ficam indisponíveis ([COH2000]).Este novo ambiente originou alguns problemas administrativos. As tarefas <strong>de</strong>configuração, i<strong>de</strong>ntificação <strong>de</strong> falhas e controle <strong>de</strong> dispositivos e recursos da re<strong>de</strong> passarama cons<strong>um</strong>ir tempo e recursos das organizações.Cientes <strong>de</strong>sse problema, a solução então passou a ser buscada na ativida<strong>de</strong> <strong>de</strong>Gerenciamento <strong>de</strong> Re<strong>de</strong>. Esta ativida<strong>de</strong> passou a evoluir <strong>de</strong> forma rápida e concisa, sendohoje <strong>um</strong>a das especialida<strong>de</strong>s da área <strong>de</strong> Re<strong>de</strong>s <strong>de</strong> Computadores que mais cresce. Apesar<strong>de</strong>sses avanços, ainda hoje, é difícil conceituar esta ativida<strong>de</strong>.Segundo [COH2000], ao longo da sua evolução muitas <strong>de</strong>finições forampropostas <strong>para</strong> a Gerência <strong>de</strong> Re<strong>de</strong>s. Res<strong>um</strong>e-se a seguir alg<strong>um</strong>as <strong>de</strong>ssas <strong>de</strong>finições:a) consiste no controle e administração <strong>de</strong> forma racional dos recursos <strong>de</strong>hardware e software em <strong>um</strong> ambiente distribuído, buscando melhor <strong>de</strong>sempenho eeficiência do sistema;b) consiste no controle <strong>de</strong> <strong>um</strong>a re<strong>de</strong> <strong>de</strong> computadores e seus serviços;


11c) tem por objetivo maximizar o controle organizacional das re<strong>de</strong>s <strong>de</strong>computadores, <strong>de</strong> maneira mais eficiente e confiável, ou seja, planejar, supervisionar,monitorar e controlar qualquer ativida<strong>de</strong> da re<strong>de</strong>;d) consiste na <strong>de</strong>tecção e correção <strong>de</strong> falhas, em <strong>um</strong> tempo mínimo, e noestabelecimento <strong>de</strong> procedimentos <strong>para</strong> a previsão <strong>de</strong> problemas futuros.É clara a necessida<strong>de</strong> <strong>de</strong> prover monitoramento e controle sobre todos oscomponentes da re<strong>de</strong>, <strong>de</strong> forma a garantir que estes estejam sempre em funcionamento eque os problemas sejam i<strong>de</strong>ntificados, isolados e solucionados o mais rápido possível.Entretanto, esta não é <strong>um</strong>a tarefa fácil. As re<strong>de</strong>s das empresas têm ass<strong>um</strong>ido gran<strong>de</strong>sproporções, com <strong>um</strong> gran<strong>de</strong> número <strong>de</strong> computadores, além da constante inclusão <strong>de</strong> novoscomponentes, oferecendo integração dados/voz, multiplexadores e roteadores, entre outros,o que tem adicionado mais complexida<strong>de</strong> a esse ambiente.Para aten<strong>de</strong>r a esta necessida<strong>de</strong> <strong>de</strong> gerenciamento foram <strong>de</strong>senvolvidosprotocolos <strong>de</strong> gerenciamento. A principal preocupação <strong>de</strong> <strong>um</strong> protocolo <strong>de</strong> gerenciamento épermitir aos gerentes <strong>de</strong> re<strong>de</strong> realizar tarefas, tais como: obter dados sobre <strong>de</strong>sempenho etráfego da re<strong>de</strong> em tempo real, diagnosticar problemas <strong>de</strong> comunicação e reconfigurar are<strong>de</strong> aten<strong>de</strong>ndo a mudanças nas necessida<strong>de</strong>s dos usuários e do ambiente ([CHI1999]).Porém, vários obstáculos teriam que ser superados, entre eles a heterogeneida<strong>de</strong> dosequipamentos <strong>de</strong> re<strong>de</strong> (computadores, roteadores e dispositivos <strong>de</strong> meio), dos protocolos <strong>de</strong>comunicação e das tecnologias <strong>de</strong> re<strong>de</strong>. Adicionalmente, era necessário que essegerenciamento fosse integrado, pois <strong>um</strong>a solução genérica e integrada auxiliaria os usuáriosa evitar os altos custos <strong>de</strong> <strong>um</strong>a solução específica, além <strong>de</strong> facilitar a manutenção, omonitoramento, o crescimento e a evolução da re<strong>de</strong>. Sem <strong>um</strong> gerenciamento integrado, are<strong>de</strong> po<strong>de</strong>ria <strong>de</strong>gradar até se tornar completamente ineficiente.Segundo [STA1996], as informações <strong>de</strong> gerenciamento permitem, <strong>de</strong>ntre outrastarefas, produzir registros <strong>de</strong> auditoria <strong>para</strong> todas as conexões, <strong>de</strong>sconexões, falhas e outroseventos significativos na re<strong>de</strong>. Esses registros, por sua vez, permitem <strong>de</strong>terminar futurasnecessida<strong>de</strong>s <strong>de</strong> adicionar equipamentos, i<strong>de</strong>ntificar e isolar erros comuns <strong>de</strong> <strong>um</strong> cliente,além <strong>de</strong> estudar outras tendências <strong>de</strong> uso. Deve-se <strong>de</strong>stacar ainda, que estas informações


12<strong>de</strong>vem possibilitar <strong>um</strong>a atuação preventiva, e não meramente reativa, com relação aosproblemas.Ciente <strong>de</strong>stes requisitos das empresas, a ISO (International Organization forStandardization) vem <strong>de</strong>senvolvendo padrões <strong>para</strong> o gerenciamento <strong>de</strong> re<strong>de</strong>s OSI (OpenSystems Interconnection), tendo como protocolo <strong>de</strong> gerência o CMIP (CommonManagement Information Protocol). Por outro lado, existe o IEEE (Institute of Electricaland Electronics Engineers) com <strong>um</strong> conjunto <strong>de</strong> padrões <strong>para</strong> o gerenciamento <strong>de</strong> re<strong>de</strong>sTCP/IP (Transmission Control Protocol / Internet Protocol), chamado SNMP (SimpleNetwork Management Protocol). Atualmente, quase todas as plataformas <strong>de</strong> gerenciamento<strong>de</strong> re<strong>de</strong>s Internet comercialmente disponíveis implementam o protocolo SNMP <strong>de</strong>vido àsua simplicida<strong>de</strong> <strong>de</strong> implementação em relação ao CMIP.1.1 OBJETIVOSO trabalho <strong>de</strong>senvolvido tem como objetivo estudar e aplicar o protocolo <strong>de</strong>gerenciamento SNMP através da especificação e implementação <strong>de</strong> <strong>um</strong>a aplicação <strong>agente</strong>SNMP em Java, <strong>para</strong> o gerenciamento <strong>de</strong> dispositivos <strong>de</strong> <strong>um</strong>a re<strong>de</strong> LAN, <strong>utilizando</strong>-se aplataforma <strong>de</strong> <strong>de</strong>senvolvimento <strong>de</strong> aplicações <strong>de</strong> gerência JDMK da SUN.1.2 ORGANIZAÇÃO DO TRABALHOEste trabalho está organizado em capítulos, conforme é apresentado a seguir.O capítulo 1 apresenta a estrutura geral do trabalho: introdução, os objetivos, a<strong>local</strong>ização dos assuntos abordados e a organização do trabalho.O capítulo 2 trata especificamente do gerenciamento <strong>de</strong> re<strong>de</strong>s: conceitos,características, mo<strong>de</strong>los e protocolos <strong>de</strong> gerenciamento <strong>de</strong> re<strong>de</strong>s.O capítulo 3 refere-se à plataforma JDMK, abordando sua funcionalida<strong>de</strong>, seusbenefícios e as ferramentas utilizadas.


13O capítulo 4 aborda os MBeans, apresentando as suas funções e qual a suanecessida<strong>de</strong> no gerenciamento da re<strong>de</strong>.O capítulo 5 é voltado ao <strong>de</strong>senvolvimento do protótipo, on<strong>de</strong> se apresenta aespecificação e implementação do mesmo.No capítulo 6 é <strong>de</strong>dicado às conclusões e sugestões <strong>de</strong> continuida<strong>de</strong> do trabalho.E por fim, o capítulo 7 apresenta as bibliografias utilizadas <strong>para</strong> todo o<strong>de</strong>senvolvimento <strong>de</strong>ste trabalho.


142. PROTOCOLO DE GERENCIAMENTO SNMPO SNMP foi <strong>de</strong>senvolvido nos anos 80 como resposta <strong>para</strong> os problemas <strong>de</strong>gerenciamento em ambientes TCP/IP, envolvendo re<strong>de</strong>s heterogêneas. Inicialmente foiconcebido <strong>para</strong> ser apenas <strong>um</strong>a solução provisória até o <strong>de</strong>senvolvimento <strong>de</strong> <strong>um</strong> protocolo<strong>de</strong> gerenciamento mais completo, o CMIP (Common Management Information Protocol).Neste contexto, sem <strong>um</strong> protocolo melhor disponível, o SNMP passou a ser o protocolomais utilizado ([ODA1998]).O Simple Network Management Protocol (SNMP) é <strong>um</strong> protocolo da camada <strong>de</strong>aplicação, como mostrado na Figura 1, <strong>de</strong>senvolvido <strong>para</strong> facilitar a troca <strong>de</strong> informações<strong>de</strong> gerenciamento entre dispositivos <strong>de</strong> re<strong>de</strong>. Estas informações transportadas pelo SNMP(como pacotes por segundo e taxa <strong>de</strong> erro na re<strong>de</strong>), permitem aos administradores da re<strong>de</strong>gerenciar o <strong>de</strong>sempenho da re<strong>de</strong> <strong>de</strong> forma remota, encontrando e solucionando osproblemas e planejar o crescimento da re<strong>de</strong>.FIGURA 1 - PROTOCOLO DE GERENCIAMENTO SNMPFonte: [COH2000]2.1 DESCRIÇÃO DE SNMPSegundo [ODA1998], o SNMP <strong>de</strong>fine <strong>um</strong>a relação cliente/servidor. O programacliente (chamado <strong>de</strong> gerenciador <strong>de</strong> re<strong>de</strong>) faz conexões virtuais a <strong>um</strong> programa servidor


15(chamado <strong>de</strong> <strong>agente</strong> SNMP) que executa em <strong>um</strong> dispositivo <strong>de</strong> re<strong>de</strong> remoto e disponibilizainformação <strong>para</strong> o gerente relativo ao estado do dispositivo. O banco <strong>de</strong> dados, que mo<strong>de</strong>lao <strong>agente</strong> SNMP é <strong>de</strong>nominado Management Information Base (MIB) e sua função padrão écontrolar valores gerenciados no dispositivo. O SNMP permite a extensão <strong>de</strong>stes valorespadrões adicionalmente com valores específicos <strong>para</strong> <strong>um</strong> <strong>agente</strong> particular pelo uso <strong>de</strong> MIBprivados.Diretivas emitidas pelo gerenciador da re<strong>de</strong> a <strong>um</strong> <strong>agente</strong> SNMP consistem nosi<strong>de</strong>ntificadores <strong>de</strong> variáveis <strong>de</strong> SNMP (chamados i<strong>de</strong>ntificadores da MIB ou variáveis daMIB) junto com instruções <strong>para</strong> adquirir o valor do i<strong>de</strong>ntificador ou fixar o i<strong>de</strong>ntificador<strong>para</strong> <strong>um</strong> novo valor.Pelo uso <strong>de</strong> variáveis <strong>de</strong> MIB privadas, <strong>agente</strong>s SNMP po<strong>de</strong>m serincrementadas <strong>para</strong> gerenciar dispositivos específicos, como bridges, gateways eroteadores. As <strong>de</strong>finições <strong>de</strong> variáveis <strong>de</strong> <strong>um</strong>a MIB po<strong>de</strong>m suportar <strong>um</strong> <strong>agente</strong> emparticular. As MIB são escritas n<strong>um</strong> formato padronizado chamado <strong>de</strong> Abstract SyntaxNotation One (ASN.1) ([CHI1999]).2.2 PONTOS POSITIVOS E NEGATIVOS DO SNMPO SNMP tem vários pontos positivos. Um <strong>de</strong>les é sua popularida<strong>de</strong> <strong>para</strong> agerência <strong>de</strong> re<strong>de</strong>s TCP/IP. Agentes SNMP estão disponíveis <strong>para</strong> vários dispositivos <strong>de</strong>re<strong>de</strong>, <strong>de</strong>s<strong>de</strong> computadores até bridges, mo<strong>de</strong>ms ou impressoras ([STA1996]).Adicionalmente, o SNMP é <strong>um</strong> protocolo <strong>de</strong> gerenciamento flexível eextensível. Po<strong>de</strong>-se esten<strong>de</strong>r os <strong>agente</strong>s SNMP <strong>para</strong> cobrir dados específicos <strong>de</strong>dispositivos, pelo uso <strong>de</strong> arquivos ASN.1. O SNMP po<strong>de</strong> ass<strong>um</strong>ir n<strong>um</strong>erosos trabalhosespecíficos <strong>para</strong> classes <strong>de</strong> dispositivos fornecendo <strong>um</strong> mecanismo padrão <strong>de</strong> controle <strong>de</strong>re<strong>de</strong> e monitoramento.Segundo [ODA1996], po<strong>de</strong>m ser i<strong>de</strong>ntificados alguns pontos fracos do SNMP.Apesar <strong>de</strong> seu nome, (i.e. “Simple” Network Management Protocol), o SNMP é <strong>um</strong>protocolo relativamente complexo <strong>para</strong> implementar. Também, o SNMP não é <strong>um</strong>protocolo muito eficiente. Os modos nos quais são i<strong>de</strong>ntificadas as variáveis SNMP (como


16strings <strong>de</strong> byte on<strong>de</strong> cada byte correspon<strong>de</strong> a <strong>um</strong> nodo particular no banco <strong>de</strong> dados daMIB) conduz <strong>de</strong>snecessariamente a gran<strong>de</strong>s pacotes <strong>de</strong> dados PDU (Protocol DescriptionUnit), que consomem partes significativas <strong>de</strong> cada mensagem <strong>de</strong> SNMP, sobrecarregando are<strong>de</strong> <strong>de</strong> transmissão <strong>de</strong> dados.As citações acima não po<strong>de</strong>m ser usadas <strong>para</strong> diminuir os pontos positivosmencionados no SNMP. Enquanto codificações complicadas frustram programadores, autilização por parte dos usuários finais não <strong>de</strong>pen<strong>de</strong>m da complexida<strong>de</strong> dos algoritmos quedisponibilizam os dados a eles.2.3 ELEMENTOS DO SNMPO SNMP possui <strong>um</strong>a característica cliente/servidor, on<strong>de</strong> o cliente seria ogerenciador da re<strong>de</strong> e o servidor o <strong>agente</strong> SNMP e a base que mo<strong>de</strong>la este <strong>agente</strong><strong>de</strong>nomina-se MIB.2.3.1 AGENTESNo mo<strong>de</strong>lo <strong>de</strong> gerenciamento SNMP, hosts, bridges, roteadores, hubs, etc,<strong>de</strong>vem ser equipados com <strong>agente</strong>s SNMP <strong>para</strong> que possam ser gerenciados pela estação <strong>de</strong>gerenciamento (NMS) através do gerente SNMP. O <strong>agente</strong> respon<strong>de</strong> a requisições daestação <strong>de</strong> gerenciamento, que po<strong>de</strong> ser o envio <strong>de</strong> informações <strong>de</strong> gerência ou ações sobreas variáveis do dispositivo on<strong>de</strong> está.O funcionamento <strong>de</strong>sta estrutura só é possível graças ao acesso direto à MIB(Management Information Base) que o <strong>agente</strong> possui, pois todas as informações <strong>de</strong>gerência encontram-se lá ([CHI1999]). Ao receber <strong>um</strong>a mensagem SNMP do gerente, o<strong>agente</strong> i<strong>de</strong>ntifica que operação está sendo requisitada e qual(is) a(s) variável(is)relacionada, e a partir daí executa a operação sobre a MIB; em seguida, monta <strong>um</strong>a novamensagem <strong>de</strong> resposta, que será enviada ao gerente.À primeira vista, a comunicação do <strong>agente</strong> com o gerente po<strong>de</strong> parecer injusta,<strong>um</strong>a vez que o <strong>agente</strong> apenas respon<strong>de</strong> ao que lhe é questionado. Mas há momentos em queo <strong>agente</strong> po<strong>de</strong> "falar" espontaneamente com o gerente sem que antes seja questionado. Issoocorre quando o <strong>agente</strong> <strong>de</strong>tecta, a partir da análise do contexto da MIB, alg<strong>um</strong>a situação


17inesperada. Neste momento, o <strong>agente</strong> gera <strong>um</strong>a mensagem especial, o Trap, e a envia aogerente, relatando sobre a situação.Para o tratamento <strong>de</strong>stas exceções e o envio <strong>de</strong> Trap, é concedido ao <strong>agente</strong> <strong>um</strong>certo po<strong>de</strong>r <strong>de</strong> <strong>de</strong>cisão, cabendo a ele, a partir da análise do contexto da MIB, <strong>de</strong>cidir se éou não necessário enviar o Trap ao gerente. Esse po<strong>de</strong>r <strong>de</strong> <strong>de</strong>cisão é concedido ao <strong>agente</strong><strong>para</strong> que em certas situações, como quando da inicialização do sistema, Trap <strong>de</strong>snecessáriosnão sejam trafegados pela re<strong>de</strong>, o que, em se tratando <strong>de</strong> <strong>de</strong>zenas <strong>de</strong> <strong>agente</strong>s, po<strong>de</strong>riainterferir no <strong>de</strong>sempenho global da re<strong>de</strong>.Cabe ao <strong>agente</strong> <strong>um</strong> papel fundamental em todo o processo <strong>de</strong> gerenciamento dare<strong>de</strong>, acessando e disponibilizando informações <strong>de</strong> gerência contidas na MIB, além <strong>de</strong>indicar situações inesperadas <strong>de</strong> funcionamento do dispositivo que estiver gerenciandoatravés do envio <strong>de</strong> Trap ao gerente.2.3.2 GERENTESA interface entre as aplicações <strong>de</strong> gerência correntes no NMS e os <strong>agente</strong>sespalhados pelos dispositivos da re<strong>de</strong> é o gerente. Cabe ao gerente enviar comandos aos<strong>agente</strong>s, solicitando informações sobre variáveis <strong>de</strong> <strong>um</strong> objeto gerenciado ou modificando ovalor <strong>de</strong> <strong>de</strong>terminada variável.Os gerentes então processam estas informações colhidas pelos <strong>agente</strong>s e asrepassam à aplicação que as requisitou. A comunicação entre o gerente e as aplicações épossível através da utilização das API do gerente SNMP pelo sistema.A API (Application Program Interface) é <strong>um</strong> conjunto <strong>de</strong> funções que fazem ointermédio na execução <strong>de</strong> comandos entre <strong>um</strong> programa e outro, <strong>de</strong> forma a simplificar a<strong>um</strong> programa o acesso a funções <strong>de</strong> outro programa e que, no caso do SNMP, fazem ointermédio das execuções entre <strong>um</strong>a aplicação <strong>de</strong> gerência e o gerente SNMP [TAN1996].Quando <strong>um</strong>a solicitação da aplicação <strong>de</strong> gerência chega ao gerente, através daAPI, o gerente mapeia esta solicitação <strong>para</strong> <strong>um</strong> ou mais comandos SNMP que, através datroca <strong>de</strong> mensagens apropriadas, chegarão aos <strong>agente</strong>s correspon<strong>de</strong>ntes. Deve-se ressaltarque este comando SNMP montado pelo gerente po<strong>de</strong> ser enviado a <strong>um</strong> outro gerente, que


18po<strong>de</strong> ou não repassá-lo a <strong>um</strong> <strong>agente</strong>. Só que a comunicação gerente-gerente só é possível naversão estendida do SNMP, o SNMPv2, e não faz parte do SNMP padrão.Cabe também ao gerente encaminhar à aplicação <strong>de</strong> gerência os Trap queporventura sejam enviados pelos <strong>agente</strong>s. Assim, o software <strong>de</strong> gerência terá conhecimentoda presença <strong>de</strong> <strong>um</strong> novo equipamento na re<strong>de</strong> ou do mal funcionamento <strong>de</strong> alg<strong>um</strong> dosdispositivos da re<strong>de</strong>.Quando da inicialização do software <strong>de</strong> gerência, nada se sabe sobre aconfiguração ou funcionamento da re<strong>de</strong>. Essas informações vão sendo conhecidas através<strong>de</strong> Trap que são enviados pelos <strong>agente</strong>s; a partir daí o gerente realiza polling [TAN1996] afim <strong>de</strong> manter a comunicação com os <strong>agente</strong>s, possibilitando ao software <strong>de</strong> gerênciamapear, monitorar e controlar a re<strong>de</strong>.2.3.3 MANAGEMENT INFORMATION BASE (MIB)Segundo [COH2000], no mo<strong>de</strong>lo SNMP, os recursos <strong>de</strong> <strong>um</strong>a re<strong>de</strong> sãorepresentados como objetos. Cada objeto é, essencialmente, <strong>um</strong>a variável que representa<strong>um</strong> aspecto do dispositivo gerenciado. Todos os objetos (variáveis) são armazenados naManagement Information Base (MIB).FIGURA 2 - ELEMENTOS BÁSICOS DO SNMPAgenteMIBEstaçãoGerenteAgenteMIBRe<strong>de</strong>TCP/IPAgenteMIBEstação <strong>de</strong>GerenciamentoNMSMo<strong>de</strong>mFonte: [COH2000]


192.4 OPERAÇÕES SNMP APLICAVÉIS ÀS VARIÁVEIS DA MIBNo gerenciamento SNMP existem várias operações <strong>para</strong> a comunicação entre osgerentes e <strong>agente</strong>s SNMP <strong>para</strong> obter informações dos dispositivos gerenciados.2.4.1 GETO gerente SNMP envia o comando Get a <strong>um</strong> <strong>de</strong>terminado <strong>agente</strong> toda vez quenecessita recuperar <strong>um</strong>a informação <strong>de</strong> gerenciamento específica do objeto gerenciado pelo<strong>agente</strong>. Estas informações encontram-se na forma básica <strong>de</strong> variáveis, que por sua vez estãona MIB do elemento <strong>de</strong> re<strong>de</strong> gerenciado.2.4.2. GETNEXTO comando GetNext assemelha-se ao comando Get, no entanto, enquanto ocomando Get solicita ao <strong>agente</strong> a leitura <strong>de</strong> <strong>de</strong>terminada instância <strong>de</strong> <strong>um</strong>a variável, aoreceber <strong>um</strong> comando GetNext, o <strong>agente</strong> <strong>de</strong>ve ler a próxima instância disponível, na or<strong>de</strong>mespecificada pela MIB, da(s) variável(is) associada.Esta operação é especialmente na recuperação <strong>de</strong> <strong>um</strong>a tabela <strong>de</strong> instâncias daMIB cujo tamanho seja <strong>de</strong>sconhecido. Para isto, é inicialmente especificado no comandoGetNext o nome da tabela, o que retornará como resposta o primeiro item (neste caso, <strong>um</strong>ainstância <strong>de</strong> variável) da tabela. Com o nome do primeiro item da tabela, o gerente po<strong>de</strong>enviar <strong>um</strong> outro GetNext, <strong>de</strong>sta vez passando a resposta do GetNext anterior comoparâmetro, a fim <strong>de</strong> recuperar o próximo item da tabela, e assim sucessivamente atérecuperar todas as instâncias da variável na tabela. Para este caso, se o comando Get fosseutilizado ele falharia, pois o nome da tabela não correspon<strong>de</strong> a <strong>um</strong>a instância individual davariável.2.4.3. SETA operação Set requisita a <strong>um</strong> <strong>de</strong>terminado <strong>agente</strong> a atribuição/alteração dovalor <strong>de</strong> <strong>de</strong>terminada(s) variável(is) <strong>de</strong> <strong>um</strong>a MIB. Alguns <strong>de</strong>senvolvedores, por exemplo,acreditam que este comando não <strong>de</strong>ve retornar <strong>um</strong> Response. Já outros acham que a


20operação Set <strong>de</strong>ve retornar alg<strong>um</strong>a indicação <strong>de</strong> que a operação foi efetuada. Porém o maiscorreto seria que após cada operação Set sobre <strong>um</strong>a variável, <strong>um</strong>a operação Get fosseefetuada sobre a mesma variável a fim <strong>de</strong> assegurar que a operação Set foi efetuada.2.4.4. TRAPA operação Trap difere <strong>de</strong> todas as outras. Ela é utilizada por <strong>um</strong> <strong>agente</strong> SNMP<strong>para</strong> notificar <strong>de</strong> forma assíncrona a <strong>um</strong> gerente alg<strong>um</strong> evento extraordinário que tenhaocorrido no objeto gerenciado.Diversos questionamentos são feitos quanto a esta operação. Talvez o maior<strong>de</strong>les seja: quais eventos <strong>de</strong>vem realmente ser notificados ao gerente? Embora todosconcor<strong>de</strong>m que o gerente <strong>de</strong>va ser informado <strong>de</strong> alguns eventos significativos, muitosfornecedores <strong>de</strong> produtos que implementam o SNMP trazem Trap’s específicos, muitos<strong>de</strong>les <strong>de</strong>snecessários ([STA1996]).Outro importante questionamento é: Já que a operação Trap não gera <strong>um</strong>Response, como <strong>um</strong> <strong>agente</strong> po<strong>de</strong> ter certeza <strong>de</strong> que o gerente o recebeu? Esta preocupaçãose per<strong>de</strong> quando a re<strong>de</strong> está em perfeito funcionamento. Mas e se a máquina estiver, porexemplo, per<strong>de</strong>ndo pacotes? Isso não é fácil <strong>de</strong> solucionar. Uma possibilida<strong>de</strong> seria o<strong>agente</strong> gerar tantos Trap’s quanto necessário até que o gerente seja informado do evento.Essa solução, no entanto, a<strong>um</strong>entaria o tráfego na re<strong>de</strong>, afetando o seu <strong>de</strong>sempenho (que jáestá comprometido).2.4.5. RESPONSESComo já <strong>de</strong>scrito, sempre que <strong>um</strong> <strong>agente</strong> recebe <strong>um</strong> comando Get, GetNext ouSet ele tenta executar a operação associada e, conseguindo ou não, constrói <strong>um</strong>a outramensagem que é enviada ao emissor da requisição. Esta mensagem é a GetResponse. Dasoperações SNMP, apenas o Trap não gera <strong>um</strong> Response.


212.5 OBJETOS PADRONIZADOS DE GERENCIAMENTOO conjunto <strong>de</strong> objetos que constituem o mo<strong>de</strong>lo <strong>de</strong> informação utilizado por <strong>um</strong>sistema <strong>de</strong> gerenciamento através do protocolo SNMP é <strong>de</strong>nominado <strong>de</strong> “ManagementInformation Base” (MIB). Este termo é freqüentemente utilizado <strong>para</strong> <strong>de</strong>screver qualquerobjeto SNMP ou <strong>um</strong>a parte <strong>de</strong>le. No sentido exato, “MIB” simplesmente é <strong>um</strong>a abstração,como “Banco <strong>de</strong> dados”, que po<strong>de</strong> ser aplicada <strong>para</strong> analisar todos os dados <strong>de</strong> <strong>um</strong>a re<strong>de</strong> ou<strong>de</strong> <strong>um</strong>a parte <strong>de</strong>la. Esta nomenclatura casual confun<strong>de</strong> freqüentemente aos novos usuários([SOA1995]).As várias variáveis SNMP da MIB padrão são <strong>de</strong>finidas na RFC-1213, (<strong>um</strong> dasespecificações administrativas <strong>para</strong> o SNMP) ([COH2000]). A MIB padrão inclui váriosobjetos <strong>para</strong> medir e monitorar a ativida<strong>de</strong> <strong>de</strong> Internet Protocol (IP), a ativida<strong>de</strong> <strong>de</strong> TCP, aativida<strong>de</strong> <strong>de</strong> User Datagram Protocol (UDP), conexões <strong>de</strong> TCP, interfaces e a <strong>de</strong>scrição dosistema geral. Ambos valores são associados a <strong>um</strong> nome oficial, como “sysUpTime”, e <strong>um</strong>valor n<strong>um</strong>érico <strong>de</strong> i<strong>de</strong>ntificação como “1.3.6.1.2.1.1.3.0”, que é o i<strong>de</strong>ntificador <strong>de</strong> objeto<strong>para</strong> “sysUpTime”.2.6 CARACTERÍSTICAS EXTENSÍVEISO Java Management Extensions (JMX), permite ao usuário esten<strong>de</strong>r <strong>de</strong>finições<strong>de</strong> novas MIB <strong>para</strong> o sistema. Estas <strong>de</strong>finições normalmente são fornecidas por fabricantes<strong>de</strong> equipamento <strong>de</strong> re<strong>de</strong>, especialmente formatada usando a sintaxe ASN.1. (ASN.1significa “Abstract Syntax Notation One”, que é <strong>um</strong>a linguagem <strong>de</strong> <strong>de</strong>claração abstrataadotada pelo SNMP).A MIB <strong>de</strong> <strong>um</strong> dispositivo SNMP é normalmente fixa. Ela é <strong>de</strong>senvolvida pelosfabricantes <strong>de</strong> equipamentos <strong>de</strong> re<strong>de</strong> (i.e. fabricante <strong>de</strong> roteadores, <strong>de</strong> hardware <strong>de</strong>computador, etc.) e não po<strong>de</strong> ser estendida ou modificada. Esta extensão <strong>de</strong> SNMP serefere estritamente ao software gerenciador SNMP ([SUN1999]).


222.7 OBJETOS MIB DO SNMPPara usar o SNMP efetivamente, usuários precisam estar familiarizados com aBase <strong>de</strong> Informação do Gerenciador SNMP que <strong>de</strong>fine todos os valores <strong>de</strong> leitura ealteração que o SNMP é capaz. Para começar <strong>um</strong> administrador tem que conhecer a MIBdo SNMP do equipamento ou da re<strong>de</strong> que estiver gerenciando.A MIB é organizada em <strong>um</strong>a estrutura <strong>de</strong> árvore, semelhante a <strong>um</strong>a estrutura <strong>de</strong>diretório <strong>de</strong> arquivos em disco. O topo do nível SNMP começa com o diretório que contémquatro níveis principais: O nível “mgmt”, que normalmente contém os objetos padrões doSNMP utilizados por todos os dispositivos da re<strong>de</strong>; o nível “private” que contém os objetosespecializados <strong>de</strong>finidos pelos fabricantes <strong>de</strong> equipamentos <strong>de</strong> re<strong>de</strong>; os níveis “exten<strong>de</strong>d” e“directory” que são normalmente <strong>de</strong>stituídos <strong>de</strong> quaisquer dados ou objetos significantes([SUN1999]).A estrutura da “árvore” <strong>de</strong>scrita acima é <strong>um</strong>a parte integrante do padrão SNMP,porém a parte mais significativa da árvore são as “folhas”, objetos da árvore que fornecemos dados <strong>de</strong> gerência atuais do dispositivo.2.7.1 OBJETOS DISCRETOS DA MIBObjetos discretos do SNMP contêm <strong>um</strong>a parte precisa <strong>de</strong> dados do gerenciador.Estes objetos são freqüentemente distintos da tabela <strong>de</strong> itens, somando <strong>um</strong>a extensão “.0”(ponto-zero) <strong>para</strong> os nomes. (Se a extensão “.0” é omitida <strong>de</strong> <strong>um</strong> objeto SNMP, este sempreserá implícito) ([SUN1999]).Muitos objetos <strong>de</strong> SNMP são discretos, o operador necessita apenas saber onome do objeto da MIB e nenh<strong>um</strong>a outra informação. Objetos discretos representamfreqüentemente valores s<strong>um</strong>ários <strong>de</strong> <strong>um</strong> dispositivo, particularmente útil por apresentarinformação da re<strong>de</strong> com a finalida<strong>de</strong> <strong>de</strong> com<strong>para</strong>r <strong>de</strong>sempenho <strong>de</strong> dispositivos <strong>de</strong> re<strong>de</strong>. Se aextensão (número <strong>de</strong> instância) do objeto não é especificada, po<strong>de</strong> ser ass<strong>um</strong>ido como “.0”(ponto-zero).2.7.2 TABELAS DE OBJETOS DA MIB


23Tabela <strong>de</strong> objetos contêm múltiplas partes <strong>de</strong> dados do gerenciador. Estesobjetos são distintos dos itens “Discrete” adicionando <strong>um</strong>a extensão “.” (ponto) <strong>para</strong> osnomes <strong>de</strong>les que distinguem o valor particular que é referenciado.A extensão “.” (ponto) se refere ao número da “instância” <strong>de</strong> <strong>um</strong> objeto doSNMP. No caso do objeto “Discrete”, este número <strong>de</strong> instância será zero. No caso da“Tabela” <strong>de</strong> objetos, este número <strong>de</strong> instância será o índice na tabela do SNMP.Tabelas <strong>de</strong> SNMP são tipos especiais <strong>de</strong> objetos <strong>de</strong> SNMP que permitemaglutinar <strong>de</strong> forma estruturada <strong>um</strong> conjunto <strong>de</strong> informações. Por exemplo, SNMP <strong>de</strong>fine oobjeto “ifDescr” como <strong>um</strong> objeto padrão do SNMP que indica a <strong>de</strong>scrição <strong>de</strong> texto <strong>de</strong> cadainterface apoiada por <strong>um</strong> dispositivo particular. Consi<strong>de</strong>rando que po<strong>de</strong>m ser configuradosdispositivos <strong>de</strong> re<strong>de</strong> com mais <strong>de</strong> <strong>um</strong>a interface, este objeto só po<strong>de</strong>ria ser representadocomo <strong>um</strong> array ([SUN1999]).Por convenção, objetos SNMP se agrupam sempre em <strong>um</strong> diretório <strong>de</strong>“Entrada”, <strong>de</strong>ntro <strong>de</strong> <strong>um</strong> objeto com <strong>um</strong>a “Tabela” (o objeto “ifDescr” objeto <strong>de</strong>scritoacima, resi<strong>de</strong> no diretório “ifEntry” que é armazenado no diretório “ifTable”). Há váriasregras <strong>para</strong> <strong>de</strong>senvolver objetos SNMP, como segue ([SUN1999]):a) ao criar no diretório <strong>de</strong> “Entrada” <strong>de</strong> <strong>um</strong>a tabela tem que conter o mesmonúmero <strong>de</strong> elementos como outros objetos no mesmo diretório, on<strong>de</strong> o número <strong>de</strong> <strong>um</strong>ainstância é o mesmo <strong>de</strong> todas as entradas. Sempre são consi<strong>de</strong>rados objetos da tabela comoor<strong>de</strong>ns <strong>para</strong>lelas <strong>de</strong> dados;b) quando criando <strong>um</strong> novo objeto <strong>de</strong> “Entrada”, o SNMP requer que <strong>um</strong> valortenha sido associado com cada entrada da tabela em <strong>um</strong>a única mensagem <strong>de</strong> SNMP (únicoPDU). Isto significa que, <strong>para</strong> criar <strong>um</strong>a fila em <strong>um</strong>a tabela (pelo comando “set” noSNMP), <strong>um</strong> valor <strong>de</strong>ve ser especificado <strong>para</strong> cada elemento na fila;c) se <strong>um</strong>a fila da tabela po<strong>de</strong> ser apagada, o SNMP requer pelo menos que <strong>para</strong>isso <strong>um</strong> objeto na entrada tenha <strong>um</strong> elemento <strong>de</strong> controle, que é doc<strong>um</strong>entado <strong>para</strong> executara exclusão da tabela. (Isto só se aplica se <strong>um</strong>a fila po<strong>de</strong> ser excluída, que necessariamentenão é requerido <strong>de</strong> <strong>um</strong>a tabela do SNMP).2.7.3 TIPOS DE OBJETOS DE UMA MIB


24Segundo [SUN1999], os objetos da MIB têm <strong>um</strong> tipo específico <strong>de</strong> valores. OSNMP <strong>de</strong>fine vários tipos primitivos, como se segue.2.7.3.1 Tipo <strong>de</strong> Objetos <strong>de</strong> TextoDefine-se o tipo “DisplayString” que po<strong>de</strong> conter informação textual arbitrária(normalmente <strong>para</strong> <strong>um</strong> máximo <strong>de</strong> 256 caracteres). O texto <strong>de</strong>ve conter somente caracteres<strong>de</strong> impressão. Exemplos <strong>de</strong>ste tipo <strong>de</strong> objeto incluem valores “sysDescr” e “ifDescr”. Estetipo <strong>de</strong> objeto é bastante utilizado nas MIB.2.7.3.2 Tipo <strong>de</strong> Objetos ContadoresDefine-se o tipo “Counter” que é <strong>um</strong> valor n<strong>um</strong>érico que só po<strong>de</strong> a<strong>um</strong>entar. Esteé o tipo mais com<strong>um</strong> <strong>de</strong> objeto <strong>de</strong> SNMP na MIB padrão e inclui objetos como“ipInReceives”, “ipOutRequests”, e “<strong>snmp</strong>InPkts.” Contadores ultrapassam o valor <strong>de</strong>máximo da variável, mas nunca po<strong>de</strong>m ser negativos.2.7.3.3 Tipo <strong>de</strong> Objetos <strong>de</strong> MedidaDefine-se o tipo “Gauge” que é <strong>um</strong> valor n<strong>um</strong>érico que po<strong>de</strong> a<strong>um</strong>entar ou po<strong>de</strong>diminuir. Este tipo é encontrado em apenas alg<strong>um</strong>as <strong>local</strong>izações <strong>de</strong>ntro da MIB padrão.Exemplos <strong>de</strong>ste tipo <strong>de</strong> objeto incluem o objeto “tcpCurrEstab”.2.7.3.4 Tipo <strong>de</strong> Objetos InteirosDefine-se o tipo “Integer” que po<strong>de</strong> conter valores positivos ou negativos. Estevalor normalmente é fornecido por valores <strong>de</strong> tipo “Counter” ou “Gauge”, mas às vezes éexpresso em MIB <strong>de</strong> equipamentos <strong>de</strong> fabricantes.2.7.3.5 Tipo <strong>de</strong> Objetos En<strong>um</strong>eradosDefine-se <strong>um</strong> tipo “En<strong>um</strong>erated Value” que associa <strong>um</strong> campo textual com <strong>um</strong>valor n<strong>um</strong>érico. Este tipo é bastante com<strong>um</strong> na MIB padrão e inclui objetos como“ifAdminStatus”, cujo valores en<strong>um</strong>erados, são “up(1)”, “down(2)”, e “testing(3).”Geralmente os valores en<strong>um</strong>erados são formatados da seguinte forma “nome(número)”.


252.7.3.6 Tipo <strong>de</strong> Objetos TempoDefine-se <strong>um</strong> tipo “TimeTicks” que representa <strong>um</strong> tempo <strong>de</strong>corrido. Este temposempre tem <strong>um</strong>a resolução <strong>de</strong> <strong>um</strong> centésimo <strong>de</strong> segundo, até mesmo quando esta resoluçãonão é usada. Administradores <strong>de</strong> re<strong>de</strong> freqüentemente formatam este valor <strong>de</strong> tempo como“HH:MM:SS:cc” <strong>para</strong> exibição. Por exemplo, o valor “sysUpTime” indica o tempo<strong>de</strong>corrido <strong>de</strong>s<strong>de</strong> que <strong>um</strong> dispositivo foi reiniciado.2.7.3.7 Tipo <strong>de</strong> Objetos ObjetoDefine-se <strong>um</strong> tipo “Object” que po<strong>de</strong> conter o i<strong>de</strong>ntificador <strong>para</strong> outro objetoSNMP. Se o objeto nomeado é compilado na MIB, o nome geralmente é apresentado com omesmo nome no objeto SNMP. Um exemplo <strong>de</strong>ste tipo <strong>de</strong> objeto é a variável“sysObjectID” da MIB.2.7.3.8 Tipo <strong>de</strong> Objetos En<strong>de</strong>reço IPDefine-se <strong>um</strong> tipo “IP address”, que contém o En<strong>de</strong>reço IP <strong>de</strong> <strong>um</strong> dispositivo <strong>de</strong>re<strong>de</strong>. Este tipo <strong>de</strong> objeto é exibido freqüentemente como <strong>um</strong> en<strong>de</strong>reço <strong>de</strong> IP convencional.Exemplos <strong>de</strong>ste tipo <strong>de</strong> objeto incluem “ipRouteDest”, “ipRouteNextHop” e“ipRouteMask”.2.7.3.9 Tipo <strong>de</strong> Objetos En<strong>de</strong>reço FísicoDefine-se <strong>um</strong> tipo “Physical address”, que contém o en<strong>de</strong>reço físico <strong>de</strong> <strong>um</strong>dispositivo <strong>de</strong> re<strong>de</strong>. Gerentes exibem freqüentemente este tipo <strong>de</strong> objeto como <strong>um</strong>asucessão <strong>de</strong> valores hexa<strong>de</strong>cimal, precedidos pela palavra-chave “hex:”, e se<strong>para</strong>dos através<strong>de</strong> dois pontos. Exemplos <strong>de</strong>ste tipo <strong>de</strong> objeto incluem o objeto “ifPhysAddress”.2.7.3.10 Tipo <strong>de</strong> Objetos StringDefine-se <strong>um</strong> tipo “String”, que contém <strong>um</strong>a ca<strong>de</strong>ia <strong>de</strong> caracteres arbitrários.Quando a ca<strong>de</strong>ia <strong>de</strong> caracteres contém só caracteres ASCII, os gerentes exibem este valorcomo <strong>um</strong>a string <strong>de</strong> texto. Caso contrário, gerentes exibem este tipo como <strong>um</strong>a sucessão <strong>de</strong>valores hexa<strong>de</strong>cimal, precedidos pela palavra-chave “hex:”, e se<strong>para</strong>dos através <strong>de</strong> dois


26pontos. Este tipo <strong>de</strong> valor é incom<strong>um</strong>, mas ocasionalmente encontrado em MIBproprietárias.2.7.3.11 Tipo <strong>de</strong> Objetos TabelaO tipo “Table” é <strong>um</strong> objeto que contém entradas da tabela. Este tipo <strong>de</strong> objetosempre é <strong>um</strong> nome intermediário que contém <strong>um</strong> diretório <strong>de</strong> “Entrada” e que contémvários objetos da tabela.2.7.3.12 Tipo <strong>de</strong> Objetos AuxiliaresO tipo “Branch” é <strong>um</strong> objeto que contém tipos adicionais, tabelas, ou qualquertipo <strong>de</strong> objeto listado acima.2.8 ACESSO A VALORES DA MIBCada objeto SNMP é <strong>de</strong>finido <strong>para</strong> ter <strong>um</strong> tipo <strong>de</strong> acesso “somente <strong>de</strong> leitura”,“leitura escrita” ou “apenas escrita”. Isso <strong>de</strong>termina se o usuário po<strong>de</strong> ler o valor <strong>de</strong> objeto,po<strong>de</strong> ler e po<strong>de</strong> escrever o objeto (com <strong>um</strong> comando “set”) ou só escrever o objeto([CHI1999]).Antes que qualquer objeto possa ser lido ou possa ser escrito, o nomecomunitário do SNMP <strong>de</strong>ve ser conhecido. Estes nomes comunitários são configuradospelo administrador, e po<strong>de</strong>m ser vistos como senhas necessárias <strong>para</strong> anexar dados aoSNMP. No sentido exato, nomes comunitários existem <strong>para</strong> permitir que partes da MIB noSNMP, e subconjuntos <strong>de</strong> objeto sejam referenciados. Como o termo “Comunitário” érequerido, espera-se que o verda<strong>de</strong>iro propósito <strong>de</strong>stes valores sejam i<strong>de</strong>ntificarcomunitariamente entre os objetos SNMP configurados. Porém, é prática com<strong>um</strong> fazerestes nomes comunitários limitarem o acesso da capacida<strong>de</strong> do SNMP <strong>para</strong> usuários sempermissão.


272.9 COMPILANDO OBJETOS DA MIBUm dos componentes principais <strong>de</strong> qualquer Gerenciador <strong>de</strong> SNMP é <strong>um</strong>“Compilador <strong>de</strong> MIB” que cria novos objetos da MIB <strong>para</strong> serem adicionados ao sistemagerenciador.Quando <strong>um</strong>a MIB é compilada em <strong>um</strong> gerente SNMP, são criados novos objetosno gerente que são suportados por <strong>agente</strong>s da re<strong>de</strong>. O <strong>agente</strong> não é afetado pela compilaçãoda MIB (visto que ele já possui seus próprios objetos). O ato <strong>de</strong> compilar a MIB permite aogerente saber sobre os objetos especiais que auxiliam o <strong>agente</strong>, passando a ter acesso sobreestes objetos como parte da configuração do objeto.Tipicamente, quando <strong>um</strong>a MIB é compilada no sistema, o gerente cria pastas oudiretórios que correspon<strong>de</strong>m aos objetos. Estas pastas ou diretórios po<strong>de</strong>m ser vistos com<strong>um</strong> “Navegador MIB” que é <strong>um</strong>a ferramenta tradicional <strong>de</strong> gerenciamento <strong>de</strong> SNMP,incluído em todos sistemas <strong>de</strong> gerência <strong>de</strong> re<strong>de</strong>. Estes objetos novos po<strong>de</strong>m ser acessadosou modificados <strong>para</strong> afetar o <strong>de</strong>sempenho <strong>de</strong> <strong>um</strong> <strong>agente</strong> remoto.Os objetos da MIB são doc<strong>um</strong>entados em ASN.1 que é o idioma <strong>de</strong> <strong>de</strong>claração<strong>de</strong> tipo abstrato adotado pelo SNMP. O usuário obterá <strong>de</strong>finições ASN.1 <strong>para</strong> <strong>um</strong>a novaparte <strong>de</strong> equipamento <strong>de</strong> re<strong>de</strong> ou <strong>um</strong> novo <strong>agente</strong> <strong>de</strong> SNMP, transferirá este arquivo <strong>de</strong><strong>de</strong>finições <strong>para</strong> o sistema gerenciador <strong>de</strong> re<strong>de</strong> ([SUN1999]).2.10 O SNMP SOBRE A CAMADA DE TRANSPORTEO protocolo SNMP foi <strong>de</strong>senvolvido <strong>para</strong> rodar sobre a camada <strong>de</strong> transporte,na camada <strong>de</strong> aplicação da pilha <strong>de</strong> protocolo TCP/IP. A maioria das implementações doSNMP utilizam o User Datagram Protocol (UDP) como protocolo <strong>de</strong> transporte. O UDP é<strong>um</strong> protocolo não-confiável, não garantindo a entrega, a or<strong>de</strong>m ou a proteção contraduplicação das mensagens ([ODA1998]).O SNMP utiliza o UDP, pois foi <strong>de</strong>senvolvido <strong>para</strong> funcionar sobre <strong>um</strong> serviço<strong>de</strong> transporte sem conexão. A maior razão <strong>para</strong> isto é o <strong>de</strong>sempenho. Utilizando <strong>um</strong> serviçoorientado à conexão, como o TCP, a execução <strong>de</strong> cada operação necessitaria <strong>de</strong> <strong>um</strong>a préviaconexão, gerando <strong>um</strong> overhead significativo, o que é inaceitável na ativida<strong>de</strong> <strong>de</strong> gerência


28on<strong>de</strong> as informações <strong>de</strong>vem ser trocadas entre as entida<strong>de</strong>s da forma mais rápida possível,sem afetar o <strong>de</strong>sempenho da transmissão dos <strong>de</strong>mais dados.Segmentos UDP são transmitidos em datagramas IP. O cabeçalho UDP inclui oscampos <strong>de</strong> origem e <strong>de</strong>stino, <strong>um</strong> checks<strong>um</strong> opcional que protege o cabeçalho UDP e osdados <strong>de</strong> usuário (em caso do checks<strong>um</strong> ser violado, a Protocol Description Unit (PDU) é<strong>de</strong>scartada).Duas portas UDP são associadas às operações SNMP. As operações Get,GetNext, GetBulk, Inform e Set utilizam a porta 161. Por ser acionada em casos <strong>de</strong>exceção, a operação Trap têm reservada <strong>para</strong> si a porta 162 ([TAN1996]).Como o UDP é <strong>um</strong> protocolo não-confiável, é possível que mensagens SNMPsejam perdidas. O SNMP por si só não fornece garantia sobre a entrega das mensagens. Asações a serem tomadas quando da perda <strong>de</strong> <strong>um</strong>a mensagem SNMP não são abordadas pelopadrão. No entanto, alg<strong>um</strong>as consi<strong>de</strong>rações po<strong>de</strong>m ser feitas sobre a perda <strong>de</strong> mensagensSNMP.No caso <strong>de</strong> <strong>um</strong>a mensagem <strong>de</strong> Get, GetNext ou GetBulk, a estação <strong>de</strong>gerenciamento <strong>de</strong>ve ass<strong>um</strong>ir que esta mensagem (ou o GetResponse correspon<strong>de</strong>nte) tenhasido perdida se não receber resposta n<strong>um</strong> certo período <strong>de</strong> tempo. A estação <strong>de</strong>gerenciamento então po<strong>de</strong> repetir a mensagem <strong>um</strong>a ou mais vezes até que obtenha aresposta. Des<strong>de</strong> que <strong>um</strong> único request-id (que i<strong>de</strong>ntifica a mensagem) seja utilizado <strong>para</strong>cada operação distinta, não haverá dificulda<strong>de</strong> em i<strong>de</strong>ntificar mensagens duplicadas.No caso <strong>de</strong> <strong>um</strong>a mensagem <strong>de</strong> Set, a recuperação <strong>de</strong>ve provavelmente envolvero teste no objeto associado à operação através <strong>de</strong> <strong>um</strong>a Get sobre este mesmo objeto a fim<strong>de</strong> <strong>de</strong>terminar se a operação Set foi ou não efetivada.Segundo [COH2000], no SNMP o gerente executa o gerenciamento através dautilização do protocolo SNMP, que é implementado no topo das camadas UDP, IP e doprotocolo <strong>de</strong>pen<strong>de</strong>nte do tipo <strong>de</strong> re<strong>de</strong> (Ethernet, FDDI, X.25, por exemplo).A figura 3 ilustra o contexto do protocolo SNMP na pilha <strong>de</strong> protocolo TCP/IP,<strong>utilizando</strong> o UDP como protocolo <strong>de</strong> conexão.


29FIGURA 3 - PROTOCOLO SNMP SOBRE A CAMADA DE TRANSPORTEEstação <strong>de</strong>GerênciaAplicação <strong>de</strong>GerenciamentoObjetosgerenciadosElementogerenciadoRecursos e ObjetosgerenciadosGet RequestGetNext RequestSet RequestGet ResponseTrapGerente SNMPUDPIPProtocolo <strong>de</strong>pen<strong>de</strong>nteda Re<strong>de</strong>Mensagens SNMPGet RequestGetNext RequestSet RequestGet ResponseTrapAgente SNMPUDPIPProtocolo <strong>de</strong>pen<strong>de</strong>nteda Re<strong>de</strong>LAN ou InternetO SNMP requer alguns serviços da camada <strong>de</strong> transporte <strong>para</strong> que suasmensagens sejam transmitidas entre as entida<strong>de</strong>s <strong>de</strong> gerenciamento. Isso in<strong>de</strong>pen<strong>de</strong> daimplementação da camada <strong>de</strong> transporte.2.10.1. SERVIÇOS EXIGIDOS PELO SNMPRodando na camada <strong>de</strong> aplicação da arquitetura TCP/IP, como mostrado naFigura 3, o SNMP encontra-se acima das camadas <strong>de</strong> Transporte e Re<strong>de</strong>. Para que o SNMPpossa funcionar a<strong>de</strong>quadamente, estas camadas (Transporte e Re<strong>de</strong>) <strong>de</strong>vem fornecer aomenos cinco serviços que são <strong>de</strong> vital importância à transmissão das mensagens SNMPatravés da re<strong>de</strong> ([COH2000]):a) roteamento -A camada <strong>de</strong> Re<strong>de</strong> é quem fornece as funções <strong>de</strong> roteamento, asquais aperfeiçoam toda a utilida<strong>de</strong> do gerenciamento da re<strong>de</strong>, dando a possibilida<strong>de</strong> <strong>de</strong> “rerotear”os pacotes em torno <strong>de</strong> áreas da re<strong>de</strong> com falhas. Isso permite que o gerenciamentoda re<strong>de</strong> continue operando mesmo após falha em alg<strong>um</strong>a(s) máquina(s) na re<strong>de</strong>;


30b) in<strong>de</strong>pendência do meio - Permite ao SNMP gerenciar diferentes tipos <strong>de</strong>elementos da re<strong>de</strong>, <strong>de</strong> forma in<strong>de</strong>pen<strong>de</strong>nte. Caso o SNMP fosse construído sobre a camada<strong>de</strong> enlace, estaria preso a esta implementação <strong>de</strong> enlace específica, <strong>de</strong>sse modo o SNMPnão po<strong>de</strong>ria gerenciar <strong>um</strong> outro dispositivo que implementasse outro protocolo <strong>de</strong> enlace, oque limitaria o gerenciamento da re<strong>de</strong>;c) fragmentação e Remontagem - Este serviço está relacionado com ain<strong>de</strong>pendência do meio. A mensagem SNMP po<strong>de</strong> ser fragmentada em pacotes, transmitidapelo meio e remontada no <strong>de</strong>stino. O protocolo IP permite que os pacotes SNMP trafeguempelo meio com diferentes tamanhos. A Fragmentação e a Remontagem reduzem a robustezgeral do gerenciamento da re<strong>de</strong>, pois se qualquer fragmento for perdido pelo caminho, todaa operação irá falhar;d) checks<strong>um</strong> ponto-a-ponto - O checks<strong>um</strong> ponto-a-ponto é <strong>um</strong> serviço <strong>de</strong>checagem <strong>de</strong> erros fornecido pela camada <strong>de</strong> transporte que permite a <strong>um</strong>a entida<strong>de</strong>conferir a integrida<strong>de</strong> dos dados recebidos através da re<strong>de</strong>, a<strong>um</strong>entando a confiabilida<strong>de</strong> datransmissão;e) multiplexação/<strong>de</strong>multiplexação - Os serviços <strong>de</strong> Multiplexação eDemultiplexação são fornecidos pelo protocolo <strong>de</strong> transporte. Estes serviços facilitam emmuito os possíveis relacionamentos <strong>de</strong> gerenciamento com o SNMP, permitindo que váriasaplicações SNMP possam utilizar serviços da camada <strong>de</strong> transporte.2.10.2. FORMATO DA MENSAGEM SNMPNo SNMP, as informações são trocadas entre os gerentes e <strong>agente</strong>s na forma <strong>de</strong>mensagens. Cada mensagem possui duas partes, <strong>um</strong> cabeçalho e <strong>um</strong>a Protocol Data Unit(PDU). O cabeçalho inclui <strong>um</strong> número <strong>de</strong> versão (version) que indica a versão do SNMP e<strong>um</strong> nome <strong>de</strong> comunida<strong>de</strong> (community). O nome <strong>de</strong> comunida<strong>de</strong> possui duas funções.Primeiro, o nome <strong>de</strong> comunida<strong>de</strong> <strong>de</strong>fine <strong>um</strong> dispositivo <strong>de</strong> acesso <strong>para</strong> <strong>um</strong> grupo <strong>de</strong> NMS([ODA1998]).Segundo aqueles dispositivos cujo nome <strong>de</strong> comunida<strong>de</strong> são <strong>de</strong>sconhecidos sãoexcluídos <strong>de</strong> operações SNMP. Os gerentes também po<strong>de</strong>m utilizar o nome <strong>de</strong> comunida<strong>de</strong>


31como <strong>um</strong>a forma <strong>de</strong> autenticação. O campo PDU po<strong>de</strong> conter qualquer <strong>um</strong> dos cinco tipos<strong>de</strong> PDU utilizados pelo SNMP (SNMP PDU). Esta estrutura po<strong>de</strong> ser visualizada na Figura4.FIGURA 4 - FORMATO DA MENSAGEM SNMPVersion Community PDU SNMPFonte: [ODA1998]As PDU GetRequest PDU, GetNextRequest PDU e SetRequest PDU são<strong>de</strong>finidas no SNMP com o mesmo formato da GetResponse PDU, com os campos errorstatuse error-in<strong>de</strong>x com valor zero. Essas PDU possuem os seguintes campos([ODA1998]):a) version - Indica a versão do protocolo SNMP utilizado;b) community - O nome <strong>de</strong> comunida<strong>de</strong> atua como <strong>um</strong>a senha <strong>para</strong> autenticar amensagem SNMP;c) SNMP PDU - É a unida<strong>de</strong> <strong>de</strong> dados <strong>de</strong> protocolo (Protocol Data Unit -PDU) utilizada pelo SNMP; contém os dados referentes a operação <strong>de</strong>sejada (Get, GetNextetc). Sua forma mais geral inclui os seguintes campos:• PDU type - indica o tipo <strong>de</strong> PDU, neste caso po<strong>de</strong> ser <strong>um</strong>a GetRequest PDU,<strong>um</strong>a GetNextRequest PDU, <strong>um</strong>a SetRequest PDU ou <strong>um</strong>a GetResponse PDU;• request-id - Usado <strong>para</strong> i<strong>de</strong>ntificar o request; essa mesma i<strong>de</strong>ntificação seráutilizada na resposta a esta mensagem;• error-status - É <strong>um</strong> sinalizador utilizado <strong>para</strong> indicar que <strong>um</strong>a situaçãoinesperada ou erro ocorreu no processamento da mensagem; seus valores possíveis são:i. noError (0) - Indica que não houve qualquer tipo <strong>de</strong> erro noprocessamento da mensagem;


32ii. tooBig (1) - Se o tamanho da mensagem GetResponse gerada exce<strong>de</strong>r<strong>um</strong>a limitação <strong>local</strong>, então o campo error-status ass<strong>um</strong>e este valor. Neste caso, o valor docampo error-in<strong>de</strong>x <strong>de</strong>ve ser zero;iii. noSuchName (2) - Indica que o valor <strong>de</strong> alg<strong>um</strong>a variável da lista <strong>de</strong>variáveis (variablebindings) não está disponível na MIB em questão. Neste caso, o valor docampo error-in<strong>de</strong>x indica em qual variável da lista ocorreu o problema;iv. badValue (3) - Significa que o valor <strong>para</strong> <strong>um</strong>a <strong>de</strong>terminada variávelda lista não está <strong>de</strong> acordo com a linguagem ASN.1; ou que o tipo, tamanho ou valor éinconsistente. Assim como no caso anterior, o valor do campo error-in<strong>de</strong>x indica em qualvariável da lista ocorreu o problema;v. readOnly (4) - Indica que <strong>de</strong>terminada variável da lista só po<strong>de</strong> serlida e não alterada. Neste caso, esse tipo <strong>de</strong> código <strong>de</strong> erro só é retornado após <strong>um</strong>aoperação <strong>de</strong> Set sobre alg<strong>um</strong>a variável. O valor do campo error-in<strong>de</strong>x indica em qualvariável da lista ocorreu o problema;vi. genErr (5) - Se o valor <strong>de</strong> <strong>um</strong>a <strong>de</strong>terminada variável da lista nãopu<strong>de</strong>r ser i<strong>de</strong>ntificado ou alterado por outras razões que não as já citadas, então o campoerror-status ass<strong>um</strong>e o valor genErr ou simplesmente 5. Neste caso, o valor do campo error -in<strong>de</strong>x indica em qual variável da lista ocorreu o problema;d) error-in<strong>de</strong>x - Quando o campo error-status é diferente <strong>de</strong> zero, este campofornece <strong>um</strong>a informação adicional indicando qual variável da lista <strong>de</strong> variáveis causou aexceção (ou erro);e) variablebindings - Uma lista <strong>de</strong> nomes <strong>de</strong> variáveis e seus respectivosvalores (em alguns casos, como no GetRequest PDU, esses valores são nulos). A estrutura<strong>de</strong>ste campo é mostrada na Figura 5.


33FIGURA 5 - ESTRUTURA DO CAMPO VARIABLEBINDINGSnome1 valor1 nome2 valor2 ... nomeN valorNFonte: [ODA1998]Por se tratar <strong>de</strong> <strong>um</strong> caso particular <strong>de</strong> mensagem, indicando <strong>um</strong>a situaçãoinesperada, a Trap PDU possui <strong>um</strong>a estrutura diferente das <strong>de</strong>mais PDU utilizadas peloSNMP.2.10.2.1. GetRequest PDUA GetRequest PDU é utilizada pela estação <strong>de</strong> gerência SNMP <strong>para</strong> executar aoperação Get, requisitando ao <strong>agente</strong> SNMP a leitura <strong>de</strong> variáveis da MIB da máquina on<strong>de</strong>ele se encontra. A entida<strong>de</strong> emissora inclui os seguintes campos nesta PDU:FIGURA 6 - FORMATO DA GETREQUEST PDUPDU type request-id 0 0 variablebindingsFonte: [ODA1998]a) PDU type - Este campo indica que se trata <strong>de</strong> <strong>um</strong> GetRequest PDU;b) request-id - A entida<strong>de</strong> emissora associa a este campo <strong>um</strong> número quei<strong>de</strong>ntifica unicamente este request. O request-id possibilita à aplicação SNMP relacionar<strong>um</strong>a mensagem <strong>de</strong> response recebida a <strong>um</strong>a mensagem <strong>de</strong> request enviada, pois o responsetrará o mesmo valor do request-id. Além disso, o request-id permite ao <strong>agente</strong> i<strong>de</strong>ntificarPDU duplicadas geradas em função <strong>de</strong> falhas no serviço <strong>de</strong> transporte;c) variablebindings - Uma lista <strong>de</strong> instâncias <strong>de</strong> objetos (variáveis) dos quaissão requisitados os valores.Percebe-se na Figura 6 que na GetRequest PDU os campos error-status e errorin<strong>de</strong>xpossuem o valor zero.


34FIGURA 7 - PASSAGEM DA GETREQUEST PDUGet Request PDUGet Response PDUNMSEstação gerenciadaRe<strong>de</strong>Fonte: [COH2000]A entida<strong>de</strong> SNMP receptora respon<strong>de</strong> a <strong>um</strong>a GetRequest PDU com <strong>um</strong>aGetResponse PDU contendo o mesmo valor do request-id, como está mostrando na figura7. Caso a entida<strong>de</strong> receptora da GetRequest PDU possa fornecer o valor <strong>de</strong> todas asvariáveis listadas no campo variablebindings, então é montada <strong>um</strong>a GetResponse PDUcontendo este campo acrescentado do respectivo valor <strong>de</strong> cada variável. Se o valor <strong>de</strong>apenas <strong>um</strong>a variável não pu<strong>de</strong>r ser informado, então nenh<strong>um</strong> dos valores das outrasvariáveis são retornados. As condições <strong>de</strong> erro que po<strong>de</strong>m acontecer são ([ODA1998]):a) <strong>para</strong> <strong>um</strong>a variável referenciada no campo variablebindings que não sejaencontrada <strong>um</strong>a correspon<strong>de</strong>nte na MIB em questão; ou a variável referenciada po<strong>de</strong> ser<strong>um</strong> tipo agregado e <strong>de</strong>sta forma não há <strong>um</strong>a valor agregado a esta instância. Neste caso, aentida<strong>de</strong> receptora retorna <strong>um</strong>a GetResponse PDU com o campo error-status indicandonoSuchName e com o valor do campo error-in<strong>de</strong>x indicando que variável da lista <strong>de</strong>variáveis (variablebindings) causou o problema, ou seja, se a terceira variável da lista <strong>de</strong>variáveis não estiver disponível <strong>para</strong> a operação Get, então o campo error-in<strong>de</strong>x daGetResponse PDU possui o valor 3;b) a entida<strong>de</strong> receptora po<strong>de</strong> fornecer o valor <strong>de</strong> todas as variáveis da lista, maso tamanho resultante da GetResponse PDU po<strong>de</strong> exce<strong>de</strong>r a limitação <strong>local</strong>. Neste caso, aentida<strong>de</strong> receptora envia à entida<strong>de</strong> emissora <strong>um</strong>a GetResponse PDU com o campo errorstatusindicando tooBig;


35c) a entida<strong>de</strong> receptora po<strong>de</strong> não fornecer o valor <strong>de</strong> <strong>um</strong>a <strong>de</strong>terminada variávelpor alg<strong>um</strong>a outra razão. Neste caso, a entida<strong>de</strong> receptora retorna <strong>um</strong>a GetResponse PDUcom o campo error-status indicando genErr e com o valor do campo error-in<strong>de</strong>x indicandoque variável da lista <strong>de</strong> variáveis causou o erro.Se nenh<strong>um</strong> dos casos anterior se aplica, então a entida<strong>de</strong> receptora envia <strong>para</strong> aentida<strong>de</strong> da qual originou a GetRequest PDU <strong>um</strong>a GetResponse PDU com o campo errorstatusindicando noError e com o valor do campo error-in<strong>de</strong>x com valor zero.2.10.2.2. GetNextRequest PDUA GetNextRequest PDU é utilizada pela estação <strong>de</strong> gerência SNMP <strong>para</strong>executar a operação GetNext, requisitando ao <strong>agente</strong> SNMP a leitura da próxima variávelna or<strong>de</strong>m lexicográfica da MIB da máquina on<strong>de</strong> ele se encontra. A GetNextRequest PDUé praticamente idêntica à GetRequest PDU, possuindo o mesmo mecanismo <strong>de</strong> troca e amesma estrutura, como mostrado na Figura 8.FIGURA 8 - FORMATO DA GETNEXTREQUEST PDU.PDU type request-id 0 0 variablebindingsFonte: [ODA1998]A única diferença é o seguinte: n<strong>um</strong>a GetRequest PDU cada variável <strong>de</strong>scrita nalista <strong>de</strong> variáveis (variablebindings) <strong>de</strong>ve ter seu valor retornado. Na GetNextRequestPDU, <strong>para</strong> cada variável, é retornado o valor da instância que é a próxima na or<strong>de</strong>msegundo a <strong>de</strong>finição da MIB. Assim como a GetRequest PDU, a GetNextRequest PDU échamada ou todos os valores <strong>de</strong> todas as variáveis da lista (variablebindings) sãoretornados ou nenh<strong>um</strong> <strong>de</strong>les é, conforme mostrado na figura 9.


36FIGURA 9 - PASSAGEM DA GETNEXTREQUEST PDUGetNextRequest PDUGet Response PDUNMSEstação gerenciadaRe<strong>de</strong>Fonte: [COH2000]Apesar <strong>de</strong> parecer pouco significante, esta diferença entre a GetRequest PDU ea GetNextRequest PDU possui gran<strong>de</strong>s implicações. A fim <strong>de</strong> enten<strong>de</strong>r essas implicaçõesvamos analisar alg<strong>um</strong>as possibilida<strong>de</strong>s:• suponha-se que <strong>um</strong>a estação <strong>de</strong> gerência (NMS) <strong>de</strong>seje recuperar os valores<strong>de</strong> todas as variáveis simples do grupo UDP <strong>de</strong> <strong>um</strong>a <strong>de</strong>terminada MIB. A NMS então enviaao gerente responsável por gerenciar esta MIB <strong>um</strong>a GetRequest PDU na seguinte forma:GetRequest (udpInDatagrams.0, udpNoPorts.0, udpInErrors.0,udpOutDatagrams.0)Se a MIB em questão suportar todas as variáveis relacionadas na lista, então<strong>um</strong>a GetResponse PDU <strong>de</strong>verá ser retornada com os respectivos valores das variáveisreferenciadas na GetRequest PDU:GetResponse ((udpIndatagrams.0 = 100),(udpNoPorts.0 = 1),(udpInErrors.0 = 2) ,(udpOutDatagrams.0 = 200)) ,On<strong>de</strong> 100, 1, 2 e 200 são os valores das respectivas variáveis requisitadas noGetRequest. Entretanto, se não for possível retornar o valor <strong>de</strong> qualquer das variáveis, então


37a GetResponse PDU é <strong>de</strong>scartada e outra GetResponse PDU é construída e enviada aogerente da NMS com o código <strong>de</strong> erro indicando noSuchName. Para assegurar que todos osvalores disponíveis sejam informados, <strong>utilizando</strong>-se a GetRequest PDU, a estação <strong>de</strong>gerenciamento teria que enviar quatro <strong>de</strong>stas PDU se<strong>para</strong>das, cada <strong>um</strong>a requisitando o valor<strong>de</strong> <strong>um</strong>a variável específica. Agora consi<strong>de</strong>remos a utilização da GetNextRequest PDU narecuperação dos valores das variáveis:GetNextRequest (udpIndatagrams.0, udpNoPorts.0, udpInErrors.0,udpOutDatagrams.0)Neste caso, o <strong>agente</strong> irá retornar o valor da próxima instância do objeto(variável) <strong>para</strong> cada i<strong>de</strong>ntificador da lista <strong>de</strong> variáveis. Suponha agora que todas asvariáveis da lista sejam suportadas pela MIB em questão. O i<strong>de</strong>ntificador (Object I<strong>de</strong>ntifier)<strong>para</strong> a variável udpInErrors, por exemplo, é 1.3.6.1.2.1.7.3. A próxima instância <strong>para</strong> estamesma variável na or<strong>de</strong>m da MIB é i<strong>de</strong>ntificada por udpInErrors.0 ou 1.3.6.1.2.1.7.3.0. Damesma forma, a próxima instância <strong>de</strong> udpNoPorts (1.3.6.1.2.1.7.2) é udpNoPorts.0(1.3.6.1.2.1.7.2.0), e assim <strong>para</strong> as outras variáveis. Assim, se todos os valores estãodisponíveis, o <strong>agente</strong> irá retornar <strong>um</strong>a GetResponse PDU na seguinte forma:GetResponse ((udpIndatagrams.0 = 100),(udpNoPorts.0 = 1),(udpInErrors.0 = 2) ,(udpOutDatagrams.0 = 200)),A qual é a mesma retornada com a utilização da GetRequest PDU. Agora,suponhamos que o valor <strong>de</strong> udpNoPorts não esteja disponível e que a mesmaGetNextRequest PDU seja utilizada. Neste caso, a resposta do <strong>agente</strong> viria na seguinteforma:GetResponse ((udpIndatagrams.0 = 100),( udpInErrors.0 = 2),(udpInErrors.0 = 2) ,(udpOutDatagrams.0 = 200))Neste caso, o i<strong>de</strong>ntificador da variável udpNoPorts.0 não é <strong>um</strong> i<strong>de</strong>ntificadorválido <strong>para</strong> a MIB em questão. Portanto, o <strong>agente</strong> retorna o valor da próxima instância naor<strong>de</strong>m, a qual neste caso é udpInErrors.0. Po<strong>de</strong>mos perceber que a utilização da


38GetNextRequest PDU nos permite <strong>um</strong> melhor <strong>de</strong>sempenho na recuperação <strong>de</strong> <strong>um</strong> conjunto<strong>de</strong> valores <strong>de</strong> variáveis quando há a possibilida<strong>de</strong> <strong>de</strong> alg<strong>um</strong> <strong>de</strong>stes valores não estaremdisponíveis.A utilização da operação GetNext é particularmente interessante na recuperação<strong>de</strong> <strong>um</strong>a seqüência <strong>de</strong> instâncias <strong>de</strong> variáveis. No entanto, esta operação ainda possui oinconveniente <strong>de</strong> se ter que enviar sucessivas GetNextRequest PDU, pois este tipo <strong>de</strong> PDUnão permite recuperar <strong>um</strong> número gran<strong>de</strong> <strong>de</strong> instâncias.2.10.2.3. GetBulkRequest PDUA GetBulk PDU é utilizada por <strong>um</strong> gerente SNMP <strong>para</strong> executar a operaçãoGetBulk, <strong>um</strong>a das melhores características adicionadas ao SNMP padrão, que permite que<strong>um</strong> gerente SNMP resgate <strong>um</strong>a gran<strong>de</strong> quantida<strong>de</strong> <strong>de</strong> informações <strong>de</strong> gerenciamento <strong>de</strong><strong>um</strong>a <strong>de</strong>terminada MIB. A GetBulkRequest PDU permite a <strong>um</strong> gerente SNMP requisitar quea resposta (GetResponse PDU) seja tão gran<strong>de</strong> quanto possível <strong>de</strong>ntro da restrição <strong>de</strong>tamanho.A GetBulkRequest PDU segue o mesmo princípio da GetNextRequest PDU,recuperando sempre a próxima instância, na or<strong>de</strong>nação da MIB, <strong>de</strong> cada variável da lista <strong>de</strong>variáveis (variablebindings). A diferença é que, com a GetBulkRequest PDU, é possívelespecificar quantas próximas instâncias na or<strong>de</strong>m <strong>de</strong>vem ser retornadas na mesmaGetResponse PDU.FIGURA 10 - FORMATO DA GETBULKREQUEST PDUPDU type request-id NonRepeaters MaxRepeaters variablebindingsFonte: [ODA1998]Como mostrado na Figura 10, a GetBulkRequest PDU utiliza <strong>um</strong> formatodiferente das <strong>de</strong>mais PDU, com os seguintes campos:


39a) PDU type, request-id e variablesbindings - Estes campos possuem naGetBulkRequest PDU a mesma função que possuem nas <strong>de</strong>mais PDU (GetRequest PDU,GetNextRequest PDU, SetRequest PDU, Response PDU, InformRequest PDU e TrapPDU);b) Nonrepeaters - Especifica o total das primeiras variáveis da lista <strong>de</strong> variáveis(variablebindings) das quais apenas a próxima instância na or<strong>de</strong>m <strong>de</strong>ve ser retornada;c) Max-repetitions - Especifica o número <strong>de</strong> sucessores, também na or<strong>de</strong>m, que<strong>de</strong>vem ser retornados <strong>para</strong> o resto (total_<strong>de</strong>_variáveis_da_lista - Nonrepeaters) dasvariáveis da lista <strong>de</strong> variáveis.Após executar a operação GetBulk o <strong>agente</strong> <strong>de</strong>ve construir <strong>um</strong>a GetResponsePDU, contendo as instâncias das variáveis requisitadas e seus respectivos valores. Noentanto, po<strong>de</strong> acontecer <strong>de</strong> a GetResponse PDU não retornar todos os pares (instância,valor) requisitados na lista (po<strong>de</strong>ndo até retornar nenh<strong>um</strong> dos pares). Isso po<strong>de</strong> ocorrer portrês razões:a) se o tamanho da mensagem que encapsula a GetResponse PDU exce<strong>de</strong>r alimitação <strong>local</strong> <strong>de</strong> tamanho ou exce<strong>de</strong>r o tamanho máximo <strong>de</strong> <strong>um</strong>a mensagem <strong>de</strong> request(<strong>de</strong>finido pelo protocolo), então a GetResponse é gerada com <strong>um</strong> número menor <strong>de</strong> paresno campo variablebindings. Ou seja, a GetResponse PDU é gerada inserindo-se os paresaté que o tamanho máximo seja alcançado;b) se todos os pares subseqüentes <strong>de</strong>scritos na lista <strong>de</strong> variáveis possuírem ovalor endOfMibView (significando que não existe <strong>um</strong> sucessor da variável na or<strong>de</strong>m daMIB), o campo variablebindings po<strong>de</strong> ser truncado neste ponto, retornando nenh<strong>um</strong> dospares requisitados;c) se o processamento <strong>de</strong> <strong>um</strong>a GetBulkRequest PDU necessitar <strong>de</strong> <strong>um</strong>a gran<strong>de</strong>quantida<strong>de</strong> <strong>de</strong> tempo <strong>de</strong> processamento pelo <strong>agente</strong>, então o <strong>agente</strong> po<strong>de</strong> particionar oprocessamento, retornando resultados parciais.


40FIGURA 11- PASSAGEM DA GETBULKREQUEST PDUGetBulkRequest PDUGet Response PDUNMSEstação gerenciadaRe<strong>de</strong>Fonte: [COH2000]Se o processamento <strong>de</strong> alg<strong>um</strong>a variável falhar, por qualquer motivo que não sejaendOfMibView, então nenh<strong>um</strong> dos pares requisitados é retornado. Em vez disso, o <strong>agente</strong>envia ao gerente <strong>um</strong>a GetResponse PDU com o campo error-status indicando genErr e ovalor do campo error-in<strong>de</strong>x apontando <strong>para</strong> a variável da lista que gerou o problema. Ocódigo <strong>de</strong> erro tooBig nunca é retornado por <strong>um</strong> <strong>agente</strong> SNMP pois, como já foi dito,quando a mensagem <strong>de</strong> resposta é muito gran<strong>de</strong> nem todas as variáveis requisitadas sãoretornadas na mesma PDU, diminuindo seu tamanho.2.10.2.4. SetRequest PDUA SetRequest PDU é utilizada por <strong>um</strong> gerente SNMP na realização da operaçãoSet, indicando ao <strong>agente</strong> que o valor <strong>de</strong> <strong>de</strong>terminada(s) variável(is) <strong>de</strong>ve(m) ser alterado(s).Este tipo <strong>de</strong> PDU possui o mesmo formato da GetRequest PDU. No entanto, é utilizada<strong>para</strong> escrever <strong>um</strong>a variável na MIB, ao invés <strong>de</strong> lê-la. Diferente da GetRequest PDU e daGetNextRequest PDU, cujo valor das variáveis referenciadas na lista (variablebindings)têm valor zero, neste tipo <strong>de</strong> PDU o valor <strong>de</strong> cada instância da lista representa o valor a sermodificado na MIB em questão.


41FIGURA 12 - ESTRUTURA DA SETREQUEST PDUPDU type request-id 0 0 variablebindingsFonte: [ODA1998]Quando <strong>um</strong> <strong>agente</strong> recebe <strong>um</strong>a SetRequest PDU ele efetua, quando possível, aoperação Set, modificando o valor das variáveis correspon<strong>de</strong>ntes, e retorna ao gerente daNMS emissora <strong>um</strong>a GetResponse PDU contendo o mesmo request-id. Assim como aoperação Get, a operação Set é solicitada ou todas as variáveis são modificadas/atualizadasou nenh<strong>um</strong>a <strong>de</strong>las o é.Se <strong>um</strong> <strong>agente</strong> que recebeu <strong>um</strong>a SetRequest PDU pu<strong>de</strong>r alterar o valor <strong>de</strong> todasas variáveis especificadas na lista (variablebindings), então ele constrói <strong>um</strong>a GetResponsePDU incluindo a mesma lista <strong>de</strong> variáveis, com seus respectivos valores atualizados,enviando-a ao gerente da NMS emissora. Se ao menos <strong>um</strong> dos valores não pu<strong>de</strong>r sermodificado, então nenh<strong>um</strong> valor é retornado e nem escrito na MIB em questão. As mesmascondições <strong>de</strong> erro usadas na GetRequest PDU po<strong>de</strong>m ser retornadas (noSuchName, tooBig,genErr).Outro erro que po<strong>de</strong> ocorrer durante a operação Set é o badValue. Esta condição<strong>de</strong> erro ocorre quando alg<strong>um</strong> dos pares (variável, valor) contidos na SetRequest PDUestiver inconsistente no que diz respeito ao tipo, tamanho ou valor. Quando alg<strong>um</strong> erroocorre o <strong>agente</strong> <strong>de</strong>scarta a GetResponse PDU e constrói <strong>um</strong>a nova com o campo statuserrorindicando o tipo <strong>de</strong> erro que ocorreu durante a operação e com o campo in<strong>de</strong>x-errorapontando <strong>para</strong> a variável da lista que ocasionou o problema.


42FIGURA 13 - PASSAGEM DA SETREQUEST PDUSetRequest PDUGet Response PDUNMSEstação gerenciadaRe<strong>de</strong>Fonte: [COH2000]Um curioso código <strong>de</strong> erro que po<strong>de</strong> ser retornado por <strong>um</strong> <strong>agente</strong> durante aexecução da operação Set é o readOnly, que praticamente não é implementado. O problemaé que o readOnly significa que <strong>um</strong>a <strong>de</strong>terminada variável na MIB em questão cujo valor<strong>de</strong>veria ser modificado possui status <strong>de</strong> apenas leitura (read only), não po<strong>de</strong>ndo portantoser alterado. No entanto, quando <strong>um</strong> gerente pe<strong>de</strong> a <strong>um</strong> <strong>agente</strong> <strong>para</strong> modificar <strong>um</strong>a variávelque seja do tipo read only, o <strong>agente</strong> não po<strong>de</strong>ndo executar esta operação, constrói e envia<strong>um</strong>a GetResponse PDU com o código <strong>de</strong> erro indicando noSuchName e não readOnly.O gran<strong>de</strong> problema <strong>de</strong>sta confusão é o fato <strong>de</strong> que quando <strong>um</strong> gerente recebe<strong>um</strong>a GetResponse PDU <strong>de</strong> <strong>um</strong>a operação <strong>de</strong> Set com o código <strong>de</strong> erro indicandonoSuchName, ele não tem como saber se a instância da variável realmente não foiencontrada na MIB (o que justifica o noSuchName) ou se o problema, na verda<strong>de</strong>, é que ainstância da variável possui status read only na MIB em questão.Neste caso, <strong>para</strong> ter certeza da origem do problema, o gerente teria que enviar<strong>um</strong>a GetRequest PDU <strong>para</strong> a variável que causou o problema a fim <strong>de</strong> verificar serealmente a variável não existe na MIB ou se ela apenas possui o status <strong>de</strong> read only.


432.10.2.5. Trap PDUA Trap PDU é utilizada pelo <strong>agente</strong> SNMP na execução da operação Trap,notificando <strong>de</strong> forma assíncrona eventos extraordinários que tenham ocorrido no objetogerenciado. A Trap PDU possui <strong>um</strong>a estrutura diferente das outras PDU como mostrada naFigura 14.FIGURA 14 - ESTRUTURA DA TRAP PDU - SNMPPDU type enterprise agent-addr generic-trap specific-trap time-stamp variablebindingsFonte: [ODA1998]a) PDU type - indica o tipo <strong>de</strong> PDU, neste caso indica que trata-se <strong>de</strong> <strong>um</strong>a TrapPDU;b) enterprise - indica o tipo do objeto que gerou o Trap; este campo épreenchido a partir do sysObjectID;c) agent-addr - en<strong>de</strong>reço do objeto que gerou o Trap;são:d) generic-trap - indica o tipo do Trap; os valores possíveis <strong>para</strong> este campo• coldStart (0) - Significa que a entida<strong>de</strong> emissora do Trap está sendoinicializada, <strong>de</strong> tal modo que a configuração do <strong>agente</strong> ou da entida<strong>de</strong> <strong>de</strong> protocolo po<strong>de</strong>mser alteradas;• warmStart (1) - Significa que a entida<strong>de</strong> emissora do Trap está sendoreinicializada, <strong>de</strong> tal modo que nenh<strong>um</strong>a configuração do <strong>agente</strong> nem da entida<strong>de</strong> éalterada;• linkDown (2) - Significa que a entida<strong>de</strong> emissora do Trap reconheceuque o estado <strong>de</strong> alg<strong>um</strong>a <strong>de</strong> suas linhas <strong>de</strong> comunicação representadas na configuração do<strong>agente</strong> está disponível;


44• linkUp (3) - Significa que a entida<strong>de</strong> emissora do Trap reconheceu que oestado <strong>de</strong> <strong>um</strong>a <strong>de</strong> suas linhas <strong>de</strong> comunicação representadas na configuração do <strong>agente</strong> estádisponível;• authentication-Failure (4) - Significa que a entida<strong>de</strong> emissora do Trapfoi o <strong>de</strong>stinatário <strong>de</strong> <strong>um</strong>a mensagem <strong>de</strong> protocolo que não estava corretamente autenticada.Quando da implementação do gerente, esta proprieda<strong>de</strong> <strong>de</strong> enviar este tipo <strong>de</strong> Trap <strong>de</strong>ve serconfigurável, po<strong>de</strong>ndo em <strong>de</strong>terminados casos ser <strong>de</strong>sativada;• egpNeighborLoss (5) - Significa que <strong>um</strong> vizinho EGP (Exterior GatewayProtocol) da entida<strong>de</strong> emissora do Trap foi o mesmo EGP <strong>de</strong> quem a entida<strong>de</strong> emissoramarcou a queda e cujo relacionamento foi perdido;• enterprise-Specific (6) - Significa que a entida<strong>de</strong> emissora do Trapreconhece que ocorreu alg<strong>um</strong> evento avançado específico ocorreu;e) specific-trap - possui o código específico do Trap;f) time-stamp - armazena o tempo <strong>de</strong>corrido entre a última reinicialização daentida<strong>de</strong> que gerou o Trap e a geração do Trap; contém o valor <strong>de</strong> sysUpTime;valores.g) variablebindings - Uma lista <strong>de</strong> nomes <strong>de</strong> variáveis e seus respectivosToda vez que <strong>um</strong>a máquina da re<strong>de</strong> é inicializada, o <strong>agente</strong> responsável <strong>de</strong>veenviar ao gerente <strong>um</strong> Trap do tipo coldStart (0), indicando que a máquina "entrou" na re<strong>de</strong>.Outra característica que difere a Trap PDU das outras PDU é o fato <strong>de</strong> que elanão necessita <strong>de</strong> <strong>um</strong>a resposta, como mostra a Figura 15.


45FIGURA 15 - PASSAGEM DA TRAP PDUTrap PDUNMSEstação gerenciadaRe<strong>de</strong>Fonte: [COH2000]2.10.2.5.1. Trap PDU-v2A Trap PDU-v2 segue as mesmas regras da Trap PDU utilizada na versão básicado SNMP, mas com <strong>um</strong> formato diferente. Conforme a Figura 16, este formato é o mesmo<strong>de</strong> todas as outras PDU utilizadas no SNMP, exceto a GetBulkRequest PDU, o que facilitao processamento das mensagens pelo <strong>agente</strong> SNMP.FIGURA 16 - ESTRUTURA DA TRAP PDU - SNMPV2.PDU type request-id 0 0 variablebindingsFonte: [ODA1998]2.10.2.6. InformRequest PDUA InformRequest PDU é enviada por <strong>um</strong> <strong>agente</strong> SNMP a outro <strong>agente</strong> SNMP,fornecendo informações <strong>de</strong> gerenciamento ao último <strong>agente</strong>. Esta PDU inclui o campovariablebindings com os mesmos elementos da Trap PDU-v2, como mostra a Figura 17.


46FIGURA 17 - ESTRUTURA DA INFORMREQUEST PDUPDU type request-id 0 0 variablebindingsFonte: [ODA1998]Ao receber <strong>um</strong>a InformRequest PDU, o <strong>agente</strong> <strong>de</strong>termina o tamanho damensagem <strong>de</strong> resposta que encapsula <strong>um</strong>a GetResponse PDU com os mesmos valores doscampos request-id, error-status, error-in<strong>de</strong>x e variablebindings da InformRequest PDUrecebida. Se este tamanho exce<strong>de</strong>r a limitação <strong>local</strong> <strong>de</strong> tamanho ou exce<strong>de</strong>r o tamanhomáximo da mensagem <strong>de</strong> resposta, então <strong>um</strong>a GetResponse PDU é construída com ocódigo <strong>de</strong> erro (error-status) indicando tooBig, o índice <strong>de</strong> erro (error-in<strong>de</strong>x) com valorzero e com a lista vazia <strong>de</strong> variáveis (variablebindings).FIGURA 18 - PASSAGEM DA INFORMREQUEST PDUFonte: [SUN1999]Caso o tamanho da mensagem seja aceitável, seu conteúdo é passado <strong>para</strong> aaplicação <strong>de</strong>stino e é construída e enviada <strong>para</strong> o <strong>agente</strong> origem <strong>um</strong>a GetResponse PDUcom o código <strong>de</strong> erro indicando noError e o índice <strong>de</strong> erro com valor zero.


472.10.2.7. GetResponse PDUO formato da GetResponse PDU é idêntico a GetRequest PDU a não ser pelaindicação do tipo (PDU Type). Uma GetResponse PDU é gerada por <strong>um</strong>a entida<strong>de</strong> SNMPsempre que esta recebe <strong>um</strong>a GetRequest PDU, GetNextRequest PDU ou SetRequestPDU,como <strong>de</strong>scrito anteriormente.2.11 COMPONENTES ESSENCIAIS DO GERENCIADORSegundo [ODA1998], todos os gerentes SNMP contêm vários componentesbásicos como segue.2.11.1 FUNÇÕES DE ALARMEOs gerentes SNMP possuem a funcionalida<strong>de</strong> <strong>de</strong> monitorar os objetos da MIB e<strong>de</strong> respon<strong>de</strong>r com alg<strong>um</strong> tipo <strong>de</strong> notificação quando estes mesmos são violados. Isto fazcom que constantemente seja testada a integrida<strong>de</strong> <strong>de</strong> <strong>um</strong>a re<strong>de</strong>. Inerente a esta função estáa habilida<strong>de</strong> <strong>de</strong> <strong>de</strong>terminar quais dispositivos estão respon<strong>de</strong>ndo e quais dispositivos nãoestão respon<strong>de</strong>ndo.2.11.2 MONITORAMENTO DE FUNÇÕESOs gerentes SNMP po<strong>de</strong>m monitorar continuamente <strong>um</strong> valor SNMP e verificareste valor a intervalos periódicos <strong>para</strong> ver a tendência <strong>de</strong> <strong>um</strong>a re<strong>de</strong>. Este tipo <strong>de</strong> funçãopo<strong>de</strong> ser usado <strong>para</strong> <strong>de</strong>terminar a carga <strong>de</strong> utilização <strong>de</strong> <strong>um</strong>a re<strong>de</strong> durante <strong>um</strong> certo período.2.11.3 FUNÇÕES DE RECEPÇÃOOs gerentes SNMP po<strong>de</strong>m receber mensagens do SNMP emitidasespontaneamente por dispositivos <strong>de</strong> re<strong>de</strong>. Mensagens espontâneas SNMP são <strong>um</strong>a parteimportante do padrão e permitem aos dispositivos informar problemas. Em função dasmensagens espontâneas serem assíncronas e fora do controle do gerente da re<strong>de</strong>, osgerentes SNMP requerem alg<strong>um</strong> tipo <strong>de</strong> filtro <strong>de</strong> mensagem <strong>para</strong> eliminar mensagensin<strong>de</strong>sejadas ou não pertinentes.2.11.4 CONFIGURANDO FERRAMENTAS DO GERENCIADOR


48Os gerentes SNMP possuem <strong>um</strong>a configuração <strong>de</strong> ferramentas. O tipo maistradicional <strong>de</strong> ferramenta <strong>de</strong> gerenciamento SNMP é <strong>um</strong> browser <strong>de</strong> MIB que permite <strong>um</strong>usuário inspecionar o MIB cujo objeto seja <strong>um</strong> dispositivo em particular. Esta éfreqüentemente a interface principal <strong>para</strong> fixar valores <strong>de</strong> SNMP <strong>de</strong> <strong>um</strong> <strong>agente</strong> e aplicarmudanças na re<strong>de</strong>.2.11.5 COMPILADOR DE MIBO compilador <strong>de</strong> MIB tem a funcionalida<strong>de</strong> <strong>de</strong> adicionar novos objetos na MIB<strong>para</strong> os equipamentos <strong>de</strong> re<strong>de</strong>, <strong>de</strong>pen<strong>de</strong>ndo do recurso requerido que a re<strong>de</strong> estánecessitando.


493. A PLATAFORMA JDMKO JDMK é <strong>um</strong>a solução baseada em Java <strong>para</strong> construir e distribuir inteligência<strong>de</strong> gerenciamento em sistemas, aplicações e dispositivos <strong>de</strong> re<strong>de</strong>. Para o <strong>de</strong>senvolvimentoele utiliza classes <strong>de</strong> Java e ferramentas que simplificam o <strong>de</strong>senvolvimento <strong>de</strong> <strong>agente</strong>sdinâmicos e extensíveis ([SUN1999]).Um <strong>agente</strong> é <strong>um</strong>a aplicação que oferece <strong>um</strong> ou mais serviços. Os <strong>agente</strong>s agemcomo assistentes invisíveis, o alertam <strong>para</strong> problemas potenciais ao longo da re<strong>de</strong> ouexecutam tarefas <strong>de</strong> gerenciamento sem intervenção h<strong>um</strong>ana. Agentes são inteligentes,autônomos e dinâmicos. Eles po<strong>de</strong>m carregar serviços <strong>de</strong> gerenciamento do servidor <strong>de</strong>re<strong>de</strong> e po<strong>de</strong>m incluir novos serviços <strong>para</strong> que fiquem disponíveis. Isto permite que <strong>um</strong> novoserviço <strong>de</strong> gerenciamento po<strong>de</strong> ser iniciado a qualquer hora.3.1 DIFERENÇAS ENTRE O JDMK E AS DEMAIS PLATAFORMASSegundo [SUN1999], o gerenciamento <strong>de</strong> re<strong>de</strong> é executado através <strong>de</strong>aplicações <strong>de</strong> gerência. Estas aplicações <strong>de</strong> gerência são auxiliadas por <strong>agente</strong>s, que agemcomo os intérpretes e filtros e enviam comandos aos elementos <strong>de</strong> re<strong>de</strong>, controlando earmazenando informações sobre os elementos da re<strong>de</strong>. As aplicações <strong>de</strong> gerência controlamos meios que estes <strong>agente</strong>s operam, pois estes contêm pequena inteligência <strong>de</strong>gerenciamento e po<strong>de</strong>m executar apenas operações básicas <strong>de</strong> gerenciamento <strong>de</strong> re<strong>de</strong>.Desenvolvedores têm que escolher <strong>um</strong>a única tecnologia <strong>de</strong> gerenciamento <strong>para</strong>várias existentes no mercado. Em alguns casos, os <strong>de</strong>senvolvedores po<strong>de</strong>m implementargerenciamento <strong>de</strong> múltiplas tecnologias <strong>para</strong> suprir <strong>um</strong>a cobertura mais ampla dosmercados potenciais, como por exemplo, SNMP e CMIP.O JDMK é <strong>um</strong>a plataforma que oferece <strong>um</strong>a instr<strong>um</strong>entação uniforme poradministrar sistemas, aplicações e sistemas <strong>de</strong> gerenciamento <strong>de</strong> re<strong>de</strong>. Também é aplataforma chave, na qual habilita a re<strong>de</strong> <strong>de</strong> service-driven. A re<strong>de</strong> service-driven é <strong>um</strong>anova aproximação <strong>para</strong> a re<strong>de</strong> que computa e se concentra nos serviços que serãoutilizados. Estes serviços variam dos serviços <strong>de</strong> baixo nível que administram relações


50entre dispositivos <strong>de</strong> re<strong>de</strong> <strong>para</strong> os serviços “value-ad<strong>de</strong>d” que po<strong>de</strong>m ser fornecidos aosusuários finais.Com o JDMK, os serviços são diretamente incorporados nos <strong>agente</strong>s. Sãoconcedidas permissões aos <strong>agente</strong>s <strong>para</strong> executar o gerenciamento da re<strong>de</strong> e a suadistribuição.Assim, o JDMK abre a porta <strong>para</strong> novos tipos <strong>de</strong> aplicações <strong>de</strong> gerenciamentoque po<strong>de</strong>m ser criadas, <strong>de</strong>senvolvidas, adicionadas ou eliminadas em tempo <strong>de</strong> execução.3.2 BENEFÍCIOS DO JDMKSegundo [SUN1999], o JDMK apóia protocolos <strong>de</strong> gerenciamento, como oSNMP. Também usa <strong>um</strong> mecanismo dinâmico baseado na Internet que permite queserviços novos sejam carregados do servidor <strong>de</strong> re<strong>de</strong> em tempo <strong>de</strong> execução. Não só sãoimplementados serviços <strong>de</strong>ntro <strong>de</strong> dispositivos, mas também po<strong>de</strong> ser baseados em re<strong>de</strong>s,armazenados em arquivos como simples páginas na re<strong>de</strong> da mesma maneira comotecnologias baseadas em applets Java.Po<strong>de</strong>m ser criados serviços e carregados quando necessário. A funcionalida<strong>de</strong><strong>de</strong> gerenciamento autônomo ainda é outra característica chave do JDMK, permitindoadministrar <strong>um</strong>a gran<strong>de</strong> base instalada.3.3 COMO OPERAO JDMK opera com o JMX (Java Management Extensions) <strong>para</strong> administrarseus recursos. Para assegurar que <strong>um</strong> recurso é <strong>um</strong> recurso administrativo, é necessário tercerteza que se a<strong>de</strong>re às especificações do JMX, que fornece <strong>um</strong>a especificação <strong>para</strong>implementar recursos administrativos. São implementados recursos administrativos comoGerenciadores MBeans.Um MBean é <strong>um</strong> recurso <strong>de</strong> gerenciamento em conformida<strong>de</strong> com o padrãoJMX, que po<strong>de</strong> ser qualquer recurso que se <strong>de</strong>seja administrar. Por exemplo, <strong>um</strong>aaplicação, <strong>um</strong>a implementação <strong>de</strong> <strong>um</strong> serviço, <strong>um</strong> dispositivo, <strong>um</strong> usuário e assimsucessivamente.


51O JDMK é o primeiro produto que implementa a especificação pública <strong>para</strong> oJMX. O JMX <strong>de</strong>fine <strong>um</strong>a arquitetura, padrões <strong>de</strong> especificação, API’s, serviços <strong>para</strong>aplicação e gerenciamento <strong>de</strong> re<strong>de</strong>, tudo <strong>de</strong>ntro <strong>de</strong> <strong>um</strong>a única especificação.Uma das maiores vantagens do JDMK é que permite administrar recursos <strong>de</strong><strong>um</strong>a <strong>local</strong>ização remota. Assim, po<strong>de</strong>-se manipular objetos sobre os MBeans em <strong>um</strong> <strong>agente</strong>remoto:a) buscando <strong>um</strong> valor <strong>de</strong> atributo;b) alterando <strong>um</strong> valor <strong>de</strong> atributo.Po<strong>de</strong>-se ter todo o acesso remoto do JMX aos recursos administrativos:a) chamando <strong>um</strong>a operação;b) recebendo <strong>um</strong>a notificação espontânea emitida por <strong>um</strong> recursoadministrativo.O gerente também po<strong>de</strong> adicionar <strong>um</strong> novo recurso JMX remotamente por:a) usando classes Java existentes já carregadas no <strong>agente</strong>;b) usando classes novas carregadas em <strong>um</strong>a <strong>local</strong>ização arbitrária.O JDMK gradativamente simplifica o <strong>de</strong>senvolvimento <strong>de</strong> aplicações <strong>de</strong>gerenciamento fornecendo comunicação <strong>de</strong> multi-protocolo entre o lado do gerente e do<strong>agente</strong>. Po<strong>de</strong>m ser gerenciados dispositivos ou aplicações diretamente por <strong>um</strong> browser oupor <strong>um</strong>a aplicação SNMP existente. Protocolos adaptadores (por exemplo, HTTP/TCP,RMI, SNMP) permitem ao <strong>de</strong>senvolvedor adaptar as aplicações <strong>para</strong> o ambiente <strong>de</strong>comunicação <strong>local</strong>.Para criar novos <strong>agente</strong>s, usa-se <strong>um</strong> gerador <strong>de</strong> objeto <strong>de</strong> gerenciamento(proxygen) que vem acompanhado com o JDMK. Com esta ferramenta, po<strong>de</strong>-se criaraplicações com módulos gerados <strong>de</strong> acesso remoto que gerenciam no auxílio da


52comunicação do protocolo. Po<strong>de</strong>-se criar <strong>um</strong> objeto <strong>de</strong> procura <strong>para</strong> cada objeto JMX quese <strong>de</strong>seja administrar remotamente.O JDMK também oferece <strong>um</strong> toolkit <strong>para</strong> SNMP, <strong>para</strong> o <strong>de</strong>senvolvimento <strong>de</strong><strong>agente</strong>s e gerentes, inclusive o compilador <strong>de</strong> mibgen que encapsula o SNMP nas MIBgeradas na forma <strong>de</strong> MBeans que implementam as MIB.3.4 FERRAMENTAS AGREGADASO JDMK possui ferramentas que contribuem na especificação do JMX. Eleoferece <strong>um</strong> mecanismo baseado na Web <strong>para</strong> automaticamente utilizar a propagação <strong>de</strong>serviços <strong>de</strong> gerenciamento pela re<strong>de</strong> <strong>para</strong> os <strong>agente</strong>s.Novos serviços po<strong>de</strong>m ser adicionados e velhos serviços po<strong>de</strong>m ser removidos<strong>de</strong>pen<strong>de</strong>ndo das exigências do gerenciador. Os serviços fornecidos incluem o seguinte:monitoramento, timer, mlet e filtro ([SUN1999]).Ferramentas <strong>para</strong> criação <strong>de</strong> serviços:a) <strong>um</strong> gerenciador <strong>de</strong> gerador <strong>de</strong> objeto (proxygen) que auxilia os<strong>de</strong>senvolvedores a criar as próprias tecnologias específicas baseadas em Java <strong>para</strong> serviços<strong>de</strong> gerenciamento;b) <strong>um</strong> compilador <strong>de</strong> MIB SNMP (mibgen) com tecnologia baseada em Javaque incorpora as entradas e saídas dos MBeans. Esta ferramenta implementa as MIB,habilitando o <strong>agente</strong> JDMK a ser gerenciado por <strong>um</strong> gerente SNMP.3.4.1 CONCEITOS CHAVESSegundo ([SUN1999]), há cinco palavras -chave <strong>para</strong> <strong>de</strong>finir o gerenciamento <strong>de</strong>re<strong>de</strong> na plataforma JDMK, no qual são as seguintes: servidor <strong>de</strong> MBean, MBeans,adaptador, conectores e proxy MBeans.Segue abaixo os conceitos chaves <strong>para</strong> o JDMK:


53FIGURA 19 – CONCEITOS CHAVES PARA O JDMKFonte: SUN[1999]


544. MBEANSO nível <strong>de</strong> instr<strong>um</strong>entação JMX oferece padrões <strong>para</strong> implementar recursos <strong>de</strong>gerenciamento JMX. A instr<strong>um</strong>entação <strong>de</strong> <strong>um</strong> <strong>de</strong>terminado recurso <strong>de</strong> gerenciamento éfornecido por <strong>um</strong> ou mais Java Beans <strong>de</strong> gerenciamento ou MBeans. Um MBean é <strong>um</strong>objeto Java que trabalha com certos padrões <strong>de</strong> especificação <strong>para</strong> expor atributos eoperações ([SUN1999]).Estes atributos e operações habilitam qualquer <strong>agente</strong> JDMK <strong>para</strong> reconhecer egerenciar o MBean. Os padrões <strong>de</strong> especificação <strong>para</strong> MBeans dão ao <strong>de</strong>senvolvedorcontrole total dos recursos, dispositivos ou aplicações que serão gerenciados. Por exemplo,padrões <strong>de</strong> atributo que permitem fazer a distinção entre as proprieda<strong>de</strong>s <strong>de</strong> somente leituraou leitura e escrita em <strong>um</strong> MBean. MBeans implementam <strong>um</strong>a interface <strong>de</strong> gerenciamentoque <strong>de</strong>fine os atributos e operações acessíveis <strong>para</strong> gerenciamento.MBeans po<strong>de</strong>m gerar e po<strong>de</strong>m propagar eventos espontâneos <strong>de</strong> notificação<strong>para</strong> aplicações <strong>de</strong> gerenciamento remoto. MBeans <strong>de</strong>vem ser <strong>de</strong>senvolvidos <strong>de</strong> acordo comas regras especificadas pelo Java Management Extensions (JMX).A arquitetura <strong>de</strong> JMX permite fazer distintas operações em <strong>um</strong> <strong>agente</strong>, passandopelo seu servidor <strong>de</strong> MBean, tais como ([ODA1998]):a) listar MBeans;b) habilitar MBean <strong>para</strong> ter acesso <strong>local</strong>mente ou remotamente;c) criar novos MBeans;d) executar operações <strong>de</strong>finidas pelo MBeans;e) receber notificações emitidas por MBeans;f) mostrar a interface <strong>de</strong> gerenciamento <strong>de</strong> <strong>um</strong> MBean;g) permitir <strong>de</strong>senvolver <strong>um</strong> gerente genérico;


55h) fornecer <strong>um</strong>a visão do MBean <strong>para</strong> <strong>um</strong> protocolo específico.Um novo MBean po<strong>de</strong> ser administrado assim que seja registrado <strong>de</strong>ntro doservidor <strong>de</strong> MBean. Um MBean po<strong>de</strong> ser criado e po<strong>de</strong> ser registrado por:a) outro objeto <strong>de</strong>ntro do <strong>agente</strong>;b) <strong>um</strong>a aplicação <strong>de</strong> gerenciamento remoto que conectou ao <strong>agente</strong>.Os serviços <strong>de</strong> gerenciamento fornecidos com o JDMK são implementados comMBeans. Também po<strong>de</strong>m ser escrito os MBeans que representam objetos que se <strong>de</strong>sejaadministrar. Estes objetos po<strong>de</strong>riam incluir os recursos atuais <strong>para</strong> todos aqueles quequeiram administrar e utilizar os serviços <strong>de</strong> administração <strong>de</strong> recursos.O JDMK não impõe nenh<strong>um</strong>a restrição quanto ao <strong>local</strong> on<strong>de</strong> foi compilado eforam armazenadas as classes MBean. Elas po<strong>de</strong>m ser armazenadas em qualquer<strong>local</strong>ização especificada no CLASSPATH, variável <strong>de</strong> ambiente do <strong>agente</strong>, ou em <strong>um</strong> <strong>local</strong>remoto. Po<strong>de</strong>-se <strong>de</strong>senvolver dois tipos <strong>de</strong> MBeans ([SUN1999]):a) MBean Padrão;b) MBean Dinâmico.4.1 MBEAN PADRÃOMBeans padrão são objetos Java em conformida<strong>de</strong> com padrões <strong>de</strong>especificação <strong>de</strong>rivados do mo<strong>de</strong>lo <strong>de</strong> componentes JavaBeans. Os MBeans padrão lhepermitem <strong>de</strong>finir sua interface <strong>de</strong> gerenciamento como <strong>um</strong>a Interface <strong>de</strong> Java. Os métodos<strong>para</strong> leitura e escrita e os atributos do MBean que po<strong>de</strong>m chamar suas operações são<strong>de</strong>scritos nesta interface <strong>de</strong> gerenciamento.São <strong>de</strong>finidos MBeans padrão estáticos, aqueles em que os elementos são<strong>de</strong>finidos na interface <strong>de</strong> gerenciamento no momento da compilação e não po<strong>de</strong>m seralterados em tempo <strong>de</strong> execução. Eles são o tipo mais rápido e mais fácil <strong>de</strong> MBeans <strong>para</strong>


56implementar quando se <strong>de</strong>seja criar novos MBeans <strong>de</strong> gerenciamento <strong>de</strong> recursos em que aestrutura <strong>de</strong> dados é previamente <strong>de</strong>finida.4.2 MBEAN DINÂMICOMBeans dinâmicos permitem a <strong>um</strong>a aplicação <strong>de</strong> gerenciamento <strong>de</strong>scobrir ainterface <strong>de</strong> gerenciamento <strong>de</strong> <strong>um</strong> recurso em tempo <strong>de</strong> execução, ele oferece <strong>um</strong> modosimples <strong>para</strong> criar <strong>um</strong> novo MBean <strong>utilizando</strong> recursos <strong>de</strong> MBeans padrões. MBeansdinâmicos são incorporados nas estruturas <strong>de</strong> gerenciamento que mudam com o passar dotempo [SUN1999].4.3 SERVIDOR MBEANO servidor <strong>de</strong> MBean é <strong>um</strong> registro <strong>para</strong> os recursos <strong>de</strong> gerenciamento do JMXnos quais são expostas as operações <strong>de</strong> gerenciamento <strong>de</strong> <strong>um</strong> <strong>agente</strong>. Ele oferece <strong>um</strong>gerenciamento <strong>de</strong> serviços <strong>para</strong> manipular os recursos JMX <strong>de</strong> gerenciamento através <strong>de</strong>protocolos in<strong>de</strong>pen<strong>de</strong>ntes. Todas as operações <strong>de</strong> gerenciamento executadas nestes recursossão feitos pela interface do servidor <strong>de</strong> gerenciamento MBean. Os objetos po<strong>de</strong>m sercriados e gerenciados <strong>de</strong>ntro do servidor <strong>de</strong> MBean, assim, tornando-os visível <strong>para</strong>aplicações <strong>de</strong> gerenciamento.O servidor <strong>de</strong> MBean inclui <strong>um</strong>a biblioteca <strong>de</strong> <strong>agente</strong> que po<strong>de</strong> reutilizarserviços na forma <strong>de</strong> objetos <strong>de</strong> gerenciamento, quando especificado pelo JMX. Estesserviços incluem mlet, timer, monitoramento e filtro.Os objetos po<strong>de</strong>m ser registrados no servidor <strong>de</strong> MBean:a) <strong>um</strong>a própria aplicação <strong>de</strong> <strong>agente</strong>;b) <strong>um</strong>a aplicação <strong>de</strong> gerenciamento remoto (por <strong>um</strong> conector ou <strong>um</strong> adaptador<strong>de</strong> protocolo).Qualquer recurso <strong>de</strong> gerenciamento JMX que queira ter acesso a operações <strong>de</strong>gerenciamento <strong>de</strong>ve ser registrado no servidor <strong>de</strong> MBean. Este MBean precisa ser


57i<strong>de</strong>ntificado com <strong>um</strong> nome <strong>de</strong> objeto. O gerente e o <strong>agente</strong> usam este nome <strong>de</strong> objeto <strong>para</strong>i<strong>de</strong>ntificar qual objeto irá executar <strong>um</strong>a operação <strong>de</strong> gerenciamento. É possível termúltiplos servidores MBean <strong>de</strong>ntro do mesmo <strong>agente</strong> JDMK.4.4 PROXY MBEANSSegundo [SUN1999], <strong>um</strong> Proxy MBean representa a visão <strong>de</strong> gerente do MBeangerenciado on<strong>de</strong> o gerente foi <strong>de</strong>senvolvido usando o servidor <strong>de</strong> Interface MBean remoto.Esta interface faz a funcionalida<strong>de</strong> do servidor <strong>de</strong> MBean disponível na aplicação <strong>de</strong>gerenciamento remoto e <strong>de</strong>ixa <strong>para</strong> o gerente interagir diretamente com o servidor <strong>de</strong>MBean do <strong>agente</strong>.O gerente tem acesso a <strong>um</strong> MBean executando operações no Proxy MBean,on<strong>de</strong> estes são propagados no MBean. Estas operações po<strong>de</strong>m ser:a) buscar e fixar atributos;b) executar operações;aplicação.c) receber notificações espontâneas emitidas pelo MBean ao gerente remoto <strong>de</strong>O JDMK possui <strong>um</strong> compilador chamado proxygen que po<strong>de</strong> ser utilizado <strong>para</strong>gerar <strong>um</strong> proxy MBean a partir <strong>de</strong> <strong>um</strong> MBean. Proxy MBeans são i<strong>de</strong>ais quando asinterfaces <strong>de</strong> gerenciamento não precisam ser alteradas em tempo real, ou seja, on<strong>de</strong> osatributos e operações disponíveis são estáveis.4.4.1 PROXY MBEANS GENÉRICO (PMG)Uma Proxy MBean Genérico age da mesma maneira como <strong>um</strong> Proxy MBean.Porém, o PMG faz com que ele utilize o compilador <strong>de</strong> proxygen como se fosse o ProxyMBeans, mas simplesmente criando <strong>um</strong>a instância nova <strong>de</strong> <strong>um</strong>a Proxy MBean Genérica.Proxy MBeans Genéricos são i<strong>de</strong>ais quando <strong>de</strong>seja-se executar operações em<strong>um</strong> MBean e quando sabe-se que os atributos e operações daquele MBean mudarão. Isto


58faz com que o PMG seja a solução perfeita <strong>para</strong> sistemas <strong>de</strong> gerenciamento dinâmicos emque as proprieda<strong>de</strong>s <strong>de</strong> <strong>um</strong> MBean po<strong>de</strong>m mudar em tempo <strong>de</strong> execução.Segundo [SUN1999], o PMG po<strong>de</strong> ser usado <strong>para</strong> administrar qualquer MBeanpadrão ou MBean dinâmico.4.5 CONECTORES E ADAPTADORES DE PROTOCOLOSConectores e adaptadores <strong>de</strong> protocolos permitem a <strong>um</strong> <strong>agente</strong> ter acesso eadministrar aplicações <strong>de</strong> administração remotamente. Conectores conectam aplicações <strong>de</strong>administração com o servidor <strong>de</strong> MBean e permitem aos MBeans serem instanciados eadministrados remotamente. Todo conector contém a mesma interface <strong>de</strong> administraçãoremota, mas utilizam <strong>um</strong> protocolo diferente <strong>para</strong> o qual permite aplicações <strong>de</strong>administração remota. Embora o <strong>agente</strong> tenha <strong>um</strong> protocolo específico, po<strong>de</strong>m serconectados <strong>um</strong> ou mais clientes ao servidor <strong>de</strong> MBean ([SUN1999]).O JDMK contém conectores <strong>para</strong> a maioria dos protocolos principais da internet(por exemplo, HTTP/TCP e RMI).Um conector está composto <strong>de</strong> duas partes:a) <strong>um</strong> servidor <strong>de</strong> conexão no lado <strong>de</strong> <strong>agente</strong>;b) <strong>um</strong> cliente <strong>de</strong> conexão no lado <strong>de</strong> gerente.A interface do servidor <strong>de</strong> MBean remoto é implementada pelo cliente <strong>de</strong>conexão. Conectores permitem transpor aplicações <strong>de</strong> administração sobre <strong>um</strong> <strong>local</strong> nogerente, oferecendo o mesmo nível <strong>de</strong> funcionalida<strong>de</strong> ao <strong>agente</strong>.Protocolos adaptadores têm apenas <strong>um</strong> componente <strong>de</strong> servidor e contém aconexão entre <strong>um</strong>a aplicação <strong>de</strong> administração remota e <strong>um</strong> <strong>agente</strong>, através <strong>de</strong> <strong>um</strong>protocolo <strong>de</strong> re<strong>de</strong> específico. Do lado do gerente, po<strong>de</strong>-se ver e administrar qualquerMBean. Isto po<strong>de</strong> ser feito tendo acesso à interface do servidor <strong>de</strong> MBean diretamenteatravés <strong>de</strong> <strong>um</strong> <strong>de</strong>terminado protocolo.


59Um cliente do adaptador SNMP é <strong>um</strong> gerente SNMP. Além disso, o JDMKfornece <strong>um</strong> toolkit <strong>de</strong> SNMP que lhe permite gerar MBeans <strong>de</strong> acordo com MIB padrão ouproprietárias, habilitando novos <strong>agente</strong>s baseados em tecnologia que po<strong>de</strong>m ser integradosem infra-estruturas <strong>de</strong> re<strong>de</strong>s existentes, incluindo produtos <strong>de</strong> administração baseados emSNMP.<strong>para</strong>:Conectores e adaptadores <strong>de</strong> protocolo habilitam aplicações <strong>de</strong> administraçãoa) procurar MBeans existente pelos nomes <strong>de</strong> objetos;b) buscar ou acrescentar atributos <strong>de</strong> instâncias <strong>de</strong> MBean existentes;c) executar operações em instâncias <strong>de</strong> MBean existentes;d) instanciar <strong>um</strong> MBean e registrar a instância <strong>de</strong> <strong>um</strong> novo MBean;HTML).e) receber notificações <strong>de</strong> MBeans conhecidas (com exceção do adaptadorSegundo [SUN1999], porém, <strong>um</strong> <strong>agente</strong> po<strong>de</strong> incluir qualquer número <strong>de</strong>conectores ou adaptadores <strong>de</strong> protocolo, possibilitam a administração remota <strong>para</strong> muitosgerentes por protocolos diferentes. Proxys são utilizados em MBeans ao lado <strong>de</strong> gerentes<strong>para</strong> executar operações <strong>de</strong> administração nos MBeans correspon<strong>de</strong>ntes aos <strong>agente</strong>s.Estes MBeans são registrados com o servidor <strong>de</strong> MBean que é in<strong>de</strong>pen<strong>de</strong>nte <strong>de</strong>protocolo. Nem conectores nem adaptadores <strong>de</strong> protocolo são inicializadosautomaticamente quando são criados; é necessário inicializá-lo manualmente.4.6 MODELO DE NOTIFICAÇÃO DO JMXA interface <strong>de</strong> administração <strong>de</strong> <strong>um</strong> MBean permite a <strong>um</strong> <strong>agente</strong> <strong>de</strong> MBeanexecutar controle e operações <strong>de</strong> configuração nos recursos <strong>de</strong> administração. O mo<strong>de</strong>lo <strong>de</strong>notificação do JMX permite <strong>para</strong> os MBeans enviar notificações <strong>de</strong> broadcast <strong>para</strong> o


60administrador, aplicações <strong>de</strong> administração e outros objetos registrados que ficaremesperando <strong>um</strong>a notificação <strong>de</strong> <strong>um</strong> broadcast <strong>de</strong> <strong>um</strong> MBean.FIGURA 20 - MECANISMO DE NOTIFICAÇÃO REMOTAFonte: [SUN1999]Também po<strong>de</strong> ser adicionado <strong>um</strong> ouvinte no servidor <strong>de</strong> MBean remoto ou em<strong>um</strong> Proxy MBean. Uma maneira <strong>para</strong> se adicionar <strong>um</strong> ouvinte <strong>para</strong> o gerente po<strong>de</strong> serchamando a operação <strong>de</strong> addNotificationListener apropriada <strong>para</strong> Proxys MBean. Isto vaitransmitir <strong>um</strong>a chamada <strong>para</strong> o <strong>agente</strong> e <strong>um</strong> ouvinte <strong>de</strong> protocolo <strong>de</strong>pen<strong>de</strong>nte, fazendo comque o <strong>agente</strong> verifique a chamada recebida, criando no servidor <strong>de</strong> MBean (Figura 20). Noprotocolo <strong>de</strong>pen<strong>de</strong>nte, o ouvinte gerado é administrado pelo servidor. Está é a principalrotina, <strong>de</strong> enviar notificações ao longo da re<strong>de</strong> tanto <strong>para</strong> o <strong>agente</strong> como <strong>para</strong> o gerente, queusam <strong>um</strong> protocolo especificado.4.7 O MECANISMO PUSHPo<strong>de</strong> ser optado em utilizar o mecanismo Push <strong>para</strong> enviar notificações <strong>de</strong> <strong>um</strong><strong>agente</strong> <strong>para</strong> <strong>um</strong> gerente. Quando os conectores utilizam o mecanismo Push o servidor <strong>de</strong>


61conexão reenvia as notificações <strong>para</strong> o cliente <strong>de</strong> conexão assim que eles sejam emitidospelos MBeans.Quando <strong>um</strong> MBean, ao lado do <strong>agente</strong>, emite <strong>um</strong>a notificação, o HTTP ou oadaptador RMI remete esta notificação <strong>para</strong> o cliente <strong>de</strong> conexão ao gerente.4.8 O MECANISMO PULLPo<strong>de</strong> ser optado em utilizar o mecanismo Pull quando seja necessário enviarnotificações <strong>de</strong> <strong>um</strong> <strong>agente</strong> <strong>para</strong> <strong>um</strong> gerente. Isto po<strong>de</strong> acontecer quando o <strong>agente</strong> estáimpossibilitado <strong>de</strong> conectar-se a <strong>um</strong> gerente. Por exemplo, se há <strong>um</strong> firewall entre o <strong>agente</strong>e o gerente.Os Pull acontecem quando o servidor <strong>de</strong> conexão do HTTP/RMI do <strong>agente</strong> éinstruído pelo gerente <strong>para</strong> tentar buscar notificações, assim, o gerente <strong>de</strong>ci<strong>de</strong> quando ecom que freqüência quer recobrar as notificações. Por exemplo, o Pull po<strong>de</strong>ria tentaradquirir notificações a cada trinta segundos ou a todo minuto.


625. CRIANDO UM AGENTE SNMPPara <strong>de</strong>senvolvimento da aplicação do Agente SNMP, no gerenciamento <strong>de</strong>dispositivos <strong>de</strong> re<strong>de</strong>, foi utilizada a plataforma JDMK. Para a utilização do JDMK énecessário que se converta a MIB SNMP a ser utilizada em <strong>um</strong> formato específicorequerido pela ferramenta: <strong>um</strong> conjunto <strong>de</strong> MBeans. Os MBeans são objetos Java (JavaBeans <strong>de</strong> gerenciamento) que contém as proprieda<strong>de</strong>s dos objetos do mo<strong>de</strong>lo <strong>de</strong> informação<strong>de</strong>finido na MIB SNMP.Para gerar o código dos MBeans que representam <strong>um</strong>a MIB é necessário utilizara ferramenta Mibgen. A ferramenta Mibgen cria a estrutura <strong>de</strong> get e set utilizada <strong>para</strong> ler ouescrever variáveis internas.O SNMP interage com <strong>um</strong>a MIB personalizada <strong>para</strong> implementar <strong>um</strong> <strong>agente</strong>compatível com SNMPv1 e SNMPv2. Também fornece os mecanismos <strong>para</strong> enviar Traps eimplementar o controle <strong>de</strong> acesso comunitário.5.1 PROCESSO DE DESENVOLVIMENTO DE UMA MIBO processo <strong>de</strong> implementação <strong>de</strong> <strong>um</strong>a MIB SNMP <strong>para</strong> ser utilizada peloambiente <strong>de</strong> <strong>de</strong>senvolvimento <strong>de</strong> aplicações <strong>de</strong> gerência JDMK é composto por <strong>um</strong> grupo<strong>de</strong> procedimentos bem específicos, como po<strong>de</strong> ser visto na Figura 21.


63FIGURA 21 – PROCESSO DE DESENVOLVIMENTO DE UMA MIBM IBS N M PM IB JDM K(C onjunto <strong>de</strong> M beans)Im p le m e nta r o acesso dosM b eans aos recursos reaisdo Sistema gerenciadoInc luir a M IB JDMK noc ó d igo do gerenteInc luir a M IB JDMK noM b ean S erver ( Núcleo doAgente JDM K )Inc luir as funcionalid a d e sd e gerência requeridas eprocesso <strong>de</strong> interação como <strong>agente</strong>C o m p ila r o código fonteJ a va e executar o <strong>agente</strong>JDM K resultanteC o m p ila r o código fonteJ a va e executar o gerenteJDM K resultanteNas próximas sessões será discutido e <strong>de</strong>talhado cada <strong>um</strong> dos procedimentosenvolvidos no processo <strong>de</strong> <strong>de</strong>senvolvimento <strong>de</strong> <strong>um</strong>a aplicação <strong>agente</strong> <strong>utilizando</strong> o JDMKcomo foi representado esquematicamente na Figura 21 (a aplicação gerente é <strong>de</strong>senvolvida<strong>de</strong> forma equivalente).Será <strong>de</strong>scrito a seguir o processo <strong>de</strong> compilação da MIB <strong>para</strong> convertê-la <strong>para</strong> oformato requerido pelo <strong>agente</strong> JDMK. Neste processo será utilizado o subconjunto da MIB-II <strong>de</strong>finida por RFC1213.5.1.1 GERADOR DE MIB MBEANSPara obter o conjunto <strong>de</strong> MBeans constituintes da MIB JDMK a partir da MIBSNMP utiliza-se a ferramenta Mibgen.Para executar a ferramenta <strong>de</strong> Mibgen, após instalar a Plataforma JDMK, <strong>de</strong>veseestar no diretório on<strong>de</strong> está o seu arquivo <strong>de</strong> especificação da MIB e executar o s eguintecomando:$mibgen -d. mib_II_TCC.txtIsto gerará os seguintes arquivos no diretório atual:


64a) o MBean (por herança) <strong>para</strong> a MIB:• RFC1213_MIB.Java.b) o MBean e sua classe metadata <strong>para</strong> o grupo SNMP:• Snmp.Java;• SnmpMBean.java;• SnmpMeta.Java.c) o MBean e sua classe metadata <strong>para</strong> o grupo Sistema:• System.Java;• SystemMBean.java;• SystemMeta.java.d) o MBean e sua classe metadata <strong>para</strong> o grupo Interfaces:• Interfaces.Java;• InterfacesMBean.Java;• InterfacesMeta.Java.e) a classe que representa <strong>um</strong>a tabela <strong>de</strong> interface, e o MBean que representaentradas na tabela:• TableIfTable.Java;• IfEntry.Java;• IfEntryMBean.Java;• IfEntryMeta.Java.f) classes que representam tipos en<strong>um</strong>erados que são utilizados nestes grupos eentradas:• En<strong>um</strong>SnmpEnableAuthenTraps.Java;• En<strong>um</strong>IfOperStatus.Java;• En<strong>um</strong>IfAdminStatus.Java;• En<strong>um</strong>IfType.Java.g) tabela <strong>de</strong> OID <strong>para</strong> representar a <strong>de</strong>finição <strong>de</strong> nome <strong>de</strong> todas as variáveis <strong>de</strong>MIB:• RFC1213_MIBOidTable.java


65O MBean com o nome da MIB é apenas a classe administrativa central <strong>para</strong>administrar os outros MBeans que foram implementados na MIB. Todos os outros MBeanscontêm as variáveis SNMP como atributos da interface <strong>de</strong> administração ([SUN1999]). Aferramenta Mibgen gera MBeans padrões <strong>para</strong> a MIB, assim são implementados métodosindividuais como get e set <strong>para</strong> cada <strong>um</strong> dos atributos em função das suas permissões <strong>de</strong>acesso.É necessário que sejam implementados os métodos get e set <strong>para</strong> ler e escreverdados.Consi<strong>de</strong>rando que o SNMP não apóia ações em MIB, as únicas operações nestesMBeans são implementações <strong>de</strong> checagem do set SNMP solicitando variáveis que possamser alteradas. Operações po<strong>de</strong>m ser adicionadas, mas o gerente SNMP não po<strong>de</strong>rá teracesso. Porém, outros gerentes po<strong>de</strong>rão chamar estas operações se estiverem conectadospor outro protocolo.5.2 IMPLEMENTANDO OS RECURSOS DA MIBA implementação da MIB implica no <strong>de</strong>senvolvimento <strong>de</strong> <strong>um</strong> conjunto <strong>de</strong>classes que implementam as interfaces JAVA geradas como resultado da compilação daMIB SNMP através do Mibgen.O trabalho só implementa <strong>um</strong>a parte dos métodos <strong>de</strong> acesso aos atributoscontidos no RFC1213. Estas implementações são contidas nas classes com o sufixo <strong>de</strong>“Impl”. Essas classes foram geradas através do Mibgen <strong>de</strong> forma que po<strong>de</strong>m ser alteradas<strong>para</strong> sua personalização.Segue abaixo <strong>um</strong> apanhado da implementação mostrado no <strong>agente</strong>:a) InterfaceImpl.java - adiciona <strong>um</strong>a nova entrada <strong>de</strong> notificação <strong>para</strong> o objeto <strong>de</strong>IfTable, então esta cria mais duas novas entradas da tabela com variáveis que os adicionana tabela, associando com:• TableEntryListenerImpl.java – cria o listener <strong>para</strong> a entrada da tabela <strong>de</strong>notificações <strong>de</strong> eliminação: imprime os valores da entrada na nova tabela;• IfEntryImpl.java – implementa a tabela <strong>de</strong> entrada e fornece <strong>um</strong> métodointerno <strong>para</strong> troca <strong>de</strong> variável <strong>de</strong> OperStatus que gera <strong>um</strong> trap. Este método não estáexposto na interface do MBean, assim está só disponível no código <strong>de</strong>sta aplicação <strong>de</strong><strong>agente</strong>.


66b) SnmpImpl.java - inicializa e implementa variáveis do grupo SNMP, muitas<strong>de</strong>stas são variáveis estáticas do <strong>agente</strong> SNMP. Assim chama-se os métodos <strong>de</strong> get doobjeto adaptador SNMP <strong>para</strong> retornar as informações;c) SystemImpl.java - inicializa as variáveis <strong>de</strong> grupo <strong>de</strong> sistema.O SnmpImpl.java e arquivos do SystemImpl.java fornecem código que po<strong>de</strong> serutilizado <strong>para</strong> implementar posteriormente estes grupos SNMP comuns.5.2.1 COMPILANDO O MBEANS E AGENTESPara compilar os arquivos .java, o classpath têm que conter o diretório atual (.),<strong>de</strong>ve-se criar <strong>um</strong>a pasta patchfiles na pasta atual e copiar o arquivo RFC1213_MIB.javacriado <strong>para</strong> a pasta patchfiles. Em seguida executa-se o seguinte comando:$ javac -classpath classpath -d . *.java5.3 O ADAPTADOR DE PROTOCOLO SNMPCom a MIB implementada na forma <strong>de</strong> MBeans, a aplicação <strong>de</strong> <strong>agente</strong> necessita<strong>de</strong> <strong>um</strong> adaptador <strong>de</strong> protocolo SNMP <strong>para</strong> funcionar como <strong>um</strong> <strong>agente</strong> SNMP.Consi<strong>de</strong>rando-se que o adaptador do protocolo SNMP também é <strong>um</strong> MBean, os mesmoMBean também po<strong>de</strong> ser criado e iniciado dinamicamente em seu <strong>agente</strong> por <strong>um</strong> gerenteconectado ou pelo próprio adaptador HTML. Conforme quadro 01, segue abaixo o códigodo Agente SNMP no qual foi implementado o adaptador <strong>de</strong> protocolo SMNP.QUADRO 01 - APLICAÇÃO DO AGENTE SNMPpublic class Agent {static SnmpAdaptadorServer <strong>snmp</strong>Adaptador = null;public static void main(String args[]) {MBeanServer server;ObjectName htmlObjName;ObjectName <strong>snmp</strong>ObjName;ObjectName mibObjName;ObjectName trapGeneratorObjName;int htmlPort = 8082;int <strong>snmp</strong>Port = 8085;[...]try {server = MBeanServerFactory.createMBeanServer();String domain = server.getDefaultDomain();// Cria <strong>um</strong> adaptador HTML//htmlObjName = new ObjectName( domain +


67":class=HtmlAdaptadorServer,protocol=html,port=" + htmlPort);HtmlAdaptadorServer htmlAdaptador = new HtmlAdaptadorServer(htmlPort);server.registerMBean(htmlAdaptador, htmlObjName);htmlAdaptador.start();// Cria <strong>um</strong> adaptador SNMP//<strong>snmp</strong>ObjName = new ObjectName(domain +":class=SnmpAdaptadorServer,protocol=<strong>snmp</strong>,port=" + <strong>snmp</strong>Port);<strong>snmp</strong>Adaptador = new SnmpAdaptadorServer(<strong>snmp</strong>Port);server.registerMBean(<strong>snmp</strong>Adaptador, <strong>snmp</strong>ObjName);<strong>snmp</strong>Adaptador.start();// Envia <strong>um</strong> trap SNMP (porta utilizada = <strong>snmp</strong>Port+1)// Trap’s sao <strong>de</strong>finidas no arquivo ACL//<strong>snmp</strong>Adaptador.setTrapPort(new Integer(<strong>snmp</strong>Port+1));<strong>snmp</strong>Adaptador.sendV1Trap(0, 0, null);// Cria o MIB-II (RFC 1213) e adiciona no MBean Server//mibObjName = new ObjectName("<strong>snmp</strong>:class=RFC1213_MIB");RFC1213_MIB mib2 = new RFC1213_MIB();// O MBean ira registrar todo o grupo e tabela <strong>de</strong> entradas doMBeansserver.registerMBean(mib2, mibObjName);// Une o adaptador SNMP <strong>para</strong> a MIBmib2.setSnmpAdaptadorName(<strong>snmp</strong>ObjName);[...]} catch (Exception e) {e.printStackTrace();}}// Chama a referencia get no objeto adaptador SNMPstatic public SnmpAdaptadorServer getSnmpAdaptador() {return <strong>snmp</strong>Adaptador;}}5.3.1 EXECUTANDO O ADAPTADOR SNMPO adaptador SNMP é executado da mesma forma que se executa o adaptadorHipertext Markup Language (HTML). Primeiramente cria-se <strong>um</strong> nome <strong>de</strong> objeto <strong>para</strong> oMBean, então instancia-se a classe com <strong>um</strong> construtor que permite especificar <strong>um</strong>a portanão padrão, registra-se o MBean como servidor MBean e então executa-se o adaptador <strong>para</strong>ativá-lo.Como valor padrão, o protocolo SNMP utiliza a porta 161. Consi<strong>de</strong>rando queoutras aplicações po<strong>de</strong>m estar usando este porta, o <strong>agente</strong> utiliza a porta 8085. Quandoconecta-se a este <strong>agente</strong> o gerente SNMP precisará especificar este número <strong>de</strong> porta.5.3.2 CRIANDO A MIB


68A aplicação do <strong>agente</strong> cria e administra <strong>um</strong>a MIB, o subconjunto <strong>de</strong> MIB-II.Para isso instancia-se o correspon<strong>de</strong>nte RFC1213_MIB com os MBeans que foram geradospela ferramenta Mibgen.O processo <strong>de</strong> registro <strong>de</strong>ixa instanciar o MBean e registrar outros MBeans querepresentam os grupos da MIB e as entradas <strong>de</strong> suas tabelas. A configuração <strong>de</strong> todos estesMBeans, ao término do registro, compõe a representação da MIB na forma <strong>de</strong> MBeans.5.3.3 LIGANDO MBEANS DA MIBO MBean principal <strong>de</strong> <strong>um</strong>a MIB <strong>de</strong>ve ser ligado explicitamente à instância doadaptador SNMP. O adaptador SNMP não interage com qualquer outro MBean nem com oservidor <strong>de</strong> MBean ([SUN1999]).Segundo ([SUN1999]), <strong>de</strong>pois que <strong>um</strong>a MIB for instanciada, <strong>de</strong>ve-se fixar osatributos do SNMPAdaptadorName no MBean principal <strong>para</strong> que seja ligado ao adaptadorSNMP. Este método po<strong>de</strong> ser chamado diretamente <strong>de</strong> setSnmpAdaptadorName, se oMBean da MIB foi registrado no servidor <strong>de</strong> MBean. Deste modo, o adaptador SNMP terá<strong>um</strong>a referência <strong>de</strong> toda as MIB que tem que exibir.No processo que liga o adaptador SNMP e a raiz OID da MIB, o adaptador usaeste OID <strong>para</strong> <strong>de</strong>terminar quais variáveis são implementadas na MIB correspon<strong>de</strong>nte. Paraque o adaptador SNMP solucione <strong>um</strong> pedido em <strong>um</strong> <strong>de</strong>terminado OID, as raízes OID <strong>de</strong>todas as MIB <strong>de</strong>vem ser distintas. Isto implica que nenh<strong>um</strong>a raiz OID po<strong>de</strong> ser igual a outroou po<strong>de</strong> ser <strong>um</strong>a sub-ca<strong>de</strong>ia <strong>de</strong> outro.Embora o adaptador SNMP possa ser registrado no servidor <strong>de</strong> MBean, oadaptador só faz MIB visíveis <strong>para</strong> gerentes SNMP. O gerente SNMP está limitado por seuprotocolo, pois não po<strong>de</strong> tirar total proveito <strong>de</strong> <strong>um</strong> <strong>agente</strong> JDMK pela MIB básica, e nãotem acesso a quaisquer outros MBeans.5.3.4 TENDO ACESSO AO MBEAN DA MIBUma vez que o MBean que representa <strong>um</strong>a MIB foi instanciado e ligou-se como adaptador SNMP, a MIB passa a ser acessada através do adaptador SNMP. GerentesSNMP po<strong>de</strong>m enviar pedidos <strong>para</strong> operar os conteúdos da MIB. O adaptador SNMPinterpreta os pedidos <strong>de</strong> administração SNMP, executa a operação no MBean


69correspon<strong>de</strong>nte e retorna a resposta SNMP <strong>para</strong> o gerente. O adaptador <strong>de</strong> protocolo SNMPé compatível com SNMPv1 e SNMPv2, com a exceção <strong>de</strong> InformRequest.A vantagem <strong>de</strong> ter <strong>um</strong> <strong>agente</strong> SNMP n<strong>um</strong> JDMK é que se po<strong>de</strong> usar os outrosprotocolos <strong>de</strong> comunicações <strong>para</strong> interagir com MIB e administrar o adaptador SNMP. No<strong>agente</strong>, a MIB que foi registrada po<strong>de</strong> ser visualizada pelo gerente da re<strong>de</strong> os seus MBeanscustomizados em <strong>um</strong> navegador <strong>de</strong> re<strong>de</strong> pelo adaptador <strong>de</strong> protocolo HTML.Se o <strong>agente</strong> incluir outros conectores nas aplicações <strong>de</strong> administração, po<strong>de</strong>riamser conectados ao <strong>agente</strong> e também po<strong>de</strong>riam administrar a MIB e o adaptador SNMP. Umgerente não-SNMP po<strong>de</strong> instanciar novos objetos MIB e ligá-los ao adaptador SNMP eoperar os atributos fornecidos nas operações da MIB.Os gerentes não-SNMP po<strong>de</strong>m operar as variáveis <strong>de</strong> <strong>um</strong>a MIB, po<strong>de</strong>m adquirire po<strong>de</strong>m fixar valores embora qualquer gerente SNMP também passa ter este tipo <strong>de</strong> acessopelo adaptador SNMP.5.3.5 ADMINISTRANDO O ADAPTADOR SNMPGerentes não-SNMP também po<strong>de</strong>m controlar o <strong>agente</strong> SNMP pelo MBean doadaptador SNMP. Como as outras comunicações do MBean, a porta e outros atributospo<strong>de</strong>m ser modificados pelo adaptador SNMP quando ele estiver <strong>para</strong>do. Po<strong>de</strong>-se tambémadquirir informação sobre seu estado, <strong>para</strong>do ou reiniciado <strong>para</strong> controlar quando estiveron-line. São <strong>de</strong>finidos estes atributos administrativos e operações na interface <strong>de</strong>CommunicatorServerMBean.O Servidor do adaptador SNMP também implementa oSnmpAdaptadorServerMBean que conecta <strong>para</strong> <strong>de</strong>finir sua informação operacional. Ogrupo SNMP <strong>de</strong> MIB-II <strong>de</strong>fine certas variáveis estáticas que os <strong>agente</strong>s SNMP tem quemostrar. Por exemplo, o adaptador SNMP fornece métodos <strong>para</strong> getSnmpInPkts egetSnmpOutBadValues. Gerentes não-SNMP po<strong>de</strong>m ler estas variáveis como atributos doadaptador SNMP MBean.Segundo [SUN1999], o adaptador SNMP também fornece outra informaçãooperacional que não é disponível aos gerentes SNMP. Por exemplo, o ActiveClientCount eServedClientCount no qual são relatório <strong>de</strong> atributos <strong>de</strong> somente leitura do gerente SNMP<strong>de</strong> conexões <strong>para</strong> este <strong>agente</strong>. Atributos <strong>de</strong> leitura e escrita do BufferSize que permite mudar


70o tamanho da mensagem do buffer quando o adaptador estiver <strong>para</strong>do. O adaptador MBeantambém fornece operações <strong>para</strong> enviar Traps ou implementar sua própria segurança.5.4 EXECUTANDO O AGENTE SNMPDepois <strong>de</strong> construir o Agente SNMP <strong>de</strong>scrito anteriormente, <strong>para</strong> executar o<strong>agente</strong> <strong>de</strong>ve-se executar o seguinte comando na sua pasta <strong>de</strong> implementação, conforme aFigura 22:$ java AgentFIGURA 22 – EXECUTANDO O AGENTE SNMPAgora esta criado o acesso ao adaptador <strong>de</strong> HTML <strong>de</strong>ste <strong>agente</strong> apontando <strong>um</strong>navegador <strong>de</strong> re<strong>de</strong> <strong>para</strong> a seguinte URL: http://<strong>local</strong>host:8082. Pelo adaptador HTML,po<strong>de</strong>-se ver os MBeans que representam a MIB (Figura 23):FIGURA 23 – ACESSANDO O AGENTE VIA PROTOCOLO HTMLa) a classe RFC1213_MIB MBean do domínio SNMP é a classe principal daMIB. Nela há <strong>um</strong> nome e a informação sobre o adaptador SNMP <strong>para</strong> o qual o MBean éconectado;


71b) o domínio RFC1213_MIB contém os MBeans <strong>de</strong> cada grupo;c) o domínio <strong>de</strong> ifTable contém as entradas das tabelas <strong>de</strong> interface.Em quaisquer <strong>de</strong>stes MBeans, po<strong>de</strong>-se escrever novos valores nos campos <strong>de</strong>texto <strong>de</strong> atributos fornecidos e então po<strong>de</strong>-se selecionar o botão <strong>de</strong> “Apply”. Estaconfiguração fixa a variável correspon<strong>de</strong>nte ao SNMP, e <strong>de</strong>pois disso, os gerentes SNMPverão o novo valor.FIGURA 24 – INTERAGINDO COM O AGENTE SNMP5.4.1 ENVIANDO TRAPSA aplicação <strong>de</strong> <strong>agente</strong> SNMP também <strong>de</strong>monstra como o <strong>agente</strong> po<strong>de</strong> enviarTraps. Personalizando a classe IfEntryImpl po<strong>de</strong>-se fornecer <strong>um</strong> método que troca avariável <strong>de</strong> IfOperStatus e enviar <strong>um</strong> Trap.Alterando o código gerado, po<strong>de</strong>-se fazer com que <strong>um</strong>a entida<strong>de</strong> do <strong>agente</strong>troque o estado <strong>de</strong> operação e assim a variável <strong>de</strong> MIB será atualizada e <strong>um</strong> Trap seráenviada aos gerentes SNMP.O quadro 02 contém o código <strong>para</strong> enviar <strong>um</strong> trap pelo adaptador SNMP.


72QUADRO 02 - ENVIA UMA TRAP NA CLASSE DE IFENTRYIMPLpublic void switchifOperStatus() {// implementa a troca das chamadas indiretas sendTrap[...]}// Metodo <strong>de</strong> chamada apos a varivel estiver trocada// Po<strong>de</strong> ser chamado com o padrao ==2 (up) ou 3 (down ou testing)public void sendTrap(int generic) {SnmpAdaptadorServer <strong>snmp</strong>Adaptador = null;// Devolve a referencia do protocolo SNMP atraves// do metodo statico do Agente ou da classe StandAloneSnmpAgent<strong>snmp</strong>Adaptador = Agent.getSnmpAdaptador();if (<strong>snmp</strong>Adaptador == null) {SNMPAdaptador = StandAloneSnmpAgent.getSnmpAdaptador();}if (<strong>snmp</strong>Adaptador == null) {return;}Vector varBindList = new Vector();// IfIn<strong>de</strong>x e a entrada da tabela IFSnmpOid oid1 = new SnmpOid("1.3.6.1.2.1.2.2.1.1." + IfIn<strong>de</strong>x);SnmpInt value1 = new SnmpInt(IfIn<strong>de</strong>x);SnmpVarBind varBind1 = new SnmpVarBind(oid1, (SnmpValue)value1);varBindList.addElement(varBind1);try {SNMPAdaptador.sendV1Trap(generic, 0, varBindList);} catch (Exception e) {e.printStackTrace();}}Consi<strong>de</strong>rando que o método <strong>de</strong> sendTrap é executado em <strong>um</strong>a linha diferente,ele precisa adquirir <strong>um</strong>a referência <strong>para</strong> a instância do adaptador SNMP, on<strong>de</strong> sãochamados <strong>de</strong> métodos estáticos <strong>de</strong>rivados da nossa implementação do <strong>agente</strong>. Este código éespecífico <strong>de</strong>stes <strong>agente</strong>s e é apenas <strong>um</strong> exemplo <strong>de</strong> como restaurar esta informação.Consi<strong>de</strong>rando que nosso programa não tem nenh<strong>um</strong> status real <strong>de</strong> operação,então criou-se a classe LinkTrapGenerator que trocará o estado periodicamente. É <strong>um</strong>MBean que contém <strong>um</strong>a thread com repetição contínua. O período <strong>de</strong> intervalo entre <strong>um</strong>trap e outro e o índice da entrada da tabela po<strong>de</strong> ser modificado pelos atributos do MBean.


73QUADRO 03 - A THREAD DO LINK TRAP GENERATORpublic void run() {while (true) {try {sleep(interval);} catch (Exception e) {e.printStackTrace();}sendTrap();}}public void sendTrap() {// recebe a entrada do status <strong>de</strong> quem sera trocadoIfEntryImpl ifEntryImpl = InterfacesImpl.find(ifIn<strong>de</strong>x);if (ifEntryImpl == null) {errors++;return;}ifEntryImpl.switchifOperStatus();successes++;}Para iniciar o gerador <strong>de</strong> Traps, a aplicação cria <strong>um</strong> MBean LinkTrapGenerator,conforme quadro 03. Durante o momento em que ele está sendo registrado, o MBean iniciaa thread e envia <strong>um</strong> Trap n<strong>um</strong> intervalo padrão <strong>de</strong> 2 segundos, conforme Quadro 04.QUADRO 04 - INICIANDO UM TRAP GENERATOR// Cria <strong>um</strong> LinkTrapGenerator (especifica o ifIn<strong>de</strong>x no nome do objeto)//String trapGeneratorClass = "LinkTrapGenerator";int ifIn<strong>de</strong>x = 1;trapGeneratorObjName = new ObjectName("trapGenerator:class=" +trapGeneratorClass + ",ifIn<strong>de</strong>x=" + ifIn<strong>de</strong>x);server.createMBean(trapGeneratorClass, trapGeneratorObjName);Para que <strong>um</strong> adaptador SNMP envie Traps aos gerentes remotos, é necessário<strong>de</strong>finir o grupo <strong>de</strong> Traps no arquivo <strong>de</strong> lista <strong>de</strong> controle <strong>de</strong> acesso (ACL). Este grupo <strong>de</strong><strong>de</strong>finições comunitárias lista todos os hosts <strong>para</strong> os quais o <strong>agente</strong> enviará todos os Traps([SUN1999]). Uma <strong>de</strong>finição comunitária associa <strong>um</strong> nome comunitário com <strong>um</strong>a lista <strong>de</strong>hosts, especificado pelo hostname ou pelo en<strong>de</strong>reço <strong>de</strong> IP. Todos os hosts receberão osTraps em <strong>um</strong> pacote i<strong>de</strong>ntificado pelo nome comunitário.Segue no quadro 05 <strong>um</strong> exemplo mo<strong>de</strong>lo da especificação do arquivo ACL:


74QUADRO 05 – ESPECIFICAÇÃO DO ARQUIVO ACLacl = {{communities = publicaccess = read-onlymanagers = yourmanager}{communities = privateaccess = read-writemanagers = yourmanager}}trap = {}{trap-community = publichosts = yourmanager}São enviados Traps na porta especificada pelo atributo <strong>de</strong> TrapPort do MBeanSnmpAdaptadorServer. No <strong>agente</strong> foi fixada a porta trap <strong>para</strong> 8086, mas isto po<strong>de</strong> seralterado durante a implementação da MIB ou aplicação <strong>de</strong> administração.Se o arquivo <strong>de</strong> ACL não foi <strong>de</strong>finido ou se o grupo <strong>de</strong> trap estiver vazio, osTraps serão enviados <strong>para</strong> o <strong>local</strong>host5.4.2 INTERAGINDO COM O GERADOR DE TRAPSApós criar o MBean que envia Traps <strong>para</strong> o adaptador SNMP, segue abaixo <strong>um</strong>ainteração com o gerador <strong>de</strong> Traps:a) acessando o adaptador HTML <strong>de</strong>ste <strong>agente</strong> <strong>utilizando</strong> <strong>um</strong> navegadorHTML <strong>para</strong> a seguinte URL:• http://<strong>local</strong>host:8082 /;• Clique no Class=LinkTrapGenerator,ifIn<strong>de</strong>x=1;FIGURA 25 – INTERAGINDO COM O GERADOR DE TRAPS


75• Pelo adaptador <strong>de</strong> HTML, po<strong>de</strong>-se ver o MBean que representa oobjeto do gerador <strong>de</strong> Traps, po<strong>de</strong>ndo modificar seus atributos <strong>para</strong> alterar a entrada databela em que se esta operando e mudar o intervalo entre as Traps.b) mu<strong>de</strong> o intervalo da trap <strong>para</strong> 10000 <strong>de</strong> forma que as Traps sejam enviadas acada 10 segundos;FIGURA 26 – INTERAGINDO COM O GERADOR DE TRAPS IIc) volte <strong>para</strong> a página do <strong>agente</strong> e clique no ifEntry.ifIn<strong>de</strong>x=1 ´do MBeanifTable. Configure o período <strong>de</strong> recarga <strong>para</strong> 10, e clique no botão “Reload”. O gerador <strong>de</strong>trap <strong>de</strong>veria trocar o valor da variável <strong>de</strong> IfOperStatus, isto acontece <strong>de</strong>vido naimplementação da entrada da tabela que envia <strong>um</strong> trap quando este estado <strong>de</strong>le é alterado;d) volte <strong>para</strong> a página do <strong>agente</strong> e clique no name=Snmp no MBeanRFC1213_MIB. Role a tela <strong>para</strong> baixo e veja o SnmpOutPkts e variáveis doSNMPOutTraps. Estas variáveis <strong>de</strong>veriam ser as únicas com valores diferentes <strong>de</strong> zero, senenh<strong>um</strong> gerente conectou ao <strong>agente</strong> SNMP. O grupo SNMP apresenta informação sobre oadaptador SNMP e po<strong>de</strong>-se ver quantos Traps foram enviados <strong>de</strong>s<strong>de</strong> que o <strong>agente</strong> foiiniciado.


76FIGURA 27 – RESULTADO DO ENVIO DE TRAPS NO AGENTE SNMP5.5 LISTAS DE CONTROLE DE ACESSO (ACL)Para o adaptador SNMP, o JDMK fornece o controle <strong>de</strong> acesso baseado noen<strong>de</strong>reço IP e na máquina <strong>de</strong> host dos gerentes. Informações sobre acessos corretos sãoarmazenadas nas máquinas hosts em <strong>um</strong> arquivo <strong>de</strong> ACL ([SUN1999]).O arquivo <strong>de</strong> ACL também <strong>de</strong>fine os hosts dos gerentes <strong>para</strong> os quais os <strong>agente</strong>senviarão os Traps. Quando <strong>um</strong> trap é enviado, o <strong>agente</strong> enviará isto a todos os hosts listadosnas <strong>de</strong>finições <strong>de</strong> trap do arquivo <strong>de</strong> ACL.Para habilitar o controle <strong>de</strong> acesso e os Traps no adaptador SNMP, assegure-seque <strong>um</strong> arquivo <strong>de</strong> ACL existe quando qualquer <strong>agente</strong> seja iniciado. O arquivo <strong>de</strong> ACL<strong>de</strong>ve ser nomeado jdmk.acl e <strong>de</strong>ve ser <strong>local</strong>izado no diretório <strong>de</strong> configuração.No Windows NT o arquivo ACL <strong>de</strong>ve estar no seguinte caminho,Dir\SUNWjdmk\jdmk4.0\JDKversion\etc\conf \$ java -classpath classpath -Djdmk.acl.file=TCCACL Agente


77Se <strong>um</strong> arquivo <strong>de</strong> ACL existir, será aplicado o acesso restrito <strong>de</strong>finindo <strong>para</strong>todos os gerentes ou servidores proxy que têm acesso ao <strong>agente</strong> por seu adaptador SNMP.Se o arquivo <strong>de</strong> ACL não existir quando os <strong>agente</strong>s forem inicializados, a todos os gerentesé concedido acesso completo ao <strong>agente</strong> pelo adaptador SNMP.5.5.1 FORMATO DO ARQUIVO ACLSegundo [SUN1999], <strong>um</strong> arquivo ACL contém <strong>um</strong> grupo <strong>de</strong> acl que <strong>de</strong>fine aogerente os direitos <strong>de</strong> acesso e <strong>um</strong> grupo <strong>de</strong> trap que <strong>de</strong>finem quais hosts po<strong>de</strong>rão enviarTraps.5.5.2 FORMATO DO GRUPO ACLO grupo <strong>de</strong> acl contém <strong>um</strong> ou mais listas <strong>de</strong> configurações <strong>de</strong> comunida<strong>de</strong>.acl = {list1list2...listN}QUADRO 06 – FORMATO ARQUIVO ACLCada lista tem o formato exibido no quadro 07:{}QUADRO 07 – FORMATO ARQUIVO ACLcommunities = communityListaccess = accessRightsmanagers = hostListO communityList é <strong>um</strong>a lista comunitária SNMP que nomeia <strong>para</strong> qual controle<strong>de</strong> acesso se aplicará. A nomeação comunitária nesta lista está se<strong>para</strong>da através <strong>de</strong> vírgulas.O accessRights especifica os direitos a serem concedidos a todos os gerentesque executam nas máquinas especificadas nos itens dos gerentes. Há dois possíveis valores:leitura e escrita ou somente <strong>de</strong> leitura.


78O artigo <strong>de</strong> hostList especifica as máquinas hosts dos gerentes que são concedidosos direitos <strong>de</strong> acesso. O hostList é <strong>um</strong>a lista <strong>de</strong> hosts se<strong>para</strong>da por vírgulas, em cada <strong>um</strong> dosquais po<strong>de</strong>m ser expressados como:a)Um nome host;b)Um en<strong>de</strong>reço IP;c)Uma máscara <strong>de</strong> sub re<strong>de</strong>.5.5.3 FORMATO DO GRUPO DE TRAPO grupo <strong>de</strong> trap especifica os hosts <strong>para</strong> os quais o <strong>agente</strong> po<strong>de</strong> enviar Traps. Estegrupo contém <strong>um</strong> ou mais <strong>de</strong>finições <strong>de</strong> comunida<strong>de</strong> <strong>de</strong> trap.QUADRO 08 – ESPECIFICAÇÃO DOS HOSTS PARA ACESSOtrap = {community1community2...communityN}Cada <strong>de</strong>finição é a associação entre <strong>um</strong>a configuração dos hosts e a ca<strong>de</strong>ia <strong>de</strong>Traps enviadas no SNMP, <strong>de</strong> acordo com o formato no quadro 09:QUADRO 09 – DEFINIÇÃO DOS HOSTS{}trap-community = trapCommunityStringhosts = trapInterestHostListO item <strong>de</strong> trapCommunityString especifica a ca<strong>de</strong>ia SNMP que será incluídonas Traps enviadas aos hosts especificados nos itens hosts.O item <strong>de</strong> trapInterestHostList especifica <strong>um</strong>a lista se<strong>para</strong>da por vírgulas doshosts, on<strong>de</strong> cada host <strong>de</strong>ve ser i<strong>de</strong>ntificado por seu nome ou en<strong>de</strong>reço <strong>de</strong> IP completo.


796. CONCLUSÃOHoje, as re<strong>de</strong>s <strong>de</strong> computadores baseadas no protocolo TCP/IP, como porexemplo, a Internet, crescem assustadoramente. Isto se <strong>de</strong>ve ao fato <strong>de</strong>ste protocolo ser <strong>de</strong>fácil implementação e manutenção, além <strong>de</strong> permitir a interligação <strong>de</strong> LAN através <strong>de</strong>outras WAN, com <strong>um</strong> <strong>de</strong>sempenho consi<strong>de</strong>rável.Atualmente é possível, inclusive, ter-se <strong>um</strong>a implementação <strong>de</strong> re<strong>de</strong> <strong>local</strong><strong>utilizando</strong> o protocolo TCP/IP, sem conectá-la a outras re<strong>de</strong>s, caracterizando <strong>um</strong>a re<strong>de</strong>Intranet, hoje muito utilizada na implementação <strong>de</strong> LAN em empresas ([ODA1998]).Porém é necessário monitorar e controlar o funcionamento, crescimento eparâmetros <strong>de</strong>ssas re<strong>de</strong>s, garantindo o seu correto <strong>de</strong>sempenho. A necessida<strong>de</strong> <strong>de</strong>gerenciamento <strong>de</strong> re<strong>de</strong>s é evi<strong>de</strong>nte e ten<strong>de</strong> a crescer à medida que as re<strong>de</strong>s se tornammaiores e mais complexas. Como essas re<strong>de</strong>s estão cada vez mais heterogêneas, <strong>um</strong>apadronização do protocolo <strong>de</strong> gerência garante que estas sejam gerenciadas <strong>de</strong> maneirauniforme.Entre as ativida<strong>de</strong>s básicas do gerenciamento <strong>de</strong> re<strong>de</strong>s estão a <strong>de</strong>tecção ecorreção <strong>de</strong> falhas, em <strong>um</strong> tempo mínimo, e no estabelecimento <strong>de</strong> procedimentos <strong>para</strong> aprevisão <strong>de</strong> problemas futuros. Por exemplo, monitorando linhas cujo tráfego estejaa<strong>um</strong>entando ou roteadores que estejam se sobrecarregando, é possível tomar medidas queevitem o colapso da re<strong>de</strong>, como a reconfiguração das rotas ou troca do roteador por <strong>um</strong>mo<strong>de</strong>lo mais a<strong>de</strong>quado.O protocolo <strong>de</strong> gerência SNMP (Simple Network Management Protocol)constitui atualmente <strong>um</strong> padrão operacional “<strong>de</strong> facto”, e gran<strong>de</strong> parte do seu sucesso se<strong>de</strong>ve a sua simplicida<strong>de</strong>. Outro aspecto importante é a sua capacida<strong>de</strong> <strong>de</strong> gerenciar re<strong>de</strong>sheterogêneas constituídas <strong>de</strong> diferentes tecnologias, protocolos e sistemas operacionais.Dessa forma, o SNMP é capaz <strong>de</strong> gerenciar re<strong>de</strong>s Ethernet, Token Ring que conectem PCs,Apple Machintosh, estações SUN e outros tipos <strong>de</strong> computadores ([COH2000]).No entanto, o SNMP possui alg<strong>um</strong>as limitações. A maior <strong>de</strong>las é o fato <strong>de</strong> nãoser apropriado <strong>para</strong> o gerenciamento <strong>de</strong> re<strong>de</strong>s muito gran<strong>de</strong>s, <strong>de</strong>vido à limitação <strong>de</strong><strong>de</strong>sempenho da estratégia <strong>de</strong> pooling utilizada pelo gerente SNMP na comunicação com os<strong>agente</strong>s SNMP ([CHI1999]). O Simple Network Management Protocol é <strong>um</strong> excelente


80protocolo <strong>para</strong> gerenciar dispositivos em <strong>um</strong>a LAN. A maior parte das LAN disponibilizama largura <strong>de</strong> banda necessária <strong>para</strong> que <strong>um</strong> gerente SNMP possa efetuar o pooling nosvários <strong>agente</strong>s da re<strong>de</strong> sem que isso afete significativamente o <strong>de</strong>sempenho da mesma.Enquanto que n<strong>um</strong>a WAN a largura <strong>de</strong> banda é massivamente utilizada, além <strong>de</strong> ser lenta.Assim, o <strong>de</strong>senvolvimento <strong>de</strong> ferramentas <strong>de</strong> gerência que implementem oprotocolo SNMP torna-se bastante atrativo. Como mostrado neste trabalho, hoje jácontamos com plataformas, como o próprio JDMK, que permitem <strong>de</strong>senvolver essasferramentas com <strong>um</strong>a maior in<strong>de</strong>pendência do protocolo, tornando o processo <strong>de</strong> concepçãomenos complexo.A plataforma JDMK em conjunto com a linguagem Java tornou-se possível criar<strong>um</strong> <strong>agente</strong> SNMP que possa operar em sistemas operacionais diferentes, como porexemplo, Unix e Windows NT, fazendo com que fossem alcançados os objetivos propostos.A linguagem Java tornou possível a idéia <strong>de</strong> criar <strong>um</strong> <strong>agente</strong> que tivesse característicasWeb e pu<strong>de</strong>sse ser acessado em qualquer <strong>local</strong> que se tenha acesso a Internet.Umas das maiores dificulda<strong>de</strong>s foi utilizar <strong>um</strong>a plataforma na qual, a mesma erarecente no mercado, on<strong>de</strong> tinha-se pouca bibliografia e pouco se sabia <strong>de</strong>la, o JDMK aindaé novo no Brasil, sendo que, gran<strong>de</strong> parte das dúvidas que vieram a aparecer, foram sanadasvia correio eletrônico, por usuários, principalmente dos Estados Unidos e Alemanha, on<strong>de</strong>concentra-se gran<strong>de</strong> parte dos <strong>de</strong>senvolvedores que utilizam esta plataforma.É necessário lembrar que estas ferramentas <strong>de</strong>vem facilitar as tarefas <strong>de</strong>monitoração, análise e <strong>de</strong>tecção <strong>de</strong> falhas na re<strong>de</strong>, porém, associadas a elas <strong>de</strong>vem existir<strong>um</strong>a estrutura que coor<strong>de</strong>ne as ativida<strong>de</strong>s <strong>de</strong> gerenciamento, assegurando sua eficiência enão permitindo que essas ativida<strong>de</strong>s se tornem mais <strong>um</strong> peso na tarefa <strong>de</strong> operação da re<strong>de</strong>.Outra tendência do SNMP é sua migração <strong>para</strong> a Web, pois a conveniência dogerenciamento neste ambiente possui <strong>um</strong> apelo muito forte ([SUN1999]). Uma ferramenta<strong>de</strong> gerenciamento baseado em Web que utilizaria o navegador familiar ao usuário <strong>para</strong>apresentar as informações <strong>de</strong> gerenciamento, tornando a tarefa <strong>de</strong> gerência bem maisamigável do que <strong>um</strong>a linha <strong>de</strong> comando. Uma vez que esta ferramenta possa ser utilizadaem qualquer PC que possua <strong>um</strong> navegador, as informações <strong>de</strong> gerenciamento passam aestar acessíveis <strong>de</strong> qualquer <strong>local</strong>. Esta portabilida<strong>de</strong> permite que apenas com <strong>um</strong>


81navegador Web e <strong>um</strong> ponto <strong>de</strong> acesso remoto, o gerente possa monitorar e controlar a re<strong>de</strong>a qualquer hora, em qualquer lugar, enquanto viaja ou até mesmo <strong>de</strong> casa.Por fim, <strong>de</strong>vemos relembrar que com <strong>um</strong>a estrutura <strong>de</strong> gerenciamento a<strong>de</strong>quadae a utilização das facilida<strong>de</strong>s advindas disto, po<strong>de</strong>remos garantir o funcionamento a<strong>de</strong>quadodos serviços <strong>de</strong> re<strong>de</strong>.Para trabalhos futuros é interessante implementar mais recursos da MIButilizada ou então utilizar a mesma plataforma JDMK <strong>para</strong> a criação <strong>de</strong> gerentes SNMP eainda incrementar o gerenciamento HTML (MIB-Browser) <strong>para</strong> torná-lo <strong>um</strong>a aplicaçãomais amigável <strong>para</strong> a gerência.


827. BIBLIOGRAFIA[CHI1999]CHISANE, Fabrício. Gerenciamento <strong>de</strong> re<strong>de</strong>s SNMP. 02/2000. En<strong>de</strong>reçoeletrônico: http://www.inf.ufgrs.br/~chisane[COH2000] COHEN, Yoran. SNMP simple network management protocol. 02/2000.En<strong>de</strong>reço eletrônico: http://wwwdos.uniinc.msk.ru/tech1/1995/<strong>snmp</strong>/<strong>snmp</strong>.htm[FUR1998][LIU1999][MAF1999][NAU1996][NET1990][ODA1998][SOA1995][STA1996]FURLAN, José Davi. Mo<strong>de</strong>lagem <strong>de</strong> objetos através da UML : the unifiedmo<strong>de</strong>ling language. São Paulo : Makron Books, 1998.LIU, Narayanan J. Enterprise Java Developer´s Gui<strong>de</strong>. United States ofAmerica : McGraw-Hill, 1999.MAFINSKI, André. Protótipo <strong>de</strong> software <strong>de</strong> gerência SNMP <strong>para</strong> oambiente Windows NT. Universida<strong>de</strong> Regional <strong>de</strong> Bl<strong>um</strong>enau : Trabalho<strong>de</strong> Conclusão <strong>de</strong> Curso <strong>de</strong> Ciências da Computação - Bacharelado, 1999.NAUGHTON, Patrick. Dominando o java. São Paulo : Makron Books,1996.NETO, Vicente. Re<strong>de</strong>s <strong>de</strong> dados, teleprocessamento e gerência <strong>de</strong> re<strong>de</strong>s.São Paulo : Érica, 1990.ODA, Cybelle Suemi. Gerenciamento <strong>de</strong> re<strong>de</strong>s <strong>de</strong> computadores. En<strong>de</strong>reçoEletrônico: http://www.gt-er.cg.org.br/operacoes/gerencia-re<strong>de</strong>sSOARES, Luiz Fernando G. Re<strong>de</strong>s <strong>de</strong> computadores : LANs, MANs eWANs às re<strong>de</strong>s ATM. Rio <strong>de</strong> Janeiro : Campus, 1995.STALLINGS, W. SNMP, SNMP v2 and RMON. First Edition. AddisonWesley, 1996.


83[SUN1999]SUN, Microsystems. Java Dynamic Management Kit 4.0 Tutorial.02/2000. En<strong>de</strong>reço eletrônico: http://docs.sun.com[TAN1996] TANEMBAUM, A. S. Computer networks. Third Edition. Prentice Hall,1996.[VOG1999] VOGEL, Andreas. Programming with Enterprise JavaBeans. New York :Wiley, 1999.[WAL1997] WALNUM, Clayton. Java em exemplos. São Paulo : Makron Books, 1997.[WIN1993] WINBLAD, Ann L et al. Software orientado ao objeto. São Paulo :Makron Books, 1993.


848. ANEXOS8.1 ANEXO 1Código fonte do Agente em Java./** @(#)Arquivo Agente.java* @(#)Autor Jorge Lucas* @(#)Data 06/2000**/import javax.management.ObjectName;import javax.management.MBeanServer;import javax.management.MBeanServerFactory;import com.sun.jdmk.Trace;import com.sun.jdmk.comm.HtmlAdaptorServer;import com.sun.jdmk.comm.SnmpAdaptorServer;public class Agente {static SnmpAdaptorServer <strong>snmp</strong>Adaptor = null;public static void main(String args[]) {MBeanServer server;ObjectName htmlObjName;ObjectName <strong>snmp</strong>ObjName;ObjectName mibObjName;ObjectName trapGeneratorObjName;int htmlPort = 8082;int <strong>snmp</strong>Port = 161;try {Trace.parseTraceProperties();Trace.send(Trace.LEVEL_TRACE, Trace.INFO_MISC, "Agente","main", "Caminho padrao");} catch(java.io.IOException e) {e.printStackTrace();}try {server = MBeanServerFactory.createMBeanServer();String domain = server.getDefaultDomain();// Cria e inicia o adaptador HTML.//


85htmlObjName = new ObjectName(domain +":class=HtmlAdaptorServer,protocol=html,port=" + htmlPort);Trace.send(Trace.LEVEL_TRACE, Trace.INFO_MISC, "Agente","main", "Adicionando adaptador HTML <strong>para</strong> o servidor MBean como o nomme\n\t" + htmlObjName);java.lang.System.out.println("NOTA: Adaptador HTML estaconectado na porta TCP" + htmlPort);HtmlAdaptorServer htmlAdaptor = newHtmlAdaptorServer(htmlPort);server.registerMBean(htmlAdaptor, htmlObjName);htmlAdaptor.start();//// Codigo especifico <strong>para</strong> o SNMP://// Cria e inicia o adaptador SNMP.// Especifica a porta <strong>de</strong> uso na Constructor.// Caso queria utiliar a porta(161) comentar a proxima linha// <strong>snmp</strong>Port = 8085;//<strong>snmp</strong>Port = 8085;<strong>snmp</strong>ObjName = new ObjectName(domain +":class=SnmpAdaptorServer,protocol=<strong>snmp</strong>,port=" + <strong>snmp</strong>Port);Trace.send(Trace.LEVEL_TRACE, Trace.INFO_MISC, "Agente","main", "Adicionando adaptador SNMP <strong>para</strong> o servidor MBean como o nomme\n\t" + <strong>snmp</strong>ObjName);java.lang.System.out.println("NOTa: Adaptador SNMP estaconectado na porta UDP " + <strong>snmp</strong>Port);<strong>snmp</strong>Adaptor = new SnmpAdaptorServer(<strong>snmp</strong>Port);server.registerMBean(<strong>snmp</strong>Adaptor, <strong>snmp</strong>ObjName);<strong>snmp</strong>Adaptor.start();// Inicializa a porta trap SNMP.// Utiliza a porta = <strong>snmp</strong>Port+1.//java.lang.System.out.print("NOTa: Enviando <strong>um</strong> trap SNMP <strong>para</strong>cada <strong>de</strong>stino <strong>de</strong>finido no arquivo ACL ...");<strong>snmp</strong>Adaptor.setTrapPort(new Integer(<strong>snmp</strong>Port+1));<strong>snmp</strong>Adaptor.sendV1Trap(0, 0, null);java.lang.System.out.println("Done.");// Cria a MIBCreate II (RFC 1213) e adiciona no ServidorMBean.//mibObjName= new ObjectName("<strong>snmp</strong>:class=RFC1213_MIB");Trace.send(Trace.LEVEL_TRACE, Trace.INFO_MISC, "Agente","main", "Adicionando RFC1213-MIB <strong>para</strong> o Servidor MBean como o nome\n\t" +mibObjName);RFC1213_MIB mib2 = new RFC1213_MIB();server.registerMBean(mib2, mibObjName);// Conecta o adaptador SNMP na MIB <strong>para</strong> fazer o acesso da MIBatravés adaptador do protocolo SNMP.// Se o passo nao acontecer, a MIB ainda estara ativa noAgente JDMK:// Os objetos serao acessados atraves do HTML e nao SNMP.


86//mib2.setSnmpAdaptorName(<strong>snmp</strong>Obj Name);// Cria <strong>um</strong> LinkTrapGenerator.// Especifica o ifIn<strong>de</strong>x <strong>para</strong> usar no object name.//String trapGeneratorClass = "LinkTrapGenerator";int ifIn<strong>de</strong>x = 1;trapGeneratorObjName = new ObjectName("trapGenerator" +":class=" + trapGeneratorClass + ",ifIn<strong>de</strong>x=" + ifIn<strong>de</strong>x);Trace.send(Trace.LEVEL_TRACE, Trace.INFO_MISC, "Agente","main","Adicionando " + trapGeneratorClass + " <strong>para</strong> oServidor MBean com o nome \n\t" + trapGeneratorObjName);server.createMBean(trapGeneratorClass, trapGeneratorObjName);}} catch (Exception e) {e.printStackTrace();}}static public SnmpAdaptorServer getSnmpAdaptor() {return <strong>snmp</strong>Adaptor;}8.2 ANEXO 2Código fonte do arquivo <strong>de</strong> permissão ACL## @(#)jdmk.acl### accesso: po<strong>de</strong> ter acesso somente <strong>para</strong> "read -only" ou "read-write"## gerents que po<strong>de</strong>m acessar:# - hostname: bla bla bla# - En<strong>de</strong>reco IP: 123.456.789.12# - Mascara <strong>de</strong> Sub-re<strong>de</strong>: 123.255.255.255#acl = {{communities = public, privateaccess = read-onlymanagers = 100.100.100.10}{communities = publicaccess = read-write


87managers = 100.100.100.10}}trap = {{trap-community = publichosts = 100.100.100.10}{trap-community = privatehosts = 100.100.100.10}}

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!