Escolar Documentos
Profissional Documentos
Cultura Documentos
Jedizone
Introduo
interessante observar como existem perguntas que so feitas repetidamente. Enquanto muito mais fcil assumir que quem pergunta no sabe perguntar ou no entende a resposta, por outro lado a frequncia da pergunta pode indicar que a resposta no boa. No meu ponto de vista, isto acontece com o Net-SNMP. Existem muitas fontes de informao, em geral dispersas. Vrios detalhes so respondidos via cdigo fonte apenas, o que pode atrapalhar tambm. Associe isto a um assunto com jargo e conceitos prprios e tudo fica ainda mais complexo. Foi pensando neste cenrio que resolvi escrever um tutorial de como iniciar com o Net-SNMP. No quero publicar um monte de cdigo fonte, como geralmente encontramos por a. Quero discutir os princpios envolvidos e levar o leitor para um ponto de entendimento verdadeiro, no um mero digitador de tutorial, um escriba digital. uma meta audaciosa, da o ttulo pretensioso da srie. No entanto, como j consegui realiz-la em outros tutoriais, como o super referenciado tutorial de VLAN em Linux (http://www.vivaolinux.com.br/artigo/Criando-Redes-Locais-Virtuais%28VLANs%29-com-Linux) ou sobre a srie criao de um RTOS (http://jedizone.wordpress.com/2010/08/11/ajude-a-divulgar-a-serie/), acredito que posso conseguir novamente. Contarei com a ajuda do meu amigo Alan Carvalho (http://acassis.wordpress.com/) como revisor desta srie. Como ambos j implementamos equipamentos com Net-SNMP, pode ser uma boa chance de diminuir possveis erros. Uma observao final: no espere encontrar tudo sobre SNMP nesta introduo. Na verdade, o objetivo justamente o inverso: espere encontrar apenas o necessrio para conseguir entender o prximo post. A ideia ir aumentando o conhecimento de forma gradual, omitindo detalhes que podem apenas tornar o primeiro passo mais difcil. Livros e RFCs podem ajudar a refinar os conceitos quando voc decidir que realmente a hora ou precisar de algo mais avanado.
O que o SNMP ?
jedizone.wordpress.com/2012/02/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-1/ 1/4
04/10/13
A traduo livre de SNMP (Simple Network Management Protocol) pode ser Protocolo Simples de Gerenciamento de Rede [1]. Como o nome indica, ele foi criado com o foco em gerncia de rede, permitindo avaliar e monitorizar, em tempo real, as condies de switches, roteadores, impressoras, entre outros. O SNMP foi criado pelo IETF (Internet Engineering Task Force), sendo normatizado atravs de vrios RFC (Request For Comments), cada um descrevendo aspectos particulares do protocolo e da sua implementao, sendo que os mais antigos datam de 1990. Ao final do texto existe uma lista de RFCs relacionados ao SNMP. O SNMP no segue sempre o paradigma cliente/servidor e gera um jargo prprio para denominar os seus elementos. Em geral, os elementos envolvidos com o SNMP se dividem em managed devices (dispositivos gerenciados) e managers (gerentes). Os dispositivos gerenciados executam Agentes (agents, em ingls) que se comunicam com os Sistemas de Gesto de Redes (NetworkManagement Systems, em ingls). Esta comunicao, na maior parte do tempo cliente/servidor, com o sistema de gesto (cliente) pedindo ou enviando informaes para o agente (servidor). Por exemplo, existem comandos como GET, usado para pedir uma informao, ou SET, usado para enviar um novo valor de informao. No entanto, o agente pode tambm enviar informaes para o sistema de gesto, sem que este tenha requisitado, agindo como cliente e este ltimo como servidor, neste caso. Esta uma situao comum para envio de alarmes, denominados traps, em ingls. O seu roteador poderia ser configurado para enviar um alarme quando a taxa de utilizao do link atingisse um determinado valor, por exemplo, sem que o manager fizesse uma requisio explcita. Na figura a seguir temos um exemplo da comunicao entre um manager (executando num servidor) e de um agente, rodando num switch. Fluxos do tipo cliente/servidor e trap esto representados.
(http://jedizone.files.wordpress.com/2012/02/net-snmp-manager-agente.png)
jedizone.wordpress.com/2012/02/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-1/ 2/4
04/10/13
Verses do SNMP
O SNMP vem sempre evoluindo, agregando mais segurana e funcionalidades com o decorrer do tempo. No entanto, caractersticas sofisticadas de segurana s so encontradas na verso mais recente, infelizmente nem to utilizada como as verses anteriores. De forma rpida, as verses esto listadas a seguir [3]: SNMP Version 1 (SNMPv1): verso inicial, definida no RFC 1157 e grandemente suportada. Pouco segura por usar passwords em texto puro. SNMP version 2 (SNMPv2): devinida nos RFC 3416, 3417 e 3418 e conhecida como SNMPv2c (c de community), com categorias de acesso ao agente definidas como comunidades. SNMP version 3 (SNMPv3), com grandes melhorias em segurana, tais como autenticao, criptografia, etc. Definida atravs de vrios RFCs: 3410, 3411, 3412, 3413, 3414, 3415, 3416, 3417, 3418 e 2576. Ainda relativamente pouco usada.
O que o Net-SNMP ?
O Net-SNMP um grande projeto de fonte aberta iniciado em 1992 e responsvel por um conjunto de programas usados para a implementao das vrias verses do SNMP e com suporte a IPv4 e IPv6. Licenciado por licenas que se assemelham a BSD (existem algumas pequenas variaes), o Net-SNMP pode ser executado em vrios sistemas Unix, Linux e at mesmo Windows. Ser atravs da infraestrutura do Net-SNMP que desenvolveremos todos os nossos exemplos. Est bom por hoje. No prximo post (jedizone.wordpress.com/2012/02/09/o-guia-definitivo-para-osiniciantes-em-net-snmp-2/), vamos discutir mais alguns conceitos, como MIBs e OIDs. Voc pode me seguir no twitter para receber notificaes dos futuros posts desta srie atravs do usurio @marcelobarros (http://twitter.com/marcelobarros). At l !
Referncias:
[1] SNMP: detalhes tcnicos, RFCs, etc: http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol (http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol) [2] Net-SNMP: http://www.net-snmp.org/ (http://www.net-snmp.org/) [3] Essential SNMP, 2nd Edition, Douglas Mauro, Kevin Schmidt, Editora OReilly Linux , NET-SNMP , SNMP About these ads (http://en.wordpress.com/aboutthese-ads/)
3/4
jedizone.wordpress.com/2012/02/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-1/
04/10/13
This entry was posted on fevereiro 2, 2012, 9:16 am and is filed under Linux, Redes, SNMP. You can follow any responses to this entry through RSS 2.0. Voc pode deixar uma resposta, ou trackback do seu prprio site. COMENTRIOS (0) 1. 2. 3. 4. TRACKBACKS (4)
O guia definitivo para os iniciantes em Net-SNMP (2) Jedizone O guia definitivo para os iniciantes em Net-SNMP (3) Jedizone O guia definitivo para os iniciantes em Net-SNMP (4) Jedizone O guia definitivo para os iniciantes em Net-SNMP (5) Jedizone
jedizone.wordpress.com/2012/02/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-1/
4/4
04/10/13
Jedizone
MIBs e OIDs
De volta ao assunto Net-SNMP, vamos hoje discutir sobre como a informao organizada no SNMP. Se voc est comeando deste post melhor ler o post anterior (http://jedizone.wordpress.com/2012/02/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-1/) antes. Lembrando tambm que esta srie conta com a reviso do Alan Carvalho (http://acassis.wordpress.com). Toda informao gerenciada pelo agente descrita atravs de uma MIB (Management Information Base). A MIB pode ser entendida como a descrio da base de dados hierrquica que um agente est disponibilizando. A figura a seguir ilustra uma parte desta MIB, geralmente representada em forma de rvore. Cada novo nodo tem um nome e um nmero relacionado, como pode ser visto abaixo. A especificao do SNMP deixa claro como a organizao da rvore feita, assim como o nome dos nodos padronizados.
jedizone.wordpress.com/2012/02/09/o-guia-definitivo-para-os-iniciantes-em-net-snmp-2/
1/3
04/10/13
(http://jedizone.files.wordpress.com/2012/02/mid_oid.png) Cada elemento descrito nesta base de dados possui um identificador, denominado de OID (Object Identifier, em ingls). Eles podem ser referenciados usando os nomes dos nodos separados por ponto ou atravs da sequncia de nmeros dos nodos. Por exemplo, considere o seguinte OID: . i s o . o r g . d o d . i n t e r n e t . p r i v a t e . e n t e r p r i s e s Usando os nmeros dos nodos, o endereo anterior poderia ser descrito como (procure os nmero na figura anterior, para entender): . 1 . 3 . 6 . 1 . 4 . 1 Os OIDs que comeam com pontos so considerados absolutos, isto , sempre referenciam a origem da hierarquia, a raiz. No entanto, possvel ter tambm OIDs relativos, cuja origem parte de um ponto especfico da hierarquia. Alm disso, existe uma terceira forma suportada pelo Net-SNMP onde empregada uma notao de escopo, geralmente relacionada a um ponto especfico da rvore bastante utilizado e referenciado na documentao do SNMP. A diferena entre as trs formas pode ser vista a seguir, onde um nodo da ramificao system usado: Notao absoluta: .1.3.6.1.2.1.1.1 ou .iso.org.dod.internet.mgmt.mib-2.system.sysDescr Notao relativa: system.sysDescr
jedizone.wordpress.com/2012/02/09/o-guia-definitivo-para-os-iniciantes-em-net-snmp-2/ 2/3
04/10/13
Notao de escopo: SNMPv2-MIB::system.sysDescr No se preocupe muito com o contedo do OID ou com a rvore. Neste momento, basta saber como eles so organizados. Ao fazer o seu prprio exemplo isto vai ficar bem mais claro. Depois, com a descrio do tipo de dado de cada OID e a sua posio hierrquica na rvore, fica possvel que um gerente consiga fazer o acesso informao desejada na base de dados. Est bom por hoje. No prximo post (http://jedizone.wordpress.com/2012/02/15/o-guia-definitivopara-os-iniciantes-em-net-snmp-3/), vamos discutir os tipos de dados que podem ser usados e os passos iniciais para a criao de uma MIB personalizada. At l ! About these ads (http://en.wordpress.com/aboutthese-ads/) This entry was posted on fevereiro 9, 2012, 12:05 am and is filed under Linux, Redes, SNMP. You can follow any responses to this entry through RSS 2.0. Voc pode deixar uma resposta, ou trackback do seu prprio site. COMENTRIOS (0) TRACKBACKS (3) Linux , NET-SNMP , SNMP
1. O guia definitivo para os iniciantes em Net-SNMP (3) Jedizone 2. O guia definitivo para os iniciantes em Net-SNMP (4) Jedizone 3. O guia definitivo para os iniciantes em Net-SNMP (5) Jedizone
jedizone.wordpress.com/2012/02/09/o-guia-definitivo-para-os-iniciantes-em-net-snmp-2/
3/3
04/10/13
Jedizone
04/10/13
Tipos compostos tambm existem: SEQUENCE: um tipo de dado que especifica uma lista de elementos formados por tipos primitivos. Usado para descrever listas de valores e ajuda na formao de tabelas. SEQUENCE OF: Geralmente usado para a descrio de tabelas, onde cada coluna de um determinado tipo de dado primitivo e precisa-se enviar uma linha dessa tabela por vez. Neste caso, sequence of ir se referir a uma lista, ou seja, um dado do tipo sequence. Uma situao comum quando se envia uma tabela de interfaces de rede de um roteador, com colunas como nome, estado, frames recebidos. Cada linha desta tabela pode ser descrita por uma lista (sequence) de octect string (nome), Integer (estado) e Counter (frames recebidos) e a tabela como uma sequncia de sequncias (sequence of). Sim, um pouco confuso, vale a pena reler este ltimos dois tipos. IpAddress: um endereo IP de 32 bits, isto , IP verso 4 (IPv4). NetwordAddress: um endereo de rede de 32 bits, isto , IP verso 4 (IPv4). Gauge: apesar de ser um nmero de 32 bits como o counter, o gauge no precisa ser sempre crescente, basta obedecer a faixa [0,2^32-1]. Se voc tiver que especificar, por exemplo, o uso de banda instantneo, este seria um bom candidato. TimeTicks: este tipo de dado, tambm de 32 bits, representa um valor de tempo. Cada unidade representa um centsimo de segundo. Poderia ser usado para indicar, por exemplo, por quanto tempo um determinado servidor est em execuo. Opaque: um tipo de dado especial que permite que outros tipos possam ser representados para uma sequncias de bytes, isto , como um octect string. Imagine, por exemplo, que voc precise enviar um nmero de dupla preciso (ponto flutuante). Seria possvel fazer isto com o tipo opaque, ficando a decodificao/decodificao na responsabilidade dos agentes e gerentes. D para perceber que possvel colocar qualquer coisa aqui, no ? Com estes tipos j possvel pensar na representao dos dados da MIB. Como voc deve ter percebido, cada um deles tem um propsito bem especfico, no so simplesmente nmeros com faixas diferentes. Tentei mostrar isso ao dar exemplos de uso de cada um deles. Por exemplo, usar um Gauge no lugar de um Counter um erro grave j que o Counter precisa ser crescente. No fundo, o SNMP poderia trabalhar apenas a com diferena entre o valor atual e o anterior, o que faz sentido para o Counter mas no para o Gauge. Continuaremos com o assunto MIBs personalizadas no prximo post (http://jedizone.wordpress.com/2012/02/23/o-guia-definitivo-para-os-iniciantes-em-net-snmp-4/). At l ! About these ads (http://en.wordpress.com/aboutthese-ads/) This entry was posted on fevereiro 15, 2012, 8:00 pm and is filed under Linux, Redes, SNMP. You can follow any responses to this entry through RSS 2.0. Voc pode deixar uma resposta, ou trackback do seu prprio site. COMENTRIOS (0) TRACKBACKS (3) Linux , NET-SNMP , SNMP
1. O guia definitivo para os iniciantes em Net-SNMP (4) Jedizone 2. O guia definitivo para os iniciantes em Net-SNMP (5) Jedizone 3. O guia definitivo para os iniciantes em Net-SNMP (2) | Jedizone
jedizone.wordpress.com/2012/02/15/o-guia-definitivo-para-os-iniciantes-em-net-snmp-3/ 2/3
04/10/13
jedizone.wordpress.com/2012/02/15/o-guia-definitivo-para-os-iniciantes-em-net-snmp-3/
3/3
04/10/13
Jedizone
04/10/13
O tempo de execuo do sistema (apenas leitura), em segundos Vamos colocar os leds dentro de um nodo leds e o tempo de execuo dentro de um nodo sistema. Alm disso, toda esta estrutura vai ficar abaixo de um nodo chamado exemplo, subordinado ao nodo acme. Graficamente, teremos:
(http://jedizone.files.wordpress.com/2012/02/mib-exemplo.png) MIB exemplo rvore Com esta MIB em mente, o OID do led scroll lock, por exemplo, pode ser escrito como: absoluto: .iso.org.dod.internet.private.enterprise.acme.examplo.leds.scrolllock absoluto (numrico): .1.3.6.1.4.1.54321.0.0.2 relativo: entreprises.54321.0.0.2 Notem que os nmeros dos nodos foram escolhidos pelo gerente de redes da empresa ACME (eu mesmo) e no precisariam ser necessariamente sequenciais. Com relao aos tipos de dados, j deu para perceber que os os leds sero do tipo INTEGER, com dois valores possveis (1 para aceso e 2 para apagado), e que o tempo de execuo ser do tipo COUNTER ? Se no ficou claro, recomendo reler o post anterior (http://jedizone.wordpress.com/2012/02/15/o-guia-definitivo-para-os-iniciantesem-net-snmp-3/). Muito bem. Com tudo definido hora de usar a linguagem ASN.1 (http://en.wikipedia.org/wiki/Abstract_Syntax_Notation_One), ou Abstract Syntax Notation One, para descrever a MIB que planejamos. Sim, no prximo post (http://jedizone.wordpress.com/2012/03/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-5/). Vejo vocs l. About these ads (http://en.wordpress.com/aboutthese-ads/) This entry was posted on fevereiro 23, 2012, 11:33 pm and is filed under Linux, Redes, SNMP. You can follow any responses to this entry through RSS 2.0. Voc pode deixar uma resposta, ou trackback do seu prprio site.
jedizone.wordpress.com/2012/02/23/o-guia-definitivo-para-os-iniciantes-em-net-snmp-4/ 2/3
04/10/13
COMENTRIOS (0)
TRACKBACKS (2)
1. O guia definitivo para os iniciantes em Net-SNMP (5) Jedizone 2. O guia definitivo para os iniciantes em Net-SNMP (3) | Jedizone
jedizone.wordpress.com/2012/02/23/o-guia-definitivo-para-os-iniciantes-em-net-snmp-4/
3/3
04/10/13
Jedizone
Introduo
Este o nosso ltimo post terico e vamos aprender nele como escrever a nossa MIB de exemplo na notao ASN.1. Antes de mais nada, j aviso que no sairo letrados nesta notao, apenas aprenderemos o necessrio para o exemplo. Afinal, uma srie para iniciantes, no ? Aumente seu nvel de concentrao pois teremos um post bem mais extenso aqui. Mos obra ! (Links para os posts anteriores: I (http://jedizone.wordpress.com/2012/02/02/o-guia-definitivo-para-os-iniciantesem-net-snmp-1/), II (http://jedizone.wordpress.com/2012/02/09/o-guia-definitivo-para-os-iniciantesem-net-snmp-2/), III (http://jedizone.wordpress.com/2012/02/15/o-guia-definitivo-para-os-iniciantesem-net-snmp-3/), e IV (http://jedizone.wordpress.com/2012/02/23/o-guia-definitivo-para-osiniciantes-em-net-snmp-4/))
Descrevendo a hierarquia
A primeira coisa a saber como derivar um nodo do outro na notao ASN.1, isto , como estabelecer as relaes de hierarquia entre os objetos (OIDs) na rvore. Para indicar isto, veja a seguinte notao: n o d o F i l h o: : ={n o d o P a in u m e r o D o N o d o F i l h o} Uma observao: o correto se referir ao nodo como OID ou objeto, mas vou usar nodo enquanto considerar que ele represente com mais clareza o conceito e ir mudando para OID no decorrer do texto. Perdoem a falta de rigor tcnico em favorecimento da aprendizagem. Voltando ao nosso caso, para indicar a relao de hierarquia entre o nodo acme, cujo suposto nmero privado foi 54321, e a sua origem, enterprises, fazemos a seguinte declarao: a c m e: : ={e n t e r p r i s e s5 4 3 2 1} Se voc esqueceu, a representao grfica da MIB est a seguir:
jedizone.wordpress.com/2012/03/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-5/ 1/8
04/10/13
(http://jedizone.files.wordpress.com/2012/02/mibexemplo.png) MIB exemplo rvore Observando a hierarquia, possvel notar que temos o nodo exemplo logo a seguir, com nmero zero. Ou seja: e x e m p l o: : ={a c m e0} Da mesma forma, os nodos leds e sistema, derivados de exemplo, so representados como abaixo, em plena conformidade com o nosso diagrama de MIB: l e d s : : ={e x e m p l o0} s i s t e m a: : ={e x e m p l o1} Finalmente, temos derivaes de leds e sistema, onde realmente se encontram os objetos que queremos ter acesso: c a p s L o c k : : ={l e d s0} n u m L o c k : : ={l e d s1} s c r o l l L o c k: : ={l e d s2} r u n T i m e : : ={s i s t e m a0} Colocando tudo junto, ficamos com a lista abaixo (compare este resultado com a figura que represente a MIB, caso tenha dvida): a c m e : : ={e n t e r p r i s e s5 4 3 2 1} e x e m p l o : : ={a c m e0} l e d s : : ={e x e m p l o0} s i s t e m a : : ={e x e m p l o1} c a p s L o c k : : ={l e d s0} n u m L o c k : : ={l e d s1} s c r o l l L o c k: : ={l e d s2} r u n T i m e : : ={s i s t e m a0} Fcil, nhein ? Mas no s isso. Precisamos ainda detalhar cada entrada dessas. Algumas delas so apenas relaes de hierarquia que precisam ser declaradas, outras so objetos que sero realmente lidos e precisam ter definidos os seus tipos de dados, direitos de acesso, descrio, etc. Tambm preciso prover uma informao geral sobre a MIB, como data de criao, verso, entre outras coisas.
jedizone.wordpress.com/2012/03/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-5/ 2/8
04/10/13
04/10/13
apenas uma faixa de valores, sem rtulos, voc pode usar algo como INTEGER(0..65536), indicando uma faixa de 0 a 65536. Tambm possvel usar o tipo Integer32 e no ter que especificar faixas (RFC 2578). Notou como simples colocar strings longas, de mltiplas linhas ? numLock segue o mesmo padro de capsLock, por ser somente leitura: n u m L o c kO B J E C T T Y P E S Y N T A XI N T E G E R{a c e s o ( 1 ) ,a p a g a d o ( 2 )} A C C E S Sr e a d o n l y S T A T U Sm a n d a t o r y D E S C R I P T I O N " N u mL o c kL e dS t a t u s : 1 :A c e s o 2 :A p a g a d o " : : ={l e d s1} Apenas scrollLock se altera, j que permite a escrita no objeto. No preciso ter midi-chlorians no sangue para chutar como ficaria: s c r o l l L o c kO B J E C T T Y P E S Y N T A XI N T E G E R{a c e s o ( 1 ) ,a p a g a d o ( 2 )} A C C E S Sr e a d w r i t e S T A T U Sm a n d a t o r y D E S C R I P T I O N " S c r o l lL o c kL e dS t a t u s : 1 :A c e s o 2 :A p a g a d o " : : ={l e d s2} Isto completa a descrio dos objetos que sero acessados mas faltam ainda trs coisas: 1. A descrio da MIB exemplo que estamos criando (autor, data, reviso, etc) 2. Detalhamento de nodos que so puramente para descrio da hierarquia (leds e sistema) 3. Sees de importao de macros, algo parecido com o que temos nos #includes em um programa em C.
Detalhando o mdulo
Para a descrio da MIB, a referncia a RFC 2578, que apresenta todos os detalhes. A grosso modo, a nossa definio poderia ser feita com a ajuda da macro MODULE-IDENTITY:
jedizone.wordpress.com/2012/03/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-5/
4/8
04/10/13
e x e m p l oM O D U L E I D E N T I T Y L A S T U P D A T E D" 2 0 1 2 0 3 0 1 0 0 0 0 Z " O R G A N I Z A T I O N" A C M ES / A " C O N T A C T I N F O " M a r c e l oB a r r o sd eA l m e i d a S e r t a o z i n h o / S P B r a z i lh t t p : / / j e d i z o n e . w o r d p r e s s . c o m " D E S C R I P T I O N " e x e m p l oM I B ,i n i t i a lr e v i s i o n " : : ={a c m e0} Relativamente simples, no ? Caso a MIB mude, voc pode ir adicionando a descrio das revises com os campos REVISION e DESCRIPTION. Perceba tambm que a data segue o formato YYYYMMDDHHMMZ. O Z significa GMT e precisa estar no final. Os outros campos so auto-explicativos.
Detalhando a hierarquia
Objetos teis apenas para montagem da hierarquia, como leds e sistema, so definidos com a ajuda de OBJECT IDENTIFIER, sem muitos rodeios: a c m eO B J E C TI D E N T I F I E R : : ={e n t e r p r i s e s5 4 3 2 1} l e d sO B J E C TI D E N T I F I E R : : ={e x e m p l o0} s i s t e m aO B J E C TI D E N T I F I E R: : ={e x e m p l o1}
jedizone.wordpress.com/2012/03/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-5/
5/8
04/10/13
E X E M P L O M I BD E F I N I T I O N S: : =B E G I N I M P O R T S M O D U L E I D E N T I T Y , O B J E C T T Y P E , C o u n t e r 3 2F R O MS N M P v 2 S M I , e n t e r p r i s e sF R O MS N M P v 2 S M I ; -N o s s ad e c l a r a od eM I Bv a ia q u id e n t r o! E N D Fica um lembrete de que a conveno usar nomes de OIDs que comecem em letras minsculas e que o nome da MIB deve ser escrito em letras maisculas. Tambm no vlido usar _ na definio do nome, da a definio EXEMPLO-MIB. Finalmente, basta colocar tudo junto e teremos o arquivo de MIB que pode ser visto ao final do post. Salve-o com o nome EXEMPLO-MIB. Neste ponto, uma vez que voc j deve ter entendido a lgica da MIB, no difcil comear a planejar a sua MIB. De novo, no deixe de ler as RFCs pertinentes para aprender a usar outros tipos de dados e aprofundar-se nos detalhes (a lista de leituras est logo ao final). Por hoje s. No prximo post (http://jedizone.wordpress.com/2012/03/08/o-guia-definitivo-para-osiniciantes-em-net-snmp-6/) vamos dar uma pausa na teoria e fazer a instalao do Net-SNMP. Vamos precisar tambm do cdigo fonte para adicionar a nossa MIB no agente. At l !
Referncias
RFC4181 (http://www.ietf.org/rfc/rfc4181.txt): Guidelines for Authors and Reviewers of MIB Documents RFC2578 (http://www.ietf.org/rfc/rfc2578.txt): Structure of Management Information Version 2 (SMIv2) RFC1212 (http://www.ietf.org/rfc/rfc1212.txt): Concise MIB Definitions Dicas (http://www.mibdesigner.com/html/mibdesign.html)do que fazer e no fazer
Arquivo EXEMPLO-MIB
E X E M P L O M I BD E F I N I T I O N S: : =B E G I N I M P O R T S M O D U L E I D E N T I T Y , O B J E C T T Y P E , C o u n t e r 3 2F R O MS N M P v 2 S M I ,
jedizone.wordpress.com/2012/03/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-5/ 6/8
04/10/13
e n t e r p r i s e sF R O MS N M P v 2 S M I ; -D e s c r i od aM I Be x e m p l o e x e m p l oM O D U L E I D E N T I T Y L A S T U P D A T E D" 2 0 1 2 0 3 0 1 0 0 0 0 Z " O R G A N I Z A T I O N" A C M ES / A " C O N T A C T I N F O " M a r c e l oB a r r o sd eA l m e i d a S e r t a o z i n h o / S P B r a z i l-h t t p : / / j e d i z o n e . w o r d p r e s s . c o m " D E S C R I P T I O N " e x e m p l oM I B ,i n i t i a lr e v i s i o n . " : : ={a c m e0} -H i e r a r q u i aa u x i l i a r a c m e O B J E C TI D E N T I F I E R: : ={e n t e r p r i s e s5 4 3 2 1} l e d s O B J E C TI D E N T I F I E R: : ={e x e m p l o0} s i s t e m a O B J E C TI D E N T I F I E R: : ={e x e m p l o1} -O b j e t o se x p o r t a d o s c a p s L o c kO B J E C T T Y P E S Y N T A X I N T E G E R{a c e s o ( 1 ) ,a p a g a d o ( 2 )} A C C E S S r e a d o n l y S T A T U S m a n d a t o r y D E S C R I P T I O N " C a p sL o c kL e dS t a t u s : 1 :A c e s o 2 :A p a g a d o " : : ={l e d s0} n u m L o c kO B J E C T T Y P E S Y N T A X I N T E G E R{a c e s o ( 1 ) ,a p a g a d o ( 2 )} A C C E S S r e a d o n l y S T A T U S m a n d a t o r y D E S C R I P T I O N " N u mL o c kL e dS t a t u s : 1 :A c e s o 2 :A p a g a d o
jedizone.wordpress.com/2012/03/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-5/ 7/8
04/10/13
" : : ={l e d s1} s c r o l l L o c kO B J E C T T Y P E S Y N T A X I N T E G E R{a c e s o ( 1 ) ,a p a g a d o ( 2 )} A C C E S S r e a d w r i t e S T A T U S m a n d a t o r y D E S C R I P T I O N " S c r o l lL o c kL e dS t a t u s : 1 :A c e s o 2 :A p a g a d o " : : ={l e d s2} r u n T i m eO B J E C T T Y P E S Y N T A X C o u n t e r 3 2 A C C E S S r e a d o n l y S T A T U S m a n d a t o r y D E S C R I P T I O N" C u r r e n tr u n n i n gi m ei ns e c o n d s " : : ={s i s t e m a3} E N D About these ads (http://en.wordpress.com/aboutthese-ads/) This entry was posted on maro 2, 2012, 2:11 am and is filed under Linux, Redes, SNMP. You can follow any responses to this entry through RSS 2.0. Voc pode deixar uma resposta, ou trackback do seu prprio site. COMENTRIOS (1) TRACKBACKS (2) Linux , NET-SNMP , SNMP
#1 por tales em setembro 19, 2013 - 3:11 pm Muito bom Estou comeando a implementao de um agente com MIBs personalizadas e este foi a melhor orientao que li at agora, fala detalhadamente sobre o assunto. Mais uma vez parabns. Se tiver mais informaes sobre SNMP, MIB ou gerenciamento de redes gostaria de ler tambm. 1. O guia definitivo para os iniciantes em Net-SNMP (6) Jedizone 2. O guia definitivo para os iniciantes em Net-SNMP (4) | Jedizone
jedizone.wordpress.com/2012/03/02/o-guia-definitivo-para-os-iniciantes-em-net-snmp-5/
8/8
04/10/13
Jedizone
Introduo
No post anterior (http://jedizone.wordpress.com/2012/03/02/o-guia-definitivo-para-os-iniciantes-emnet-snmp-5/) entendemos como criar a nossa MIB. Hoje iremos validar a MIB criada e prepar-la para uso como o Net-SNMP. Todos os testes foram realizados no Ubuntu 10.10 e tambm no Linux Mint 12, usando os pacotes originais de cada distribuio. Ambas usavam verses do Net-SNMP derivadas da verso original 5.4.3.
Instalando as dependncias
O primeiro passo instalar os programas necessrios e tambm as MIBs oficiais. O comando abaixo deve resolver, j que as dependncias do libsnmp-dev e snmp iro trazer os outros pacotes necessrios. J o pacote snmp-mibs-downloader faz a mgica de baixar todas as MIBs requeridas. Se este processo falhar, voc pode tentar novamente executando o script /usr/bin/download-mibs diretamente. s u d oa p t g e ti n s t a l ls n m p m i b s d o w n l o a d e rl i b s n m p d e vs n m p
Preparando o ambiente
Como vamos realizar todas as tarefas dentro da conta usurio para evitar conflitos com verses de Net-SNMP do seu sistema, ser necessrio criar alguns diretrios. So eles: m k d i rp~ / . s n m p / m i b s / m k d i rp~ / s n m p / s r c /
jedizone.wordpress.com/2012/03/08/o-guia-definitivo-para-os-iniciantes-em-net-snmp-6/ 1/6
04/10/13
Copie a MIB que criamos no post anterior (EXEMPLO-MIB) para o diretrio ~/.snmp/mibs/. Estamos assumindo que o arquivo da MIB ser denominado de EXEMPLO-MIB, use exatamente este nome para poder reproduzir o contedo do post.
Verificando a instalao
Para se certificar de que tudo est certo, verifique como o Net-SNMP est procurando as informaes de diretrios de MIBs com o comando: n e t s n m p c o n f i gd e f a u l t m i b d i r s A sada deve ser algo como abaixo:
/ h o m e / m a r c e l o / . s n m p / m i b s : / u s r / s h a r e / m i b s / s i t e : / u s r / s h a r e / s n m p / m i b s : / u s r / s h a r e / m Teste tambm os caminhos de configurao com: n e t s n m p c o n f i gs n m p c o n f p a t h Sada: / e t c / s n m p : / u s r / s h a r e / s n m p : / u s r / l i b / s n m p : / h o m e / m a r c e l o / . s n m p : / v a r / l i b / s n m p Ou seja, ~/.snmp/mibs mesmo um local de procura de MIBs e ~/.snmp um local de configurao (no meu caso, o diretrio de usurio /home/marcelo/) Crie o arquivo ~/.snmp/snmp.conf, com o seguinte contedo m i b s+ E X E M P L O M I B Isto ir permitir a carga da sua MIB de dentro da sua prpria conta, sem precisar escrever em reas onde somente o administrador da mquina teria acesso.
Validando a MIB
Para verificar se a MIB no tem nenhum erro, percorra-a com o snmptranslate: s n m p t r a n s l a t eT pI Ra c m e Dever ser produzida uma sada em rvore, evidenciando tudo que foi feito, como a seguir:
jedizone.wordpress.com/2012/03/08/o-guia-definitivo-para-os-iniciantes-em-net-snmp-6/
2/6
04/10/13
+ a c m e ( 5 4 3 2 1 ) | + e x e m p l o ( 0 ) | + l e d s ( 0 ) | | | + -R -E n u m V a l c a p s L o c k ( 0 ) | | V a l u e s :a c e s o ( 1 ) ,a p a g a d o ( 2 ) | + -R -E n u m V a l n u m L o c k ( 1 ) | | V a l u e s :a c e s o ( 1 ) ,a p a g a d o ( 2 ) | + -R W -E n u m V a l s c r o l l L o c k ( 2 ) | V a l u e s :a c e s o ( 1 ) ,a p a g a d o ( 2 ) | + s i s t e m a ( 1 ) | + -R -C o u n t e r r u n T i m e ( 3 ) Fique atento aos seguinte detalhes: O nome do arquivo da MIB e a definio inicial dentro do arquivo da MIB devem bater: EXEMPLO-MIB e EXEMPLO-MIB DEFINITIONS (ver dentro do arquivo). Ao rodar o comando snmptranslate, o que importa o nome do OID. No caso, leia a MIB e ver que, dentro dela, existe um OID exemplo. Alis, voc poderia inspecionar outro ponto qualquer da rvore. Por exemplo: s n m p t r a n s l a t eT pI Rl e d s + l e d s ( 0 ) | + -R -E n u m V a l c a p s L o c k ( 0 ) | V a l u e s :a c e s o ( 1 ) ,a p a g a d o ( 2 ) + -R -E n u m V a l n u m L o c k ( 1 ) | V a l u e s :a c e s o ( 1 ) ,a p a g a d o ( 2 ) + -R W -E n u m V a l s c r o l l L o c k ( 2 ) V a l u e s :a c e s o ( 1 ) ,a p a g a d o ( 2 ) Se deu tudo certo at agora, o passo seguinte comear a escrever o cdigo de acesso aos dados da sua MIB.
04/10/13
O mib2c usa um perfil de gerao de cdigo (veja a lista completa com ls /etc/snmp/mib2c.*). O perfil a ser usado depender da complexidade da sua MIB e das respostas que ela precisa prover. No nosso caso, existiro apenas leituras simples de OIDs, sem tabelas ou outras estruturas mais complexas. Isto pode ser tranquilamente gerado pelo perfil escalar. O mib2c vai precisar ainda de um OID partir do qual ele ir gerar os callbacks. Vamos usar o OID exemplo, o nome do mduloda nossa MIB: c d~ / s n m p / s r c m i b 2 ccm i b 2 c . s c a l a r . c o n fe x e m p l o A sada deve ser algo como abaixo: w r i t i n gt oe x e m p l o . h w r i t i n gt oe x e m p l o . c r u n n i n gi n d e n to ne x e m p l o . c r u n n i n gi n d e n to ne x e m p l o . h Este comando ir gerar um arquivo exemplo.c e outro exemplo.h, com todos os esqueletos de funo e definies necessrios. Como dever de casa, inspecione estes arquivos e verifique, por exemplo, os registros de OIDs. Parte do arquivo est abaixo, para os que no puderem rodar ainda o mib2c:
jedizone.wordpress.com/2012/03/08/o-guia-definitivo-para-os-iniciantes-em-net-snmp-6/
4/6
04/10/13
/ * *I n i t i a l i z e st h ee x e m p l om o d u l e* / v o i d i n i t _ e x e m p l o ( v o i d ) { s t a t i co i dc a p s L o c k _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 0 , 0} ; s t a t i co i dn u m L o c k _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 0 , 1} ; s t a t i co i ds c r o l l L o c k _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 0 , 2} ; s t a t i co i dr u n T i m e _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 1 , 3} ; D E B U G M S G T L ( ( " e x e m p l o " ," I n i t i a l i z i n g \ n " ) ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " c a p s L o c k " ,h a n d l e _ c a p s L o c k , c a p s L o c k _ o i d ,O I D _ L E N G T H ( c a p s L o c k _ o i d ) , H A N D L E R _ C A N _ R O N L Y ) ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " n u m L o c k " ,h a n d l e _ n u m L o c k , n u m L o c k _ o i d ,O I D _ L E N G T H ( n u m L o c k _ o i d ) , H A N D L E R _ C A N _ R O N L Y ) ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " s c r o l l L o c k " ,h a n d l e _ s c r o l l L o c k , s c r o l l L o c k _ o i d ,O I D _ L E N G T H ( s c r o l l L o c k _ o i d ) , H A N D L E R _ C A N _ R W R I T E ) ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " r u n T i m e " ,h a n d l e _ r u n T i m e , r u n T i m e _ o i d ,O I D _ L E N G T H ( r u n T i m e _ o i d ) , H A N D L E R _ C A N _ R O N L Y ) ) ; } Basta agora preencher as funes e recompilar o net-snmp. Mas isto vai ficar para o prximo post (http://jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/). No perca ! About these ads (http://en.wordpress.com/aboutthese-ads/) This entry was posted on maro 8, 2012, 11:45 pm and is filed under Linux, Redes, SNMP. You can follow any responses to this entry through RSS 2.0. Voc pode deixar uma resposta, ou trackback do seu prprio site. COMENTRIOS (0) TRACKBACKS (2) Linux , NET-SNMP , SNMP
1. O guia definitivo para os iniciantes em Net-SNMP (7) Jedizone 2. O guia definitivo para os iniciantes em Net-SNMP (5) | Jedizone
jedizone.wordpress.com/2012/03/08/o-guia-definitivo-para-os-iniciantes-em-net-snmp-6/
5/6
04/10/13
jedizone.wordpress.com/2012/03/08/o-guia-definitivo-para-os-iniciantes-em-net-snmp-6/
6/6
04/10/13
Jedizone
Introduo
No post anterior (http://jedizone.wordpress.com/2012/03/08/o-guia-definitivo-para-os-iniciantes-emnet-snmp-6/) usamos o aplicativo mib2c para gerar o esqueleto de cdigo da nossa MIB. Neste post discutiremos como rechear o esqueleto de cdigo gerado. No fundo, a quantidade de cdigo necessria bem pequena quando se usa o modelo escalar de gerao, facilitando bastante uma primeira implementao do agente. Recomendo que leiam depois o tutorial (http://www.netsnmp.org/wiki/index.php/TUT:Writing_a_MIB_Module) disponvel no site do Net-SNMP para maiores esclarecimento e dicas. Tambm recomendo que olhem a implementao de outras mdulos para aprenderem um pouco mais atravs de exemplos (os fontes do Net-SNMP podem ajudar).
04/10/13
Inicializando a MIB
Para cada mdulo gerado com o mib2c usando a opo escalar, ser gerada uma funo de inicializao com o prottipo abaixo, chamada apenas uma vez, na partida. v o i di n i t _ n o m e d o m o d u l o ( v o i d ) Dentro desta funo voc deve inicializar os dados que pretende usar posteriormente e registrar cada OID que tenha um callback associado com ajuda da funo netsnmp_register_scalar (http://www.net-snmp.org/dev/agent/group__scalar.html). No nosso caso, foi feita a seguinte inicializao e registro (o cdigo foi generosamente criado pelo nosso revisor e colaborador, Alan Carvalho (http://acassis.wordpress.com/)): # i n c l u d e< t i m e . h > # i n c l u d e< s t d i o . h > # i n c l u d e< X 1 1 / X l i b . h > # i n c l u d e< X 1 1 / X K B l i b . h > # i n c l u d e< n e t s n m p / n e t s n m p c o n f i g . h > # i n c l u d e< n e t s n m p / n e t s n m p i n c l u d e s . h > # i n c l u d e< n e t s n m p / a g e n t / n e t s n m p a g e n t i n c l u d e s . h > # i n c l u d e" e x e m p l o . h " # d e f i n eC A P S L O C K1 # d e f i n eN U M L O C K2 # d e f i n eS C R L O C K4 s t a t i ci n tc a p s L o c k L E D=0 ; s t a t i ci n tn u m L o c k L E D=0 ; s t a t i ci n ts c r o l l L o c k L E D=0 ; u n s i g n e di n tk b d ; D i s p l a y* d i s p=N U L L ; / * *I n i t i a l i z e st h ee x e m p l om o d u l e* / v o i d i n i t _ e x e m p l o ( v o i d ) { s t a t i co i dc a p s L o c k _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 0 , 0} ; s t a t i co i dn u m L o c k _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 0 , 1} ; s t a t i co i ds c r o l l L o c k _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 0 , 2} ; s t a t i co i dr u n T i m e _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 1 , 3} ; D E B U G M S G T L ( ( " e x e m p l o " ," I n i t i a l i z i n g \ n " ) ) ;
jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/ 2/15
04/10/13
/ *O p e nXD i s p l a yt or e a dk e y b o a r ds t a t u sl a t e r* / d i s p=X O p e n D i s p l a y ( N U L L ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " c a p s L o c k " ,h a n d l e _ c a p s L o c k , c a p s L o c k _ o i d ,O I D _ L E N G T H ( c a p s L o c k _ o i d ) , H A N D L E R _ C A N _ R O N L Y ) ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " n u m L o c k " ,h a n d l e _ n u m L o c k , n u m L o c k _ o i d ,O I D _ L E N G T H ( n u m L o c k _ o i d ) , H A N D L E R _ C A N _ R O N L Y ) ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " s c r o l l L o c k " ,h a n d l e _ s c r o l l L o c k , s c r o l l L o c k _ o i d ,O I D _ L E N G T H ( s c r o l l L o c k _ o i d ) , H A N D L E R _ C A N _ R W R I T E ) ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " r u n T i m e " ,h a n d l e _ r u n T i m e , r u n T i m e _ o i d ,O I D _ L E N G T H ( r u n T i m e _ o i d ) , H A N D L E R _ C A N _ R O N L Y ) ) ; } Em azul est a parte efetivamente criada pelo Alan, para que vocs tenham um noo do trabalho. D pra perceber que ficou a cargo do programador basicamente a inicializao da varivel disp e de variveis internas do mdulo.
jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/
3/15
04/10/13
i n t h a n d l e _ c a p s L o c k ( n e t s n m p _ m i b _ h a n d l e r* h a n d l e r , n e t s n m p _ h a n d l e r _ r e g i s t r a t i o n* r e g i n f o , n e t s n m p _ a g e n t _ r e q u e s t _ i n f o * r e q i n f o , n e t s n m p _ r e q u e s t _ i n f o * r e q u e s t s ) { / *W ea r en e v e rc a l l e df o raG E T N E X Ti fi t ' sr e g i s t e r e da sa " i n s t a n c e " ,a si t ' s" m a g i c a l l y "h a n d l e df o ru s . * / i f( d i s p ) { X k b G e t I n d i c a t o r S t a t e ( d i s p ,X k b U s e C o r e K b d ,& k b d ) ; / *ai n s t a n c eh a n d l e ra l s oo n l yh a n d su so n er e q u e s ta tat i m e ,s o w ed o n ' tn e e dt ol o o po v e ral i s to fr e q u e s t s ;w e ' l lo n l yg e to n e .* / s w i t c h ( r e q i n f o > m o d e ){
c a s eM O D E _ G E T : s n m p _ s e t _ v a r _ t y p e d _ v a l u e ( r e q u e s t s > r e q u e s t v b ,A S N _ I N T E G E R , ( u _ c h a r* )& c a p s L o c k L E D ,s i z e o f ( c a p s L o c k L E b r e a k ;
d e f a u l t : / *w es h o u l dn e v e rg e th e r e ,s ot h i si sar e a l l yb a de r r o r* / s n m p _ l o g ( L O G _ E R R ," u n k n o w nm o d e( % d )i nh a n d l e _ c a p s L o c k \ n " ,r e q i n f o r e t u r nS N M P _ E R R _ G E N E R R ; } r e t u r nS N M P _ E R R _ N O E R R O R ; } O switch permite identificar o tipo de requisio via reqinfo->mode e a funo snmp_set_var_typed_value() realiza a cpia do valor desejado (contedo da varivel capsLockLED) dentro do buffer de resposta. Se voc for investigar a estrutura netsnmp_request_info (http://www.netsnmp.org/dev/agent/structnetsnmp__request__info__s.html), vai notar que requestvb, do tipo netsnmp_variable_list (http://www.net-snmp.org/dev/agent/structvariable__list.html), possui o campo de dados (val (http://www.net-snmp.org/dev/agent/structvariable__list.html)) definido como uma unio dos diversos tipos de dados (http://www.netsnmp.org/dev/agent/unionnetsnmp__vardata.html) do Net-SNMP. a estratgia para tratar tipos diferentes de dados com uma mesma interface (union). Estratgia, alis, bastante comum em C.
04/10/13
ser gravado (estado RESERVE1 da mquina de estados abaixo, retirada do site do Net-SNMP (http://www.net-snmp.org/wiki/images/5/5c/Set-actions.jpg)), aloque espao para ele (estado RESERVE2) e s ento requisita a escrita (estado ACTION). O valor s efetivado posteriormente, com o estado COMMIT (qualquer semelhana com uma base de dados no mera coincidncia). Perceba que existem estados para tratar as falhas tambm, como no caso de no existir espao para o recurso (sada pelo estado FREE) ou em falha da escrita (estado UNDO, que desfaz tudo e retorna ao valor anterior).
Felizmente o nosso caso bastante simples e possvel ignorar a maioria dos estados e implementar apenas o estado ACTION para o mtodo SET. Obviamente, tambm necessrio implementar o mtodo GET. Veja como ficou ento o callback para o scroll lock: i n t h a n d l e _ s c r o l l L o c k ( n e t s n m p _ m i b _ h a n d l e r* h a n d l e r , n e t s n m p _ h a n d l e r _ r e g i s t r a t i o n* r e g i n f o , n e t s n m p _ a g e n t _ r e q u e s t _ i n f o * r e q i n f o , n e t s n m p _ r e q u e s t _ i n f o * r e q u e s t s ) { i n tr e t ; X K e y b o a r d C o n t r o lv a l u e s ; / *W ea r en e v e rc a l l e df o raG E T N E X Ti fi t ' sr e g i s t e r e da sa " i n s t a n c e " ,a si t ' s" m a g i c a l l y "h a n d l e df o ru s . * / i f( d i s p ) { X k b G e t I n d i c a t o r S t a t e ( d i s p ,X k b U s e C o r e K b d ,& k b d ) ; s c r o l l L o c k L E D=( k b d&S C R L O C K )= =S C R L O C K ; }
jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/ 5/15
04/10/13
c a s eM O D E _ G E T : s n m p _ s e t _ v a r _ t y p e d _ v a l u e ( r e q u e s t s > r e q u e s t v b ,A S N _ I N T E G E R , ( u _ c h a r* )& s c r o l l L o c k L E D ,s i z e o f ( s c r o l l L o b r e a k ;
/ * *S E TR E Q U E S T * *m u l t i p l es t a t e si nt h et r a n s a c t i o n . S e e : *h t t p : / / w w w . n e t s n m p . o r g / t u t o r i a l 5 / t o o l k i t / m i b _ m o d u l e / s e t a c t i o n s . j p * / c a s eM O D E _ S E T _ R E S E R V E 1 : / *o ry o uc o u l du s en e t s n m p _ c h e c k _ v b _ t y p e _ a n d _ s i z ei n s t e a d* / r e t=n e t s n m p _ c h e c k _ v b _ t y p e ( r e q u e s t s > r e q u e s t v b ,A S N _ I N T E G E R ) ; i f(r e t! =S N M P _ E R R _ N O E R R O R){ n e t s n m p _ s e t _ r e q u e s t _ e r r o r ( r e q i n f o ,r e q u e s t s ,r e t) ; } b r e a k ; c a s eM O D E _ S E T _ R E S E R V E 2 : / *X X Xm a l l o c" u n d o "s t o r a g eb u f f e r* / b r e a k ; c a s eM O D E _ S E T _ F R E E : / *X X X :f r e er e s o u r c e sa l l o c a t e di nR E S E R V E 1a n d / o r R E S E R V E 2 . S o m e t h i n gf a i l e ds o m e w h e r e ,a n dt h es t a t e s b e l o ww o n ' tb ec a l l e d .* / b r e a k ; c a s eM O D E _ S E T _ A C T I O N : / *X X X :p e r f o r mt h ev a l u ec h a n g eh e r e* / / *S e t u pS c r o l l L o c kL E D* / / *S C R O L LL O C Ki sv a l u e3i nXG r a p h i cm o d e* / v a l u e s . l e d=S C R L O C K-1 ; / *l e d _ m o d e=0i sL E DO F F .l e d _ m o d e=1i sL E DO N .* / v a l u e s . l e d _ m o d e=* ( r e q u e s t s > r e q u e s t v b > v a l . i n t e g e r ) ; / *C h a n g es t a t u so fS c r o l l L o c kL E D* / X C h a n g e K e y b o a r d C o n t r o l ( d i s p ,K B L e d|K B L e d M o d e ,& v a l u e s ) ; / *S y n c r o n i z ei m e d i a t e l y* / X S y n c ( d i s p ,0 ) ;
jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/ 6/15
04/10/13
b r e a k ; c a s eM O D E _ S E T _ C O M M I T : / *X X X :d e l e t et e m p o r a r ys t o r a g e* / b r e a k ; c a s eM O D E _ S E T _ U N D O : / *X X X :U N D Oa n dr e t u r nt op r e v i o u sv a l u ef o rt h eo b j e c t* / b r e a k ;
d e f a u l t : / *w es h o u l dn e v e rg e th e r e ,s ot h i si sar e a l l yb a de r r o r* / s n m p _ l o g ( L O G _ E R R ," u n k n o w nm o d e( % d )i nh a n d l e _ s c r o l l L o c k \ n " ,r e q i n r e t u r nS N M P _ E R R _ G E N E R R ; } r e t u r nS N M P _ E R R _ N O E R R O R ; } Moleza, nhein ? Basicamente cdigo para acesso ao led, sendo que o valor recebido veio atravs da unio citada anteriormente (requests->requestvb->val.integer ).
Listagem final
A seguir esto os arquivos exemplo.c e exemplo.h, para referncia. No prximo post vamos recompilar o Net-SNMP usando estes arquivos. Aproveite para ler um pouco a wiki do Net-SNMP (http://www.net-snmp.org/wiki/). Ela levemente confusa mas com muita informao til. At l !
exemplo.h
jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/
7/15
04/10/13
/ * *N o t e :t h i sf i l eo r i g i n a l l ya u t o g e n e r a t e db ym i b 2 cu s i n g * :m i b 2 c . s c a l a r . c o n f1 1 8 0 52 0 0 5 0 1 0 70 9 : 3 7 : 1 8 Zd t s 1 2$ * / # i f n d e fE X E M P L O _ H # d e f i n eE X E M P L O _ H / *f u n c t i o nd e c l a r a t i o n s* / v o i di n i t _ e x e m p l o ( v o i d ) ; N e t s n m p _ N o d e _ H a n d l e rh a n d l e _ c a p s L o c k ; N e t s n m p _ N o d e _ H a n d l e rh a n d l e _ n u m L o c k ; N e t s n m p _ N o d e _ H a n d l e rh a n d l e _ s c r o l l L o c k ; N e t s n m p _ N o d e _ H a n d l e rh a n d l e _ r u n T i m e ; # e n d i f/ *E X E M P L O _ H* /
exemplo.c
/ * *N o t e :t h i sf i l eo r i g i n a l l ya u t o g e n e r a t e db ym i b 2 cu s i n g * :m i b 2 c . s c a l a r . c o n f1 1 8 0 52 0 0 5 0 1 0 70 9 : 3 7 : 1 8 Zd t s 1 2$ * / # i n c l u d e< t i m e . h > # i n c l u d e< s t d i o . h > # i n c l u d e< X 1 1 / X l i b . h > # i n c l u d e< X 1 1 / X K B l i b . h > # i n c l u d e< n e t s n m p / n e t s n m p c o n f i g . h > # i n c l u d e< n e t s n m p / n e t s n m p i n c l u d e s . h > # i n c l u d e< n e t s n m p / a g e n t / n e t s n m p a g e n t i n c l u d e s . h > # i n c l u d e" e x e m p l o . h " # d e f i n eC A P S L O C K1 # d e f i n eN U M L O C K2 # d e f i n eS C R L O C K4 s t a t i ci n tc a p s L o c k L E D=0 ; s t a t i ci n tn u m L o c k L E D=0 ; s t a t i ci n ts c r o l l L o c k L E D=0 ; u n s i g n e di n tk b d ; D i s p l a y* d i s p=N U L L ; / * *I n i t i a l i z e st h ee x e m p l om o d u l e* / v o i d
jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/ 8/15
04/10/13
i n i t _ e x e m p l o ( v o i d ) { s t a t i co i dc a p s L o c k _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 0 , 0} ; s t a t i co i dn u m L o c k _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 0 , 1} ; s t a t i co i ds c r o l l L o c k _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 0 , 2} ; s t a t i co i dr u n T i m e _ o i d [ ]={1 , 3 , 6 , 1 , 4 , 1 , 5 4 3 2 1 , 0 , 1 , 3} ; D E B U G M S G T L ( ( " e x e m p l o " ," I n i t i a l i z i n g \ n " ) ) ; / *O p e nXD i s p l a yt or e a dk e y b o a r ds t a t u sl a t e r* / d i s p=X O p e n D i s p l a y ( N U L L ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " c a p s L o c k " ,h a n d l e _ c a p s L o c k , c a p s L o c k _ o i d ,O I D _ L E N G T H ( c a p s L o c k _ o i d ) , H A N D L E R _ C A N _ R O N L Y ) ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " n u m L o c k " ,h a n d l e _ n u m L o c k , n u m L o c k _ o i d ,O I D _ L E N G T H ( n u m L o c k _ o i d ) , H A N D L E R _ C A N _ R O N L Y ) ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " s c r o l l L o c k " ,h a n d l e _ s c r o l l L o c k , s c r o l l L o c k _ o i d ,O I D _ L E N G T H ( s c r o l l L o c k _ o i d ) , H A N D L E R _ C A N _ R W R I T E ) ) ; n e t s n m p _ r e g i s t e r _ s c a l a r ( n e t s n m p _ c r e a t e _ h a n d l e r _ r e g i s t r a t i o n ( " r u n T i m e " ,h a n d l e _ r u n T i m e , r u n T i m e _ o i d ,O I D _ L E N G T H ( r u n T i m e _ o i d ) , H A N D L E R _ C A N _ R O N L Y ) ) ; } i n t h a n d l e _ c a p s L o c k ( n e t s n m p _ m i b _ h a n d l e r* h a n d l e r , n e t s n m p _ h a n d l e r _ r e g i s t r a t i o n* r e g i n f o , n e t s n m p _ a g e n t _ r e q u e s t _ i n f o * r e q i n f o , n e t s n m p _ r e q u e s t _ i n f o * r e q u e s t s ) { / *W ea r en e v e rc a l l e df o raG E T N E X Ti fi t ' sr e g i s t e r e da sa " i n s t a n c e " ,a si t ' s" m a g i c a l l y "h a n d l e df o ru s . * / i f( d i s p ) { X k b G e t I n d i c a t o r S t a t e ( d i s p ,X k b U s e C o r e K b d ,& k b d ) ; c a p s L o c k L E D=( k b d&C A P S L O C K )= =C A P S L O C K ; }
jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/ 9/15
04/10/13
c a s eM O D E _ G E T : s n m p _ s e t _ v a r _ t y p e d _ v a l u e ( r e q u e s t s > r e q u e s t v b ,A S N _ I N T E G E R , ( u _ c h a r* )& c a p s L o c k L E D ,s i z e o f ( c a p s L o c k L E b r e a k ;
d e f a u l t : / *w es h o u l dn e v e rg e th e r e ,s ot h i si sar e a l l yb a de r r o r* / s n m p _ l o g ( L O G _ E R R ," u n k n o w nm o d e( % d )i nh a n d l e _ c a p s L o c k \ n " ,r e q i n f o r e t u r nS N M P _ E R R _ G E N E R R ; } r e t u r nS N M P _ E R R _ N O E R R O R ; } i n t h a n d l e _ n u m L o c k ( n e t s n m p _ m i b _ h a n d l e r* h a n d l e r , n e t s n m p _ h a n d l e r _ r e g i s t r a t i o n* r e g i n f o , n e t s n m p _ a g e n t _ r e q u e s t _ i n f o * r e q i n f o , n e t s n m p _ r e q u e s t _ i n f o * r e q u e s t s ) { / *W ea r en e v e rc a l l e df o raG E T N E X Ti fi t ' sr e g i s t e r e da sa " i n s t a n c e " ,a si t ' s" m a g i c a l l y "h a n d l e df o ru s . * / i f( d i s p ) { X k b G e t I n d i c a t o r S t a t e ( d i s p ,X k b U s e C o r e K b d ,& k b d ) ; n u m L o c k L E D=( k b d&N U M L O C K )= =N U M L O C K ; } / *ai n s t a n c eh a n d l e ra l s oo n l yh a n d su so n er e q u e s ta tat i m e ,s o w ed o n ' tn e e dt ol o o po v e ral i s to fr e q u e s t s ;w e ' l lo n l yg e to n e .* / s w i t c h ( r e q i n f o > m o d e ){
c a s eM O D E _ G E T : s n m p _ s e t _ v a r _ t y p e d _ v a l u e ( r e q u e s t s > r e q u e s t v b ,A S N _ I N T E G E R , ( u _ c h a r* )& n u m L o c k L E D ,s i z e o f ( n u m L o c k L E D ) b r e a k ;
04/10/13
} i n t h a n d l e _ s c r o l l L o c k ( n e t s n m p _ m i b _ h a n d l e r* h a n d l e r , n e t s n m p _ h a n d l e r _ r e g i s t r a t i o n* r e g i n f o , n e t s n m p _ a g e n t _ r e q u e s t _ i n f o * r e q i n f o , n e t s n m p _ r e q u e s t _ i n f o * r e q u e s t s ) { i n tr e t ; X K e y b o a r d C o n t r o lv a l u e s ; / *W ea r en e v e rc a l l e df o raG E T N E X Ti fi t ' sr e g i s t e r e da sa " i n s t a n c e " ,a si t ' s" m a g i c a l l y "h a n d l e df o ru s . * / i f( d i s p ) { X k b G e t I n d i c a t o r S t a t e ( d i s p ,X k b U s e C o r e K b d ,& k b d ) ; s c r o l l L o c k L E D=( k b d&S C R L O C K )= =S C R L O C K ; } / *ai n s t a n c eh a n d l e ra l s oo n l yh a n d su so n er e q u e s ta tat i m e ,s o w ed o n ' tn e e dt ol o o po v e ral i s to fr e q u e s t s ;w e ' l lo n l yg e to n e .* / s w i t c h ( r e q i n f o > m o d e ){
c a s eM O D E _ G E T : s n m p _ s e t _ v a r _ t y p e d _ v a l u e ( r e q u e s t s > r e q u e s t v b ,A S N _ I N T E G E R , ( u _ c h a r* )& s c r o l l L o c k L E D ,s i z e o f ( s c r o l l L o b r e a k ;
04/10/13
R E S E R V E 2 . S o m e t h i n gf a i l e ds o m e w h e r e ,a n dt h es t a t e s b e l o ww o n ' tb ec a l l e d .* / b r e a k ; c a s eM O D E _ S E T _ A C T I O N : / *X X X :p e r f o r mt h ev a l u ec h a n g eh e r e* / / *S e t u pS c r o l l L o c kL E D* / / *S C R O L LL O C Ki sv a l u e3i nXG r a p h i cm o d e* / v a l u e s . l e d=S C R L O C K-1 ; / *l e d _ m o d e=0i sL E DO F F .l e d _ m o d e=1i sL E DO N .* / v a l u e s . l e d _ m o d e=* ( r e q u e s t s > r e q u e s t v b > v a l . i n t e g e r ) ; / *C h a n g es t a t u so fS c r o l l L o c kL E D* / X C h a n g e K e y b o a r d C o n t r o l ( d i s p ,K B L e d|K B L e d M o d e ,& v a l u e s ) ; / *S y n c r o n i z ei m e d i a t e l y* / X S y n c ( d i s p ,0 ) ; b r e a k ; c a s eM O D E _ S E T _ C O M M I T : / *X X X :d e l e t et e m p o r a r ys t o r a g e* / b r e a k ; c a s eM O D E _ S E T _ U N D O : / *X X X :U N D Oa n dr e t u r nt op r e v i o u sv a l u ef o rt h eo b j e c t* / b r e a k ;
d e f a u l t : / *w es h o u l dn e v e rg e th e r e ,s ot h i si sar e a l l yb a de r r o r* / s n m p _ l o g ( L O G _ E R R ," u n k n o w nm o d e( % d )i nh a n d l e _ s c r o l l L o c k \ n " ,r e q i n r e t u r nS N M P _ E R R _ G E N E R R ; } r e t u r nS N M P _ E R R _ N O E R R O R ; } i n t h a n d l e _ r u n T i m e ( n e t s n m p _ m i b _ h a n d l e r* h a n d l e r , n e t s n m p _ h a n d l e r _ r e g i s t r a t i o n* r e g i n f o , n e t s n m p _ a g e n t _ r e q u e s t _ i n f o * r e q i n f o , n e t s n m p _ r e q u e s t _ i n f o * r e q u e s t s ) { / *W ea r en e v e rc a l l e df o raG E T N E X Ti fi t ' sr e g i s t e r e da sa " i n s t a n c e " ,a si t ' s" m a g i c a l l y "h a n d l e df o ru s . * / t i m e _ tn o w=0 ; / *ai n s t a n c eh a n d l e ra l s oo n l yh a n d su so n er e q u e s ta tat i m e ,s o
jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/ 12/15
04/10/13
d e f a u l t : / *w es h o u l dn e v e rg e th e r e ,s ot h i si sar e a l l yb a de r r o r* / s n m p _ l o g ( L O G _ E R R ," u n k n o w nm o d e( % d )i nh a n d l e _ r u n T i m e \ n " ,r e q i n f o r e t u r nS N M P _ E R R _ G E N E R R ; } r e t u r nS N M P _ E R R _ N O E R R O R ; } About these ads (http://en.wordpress.com/aboutthese-ads/) This entry was posted on maro 21, 2012, 8:16 am and is filed under Linux, Redes, SNMP. You can follow any responses to this entry through RSS 2.0. Voc pode deixar uma resposta, ou trackback do seu prprio site. COMENTRIOS (12) TRACKBACKS (2) Linux , NET-SNMP , SNMP
#1 por acassis em maro 24, 2012 - 10:37 am Marcelo, A linha destacada em azul no inicio do seu post: if (disp) { XkbGetIndicatorState(disp, XkbUseCoreKbd, &kbd); capsLockLED = (kbd & CAPSLOCK) == CAPSLOCK; } deveria ter quebra de linha, ficou tudo na mesma linha. []s Alan #2 por Marcelo Barros em maro 24, 2012 - 12:17 pm Pois , pena que o wordpress no programa em C. Eu altero, ele acerta. Depois ele vai e muda sozinho se edito o post novamente. Tem um bug nele. No sei bem o que fazer neste caso . :/ #3 por Thiago Neves em julho 27, 2012 - 9:13 pm
jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/
Oi Marcelo, descobri a pouco tempo esse seu blog e estou achando bastante til para aprender13/15 a
04/10/13
Oi Marcelo, descobri a pouco tempo esse seu blog e estou achando bastante til para aprender a mexer no net-snmp Existem planos para um post 8? Abcs. #4 por Marcelo Barros em julho 28, 2012 - 12:23 am Sim, mais uns dois ou trs. Aguarde que o oitavo t semi pronto. #5 por Thiago Neves em julho 30, 2012 - 8:05 pm Caro Marcelo, uma dvida. Nesse ltimo post voc mostrou como gerar uma MIB com a estrutura SMIv2 e gerar um cdigo C relativo a essa estrutura. Esse cdigo em C possui funes GET e SET. Minha dvida , onde eu incorporaria essas funes GET e SET? Imagino que seja em algum programa que eu queira que seja visvel para o gerente snmp. isso mesmo? Abcs. #6 por cleitonbueno em julho 30, 2012 - 9:26 pm Talvez isso possa ajuda.. http://cleitonbueno.wordpress.com/2012/05/22/codigos-de-programacao-nos-posts-dowordpress/ #7 por Marcelo Barros em julho 31, 2012 - 12:04 am Thiago, Sim, voc vai ter que alimentar estes GET e SET de algum lugar. Existem algumas formas, que vo depender de como pretende fazer a sua integrao com o net-snmp. A mais simples o tratamento entrar dentro do cdigo final do net-snmp, ao escrev-lo dentro do arquivo gerado pelo net-snmp, algo que pretendo mostrar em breve. Mas existem outras formas. Voc pode implementar uma lib que carregada pelo net-snmp e que usada para fornecer os valores ou ainda possvel usar comunicao entre processos. Nestes casos, a complexidade cresce bastante. Eu acho mais simples deixar parte do seu cdigo dentro do net-snmp mesmo e ler/setar coisas em arquivos do /proc. O /proc seria uma espcie de gateway entre a manipulao do get/set e o grosso do seu programa. Isto pode no ser bom, dependendo das licenas que pretenda usar, da a comunicao entre processos o caminho. Tem exemplos disso no site do net-snmp. #8 por Marcelo Barros em julho 31, 2012 - 12:08 am Obrigado pela dica, Cleiton. Vou us-la daqui pra diante ! #9 por Renan Carlos em agosto 23, 2012 - 6:26 pm Ol, quando sai a prxima parte do tutorial? Abcs. #10 por Marcelo Barros (@marcelobarros) em agosto 23, 2012 - 7:48 pm Nos prximos dias, texto praticamente pronto, preciso apenas validar #11 por joao em abril 27, 2013 - 12:14 pm Ola. aonde consigo mais destas informaes ? estou aguardando o proximo post, porem estou em fase de implementao e preciso fazer funcionar. muito grato. joao
jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/ 14/15
04/10/13
#12 por lasacochehomme.com em junho 30, 2013 - 2:44 pm An outstanding share! Ive just forwarded this onto a co-worker who was conducting a little research on this. And he actually bought me lunch due to the fact that I discovered it for him lol. So allow me to reword this. Thank YOU for the meal!! But yeah, thanx for spending some time to talk about this topic here on your website. 1. O guia definitivo para os iniciantes em Net-SNMP (6) | Jedizone 2. O guia definitivo para os iniciantes em Net-SNMP (8) | Jedizone
jedizone.wordpress.com/2012/03/21/o-guia-definitivo-para-os-iniciantes-em-net-snmp/
15/15