2012-01-27 7 views
6

Ho sviluppato un'applicazione speciale per un'azienda sotto .net in C# ed è utilizzata per anni. Ora è stato sviluppato, una delle principali nuove funzionalità che devo implementare è quella di integrarlo con un altro software inviando trap SNMP ad esso in alcune situazioni di allarme.Definisci MIB e invia trap SNMP sotto .net

Sono uno sviluppatore esperto ma non ho mai utilizzato SNMP. Ho cercato su Google tutto il giorno ma mi sono sempre più confuso su questo argomento. Non ho un chiaro "punto di partenza". Comprendo le basi di SNMP ma non so dove e come iniziare l'implementazione.

Ho i dati che dovrei inviare tramite trap SNMP, ha circa 10 proprietà, alcune date, numeri e stringhe. Dovrei creare le definizioni MIB su queste proprietà. In seguito dovrei implementare una funzione nella mia applicazione che invia trap SNMP basati su questo MIB.

Il progetto è stato sviluppato in .net 4 in C#. Ho trovato questa libreria che sembra promettente: http://sharpsnmplib.codeplex.com/ Ha qualche esempio sull'invio di trap SNMP.

Il mio problema è: da dove cominciare? Come posso definire i file MIB? So che sono alcuni file di testo che devono essere compilati, ma non hanno trovato alcun editor MIB e aiuto su questo argomento.

Qualsiasi aiuto è apprezzato!

Grazie!

risposta

3

Non sono un esperto, ma ho esperienza di trovarmi nello stesso punto in cui eri e finalmente ho trovato qualcosa di abbastanza per il mio progetto.

Ho usato questa libreria codeplex che mi hai riferito prima e trovata abbastanza buona. Ecco alcuni suggerimenti per voi per passare attraverso il http://sharpsnmplib.codeplex.com/.

  • Per quanto riguarda la mia comprensione va un file MIB è necessaria quando si ha bisogno di fare uno snmpget e snmpset
    • Questa è una sorta di informare il server e il server di tornare al vostro cliente per chiedere più dettagliate informazioni, e può essere richiesto se avete bisogno di informazioni estese per essere condivisi sulla tua app
  • Se tutto ciò che serve è solo trappole, si può fare questo
    • eseguire lo snmpd.exe che agirà come l'SNMP ricezione del server g trap inviati dalla tua applicazione.
    • Scrivi un programma simile snmptrapd.exe e invia i tuoi trap.

Il collegamento http://www.net-snmp.org/wiki/index.php/TUT:snmptrap è una buona per ottenere una comprensione di base e ottenere informazioni più biblioteca.

Modifica: Ho appena perso un punto. Avrai bisogno del file MIB se usi get e set per snmp. Se tutto quello che hai sono trappole, potresti non averne bisogno.

+1

In tal caso, in che modo è possibile definire il formato ("campi dati") di una trap SNMP? – Tom

0

Puoi anche provare con snmpsharpnet che è molto utile per giocare con SNMP nella parte superiore di .NET?

Come editor MIB, utilizzo MG-SOFT MIB Browser, l'edizione professionale viene venduta con Visual MIB Builder per Windows.

1

Dal momento che a quanto pare si sta utilizzando il sistema operativo Windows per lavorare con SNMP allora avete bisogno di creare personalizzato agente di estensione SNMP al fine di aggiungere personalizzato SNMP OID e trappole che corrispondono al tuo sistema. Ogni OID presenterà letteralmente una variabile in cui è possibile memorizzare le informazioni. Here is an example of such DLL. Per quanto ne so i file MIB vengono utilizzati solo in Windows come riferimento per gli agenti SNMP e non possono essere utilizzati per aggiungere nuovi OID senza creare un agente SNMP personalizzato.

Quando si dispone della DLL dell'agente SNMP personalizzato, è necessario indicarlo nel registro. Può essere fatto in questo modo (esempio):

[HKEY_LOCAL_MACHINE\SOFTWARE\Symbol\MyAgent\CurrentVersion] 
"Pathname"="C:\\MyCustomAgent\\MyAgent.dll" 

;Add number of agent to the list (max num registered + 1) 
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ExtensionAgents] 
"10"="SOFTWARE\\Symbol\\MyAgent\\CurrentVersion" 

Successivamente è necessario riavviare il servizio SNMP. Se tutto è a posto, sarai in grado di utilizzare il nuovo OID personalizzato per impostare \ ottenere alcuni dati.

Per leggere \ scrivere nelle variabili SNMP è necessario utilizzare il gestore SNMP. Di solito uso Sharpsnmplib per farlo. Ci sono anche gestori di GUI che saranno utili durante il processo di debug, ad esempio: iReasoning MIB Browser.

Ecco il codice di esempio da usare che lib:

using System.Collections.Generic; 
using System.Net; 
using System.Net.Sockets; 
// SNMP Lib references 
using Lextm.SharpSnmpLib; 
using Mono.Options; 
using Lextm.SharpSnmpLib.Messaging; 
using Lextm.SharpSnmpLib.Security; 
... 
List vList = new List(); 
ISnmpData data; 
data = new OctetString("test"); // variable to add in to string OID 
Variable test = new Variable(new ObjectIdentifier("1.3.6.1.2.1.1.6.0"), data); // OID 
vList.Add(test); 
VersionCode versionH = VersionCode.V2; // SNMP protocol version to use 
IPAddress ipH; 
IPAddress.TryParse("127.0.0.1", out ipH); 
IPEndPoint receiverH = new IPEndPoint(ipH, 161); 
foreach (Variable variable in 
     Messenger.Set(versionH, receiverH, new OctetString("private"), vList, 10))// set variable 
     // Arguments: (ver of SNMP, IP, group, iList containing OID and variable, timeoout) 
     { 
      // output variable 
     } 
... 

Inoltre è possibile leggere l'articolo su come lavorare con SNMP nel sistema operativo Windows su TechNet: link. Questo articolo non è nuovo ma potrebbe aiutarti a capire come eseguire il wok con SNMP in Windows.

+0

"è necessario creare un agente di estensione SNMP personalizzato". Questo era vero quindici anni fa (quando ho fatto l'ultima programmazione SNMP) ma ora puoi inviare una trappola usando SnmpSendMsg dalla più recente API WinSNMP (anche se ora ha più di un decennio). Esempio qui: http://stackoverflow.com/questions/4498618/problem-sending-snmp-trap-and-manager-recognizing-it – arx

1

Se hai solo bisogno di inviare trap, non devi definire MIB. I MIB sono per le altre parti per comprendere il significato delle variabili in esso contenute. Puoi documentarlo usando altri formati come un file di testo.

Per l'invio di trap, è possibile utilizzare una libreria C# SNMP o semplicemente richiamare direttamente il programma snmptrap. Net-snmp fornisce strumenti a riga di comando gratuiti per l'invio di trap. (http://net-snmp.sf.net). Il suo utilizzo è piuttosto semplice.

Per verificare se le trap sono state inviate correttamente, è possibile utilizzare il browser MIB ireasoning gratuito (http://ireasoning.com/mibbrowser.shtml) per riceverle. Se può essere ricevuto, di solito significa che le tue trappole vanno bene.

1

Quindi da http://www.net-snmp.org/tutorial/tutorial-5/commands/snmptrap.html

La notifica SNMPv2

Il formato della notifica SNMPv2 è un po 'diversa. La definizione nel file MIB è la seguente:

NOTIFICATION-TEST-MIB DEFINITIONS ::= BEGIN 
     IMPORTS ucdavis FROM UCD-SNMP-MIB; 

demonotifs OBJECT IDENTIFIER ::= { ucdavis 991 } 

demo-notif NOTIFICATION-TYPE 
    STATUS current 
     OBJECTS { sysLocation } 
    DESCRIPTION "Just a test notification" 
     ::= { demonotifs 17 } 

END