Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi SNMP : DLL Sample zum Einhängen in Windows SNMP Service (https://www.delphipraxis.net/147883-snmp-dll-sample-zum-einhaengen-windows-snmp-service.html)

moelski 18. Feb 2010 08:27


SNMP : DLL Sample zum Einhängen in Windows SNMP Service
 
Moin !

Ich muss einen Dienst in die Lage versetzen auf SNMP Anfragen zu reagieren. Nun habe ich erfahren das man sowas über den SNMP Dienst von Windows realisieren kann. Dazu muss man wohl eine DLL erstellen die 3 bestimmte Funktionen exportiert.
Diese DLL wird dann wohl in der Registry verankert und kann danach vom SNMP Dienst verwendet werden.

Soweit meine Theorie :gruebel:

Hat das schon mal jemand gemacht und könnte hier ein Beispiel posten - oder zumindest ein paar Stichwörter in den Raum werfen mit denen man bei Google & Co ggf. weiter kommt? Denn im Moment fehlt mir vollkommen der Ansatz für dieses Szenario :pale:

Basilikum 18. Feb 2010 11:18

Re: SNMP : DLL Sample zum Einhängen in Windows SNMP Service
 
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.

moelski 18. Feb 2010 13:57

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

Wäre es möglich das du mir etwas Quellcode zur Verfügung stellst?

Basilikum 18. Feb 2010 14:13

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

Zitat von moelski
Wäre es möglich das du mir etwas Quellcode zur Verfügung stellst?

leider nicht, ich könnte höchstens punktuell Ausschnitte zur Verfügung stellen.

moelski 19. Feb 2010 12:30

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

Ich brauche ja nicht deine ganze Implementierung.
Kannst du die DLL nicht auf ein ganz einfaches Beispiel zusammenstrippen? Das würde mir für den Start vollkommen reichen.

ATON 11. Mai 2015 16:47

AW: SNMP : DLL Sample zum Einhängen in Windows SNMP Service
 
Hallo,

ich bin auch genau an diesem Punkt (Windows SNMP.dll und den SNMP-Dienst zu nutzen), hat da jemand ein Beispiel oder Seiten im Internet??? Die Suchmaschinen geben leider nichts her.

Viele Grüße

bgeltenpoth 27. Nov 2015 15:56

AW: SNMP : DLL Sample zum Einhängen in Windows SNMP Service
 
Hi ...
gibt es hier neues zu diesem Thema?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz