Einzelnen Beitrag anzeigen

Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#2

Re: SNMP : DLL Sample zum Einhängen in Windows SNMP Service

  Alt 18. Feb 2010, 12:18
deine Theorie stimmt soweit - das ganze habe ich auch schon mal in die Praxis umgesetzt:

Die DLL exportiert mindestens MSDN-Library durchsuchenSnmpExtensionInit, MSDN-Library durchsuchenSnmpExtensionQuery und MSDN-Library durchsuchenSnmpExtensionTrap und erhält vom Service die Daten per IPC (z.B. Shared Memory), da sie ja dann in den Prozessraum vom SNMP-Dienst geladen wird.

Beim Starten des SNMP-Dienstes ruft derselbe als erstes SnmpExtensionInit auf, so dass die DLL die Basis-OID und den Trap-Event-Handle bekannt geben kann. Sofern vorhanden, wird danach SnmpExtensionInitEx aufgerufen, bis diese False retourniert, so dass zusätzliche Basis-OIDs bekannt gegeben werden können.

Später dann, wenn ein SNMP-Request-PDU vom Netzwerk her den SNMP-Dienst erreicht, und sich die gewünschten OIDs "unterhalb" einer deiner Basis-OIDs befinden, ruft der Dienst SnmpExtensionQuery auf, um von der DLL die entsprechenden Variablen-Werte zu erhalten und sendet diese dann per SNMP zurück zum Client.

Möchte die DLL einen SNMP-Trap absetzen, so wird der Trap-Event gesetzt, worauf der Dienst dann SnmpExtensionTrap der DLL aufruft, bis False retourniert wird, um so alle pendenten Traps "abzuholen".

Besonderes Augenmerk ist auf das Memory-Handling zu richten: teilweise behält die DLL die Verantwortung zum Freigeben von Speicher, teilweise übernimmt dies jedoch auch der SNMP-Dienst. Da der SNMP-Dienst typischerweise lange läuft, sollten Memory-Leaks vermieden werden, da sonst irgendwann das Memory vollläuft.

Die erlaubten Communities/Client-Hosts sowie die Trap-Verteilerliste wird zentral vom SNMP-Dienst verwaltet.
  Mit Zitat antworten Zitat