Laden...

Sporadischer Timeout bei SNMP Lextm.SharpSnmpLib

Erstellt von Bjo vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.871 Views
B
Bjo Themenstarter:in
3 Beiträge seit 2019
vor 4 Jahren
Sporadischer Timeout bei SNMP Lextm.SharpSnmpLib

Hallo liebe Community,

ich bin Björn und relativ neu hier. Ursprünglich komme ich aus Webentwicklung, aber momentan versuche ich mich gerade an unserer SNMP-Software, die in C# geschrieben ist.

Da diese veraltet ist, ohne SnmpV3 läuft, muss ich entsprechend reagieren und nötigen Schritte für Weiterentwicklung einleiten.

Ich habe mich demzufolge mit verschieden Bibliotheken auseinander gesetzt. Aktuell probiere ich Lextm.SnmpSharpLib aus, da diese offenbar recht zuverlässig weiterentwickelt wird.

Nun zu meinem Problem:
Ich habe eine Funktion in einer ausgelagerten Klasse erstellt, die mir erstmal nur eine Ausgabe der erhaltenen Daten zu den jeweiligen OID's in der Console machen soll. In neun von zehn Versuchen bekomme ich aber eine Timeout Exception, egal, ob ich diesen Wert bis zu 60000ms einstelle. Auch, kann ich nicht an den Diagnosetools erkennen, woran das liegt. Leider finde ich auch nichts aussagekräftiges im Netz. Was mich irritiert, ist, dass es hin und wieder klappt und ich dann Daten bekomme.

Fehlermeldung:> Fehlermeldung:

Ausnahme ausgelöst: "Lextm.SharpSnmpLib.Messaging.TimeoutException" in SharpSnmpLib.dll

Hat jemand von euch eine Idee, wo der Fehler liegen könnte?

  
using System;
using System.Net;
using System.Collections.Generic;
using System.Text;
using Lextm.SharpSnmpLib;
using Lextm.SharpSnmpLib.Messaging;
using Lextm.SharpSnmpLib.Security;

namespace snmpTest.Classes
{
    class VersionTwo
    {
        public void getVersion2Result(ObjectIdentifier mibs, OctetString community, int timeout, Int32 repetitions, String ricoh, int nonRepeaters)
        {

            IList<Variable> list = new List<Variable>();
            
            try
            {
                GetBulkRequestMessage message = new GetBulkRequestMessage(0, VersionCode.V2, community, nonRepeaters, repetitions, new List<Variable> { new Variable(mibs)});
                ISnmpMessage response = message.GetResponse(timeout, new IPEndPoint(IPAddress.Parse(ricoh), 161));

               
                var result = response.Pdu().Variables;

                foreach(Variable v in result)
                {
                    Console.WriteLine(v + "\n");

                }               
            
            }
            catch(Exception ex)
            {
                Console.WriteLine("Exception: " + ex);
            }
          
        }

    }
}  

16.807 Beiträge seit 2008
vor 4 Jahren

Ich habe eine Funktion in einer ausgelagerten Klasse erstellt,

Methode, keine Funktion 😉

Ich erkenne hier jedenfalls kein generelles Code-Problem.
Im Quellcode sieht man, dass Dein Timeout hier nichts anderes als das SocketTimeout ist.

Die Frage: warum rennt Dein Code in ein Timeout -> weil es keine Daten bekommt.
Besser wäre daher die Frage: warum bekommt der Socket hier keine Daten.

An der Stelle kenne ich mich aber mit Networking zu wenig aus.

P
441 Beiträge seit 2014
vor 4 Jahren

Die Lib funktioniert eigentlich sehr gut - wenn man einmal den Einstieg gefunden hat - ich habe damit auch schon eine kleine Software umgesetzt.

Ich würde hier unterstellen, dass es ggf. an deinem Rechner liegt. Sachen die ich testen würde:
*Starte zum Debuggen einmal VS als Administrator (hilft ggf. bei dem Port unter Windows) *Nutze Wireshark um zu schauen ob dir das Gerät, dass du ansprichst antwortet, wenn du nichts siehst, nutze Wireshark auf einem anderen Rechner, indem du auf einem zwischengelagerten Switch Port Mirroring aktivierst und so alle Pakete mitschneiden kannst *Schau, ob du mit einer anderen SNMP Software die GetBulkRequest Operation an deinem Endgerät ausführen kannst - vielleicht ist das dort einfach nicht richtig implementiert

B
Bjo Themenstarter:in
3 Beiträge seit 2019
vor 4 Jahren

Erstmal danke für eure Antworten. Ich denke, unser Netzwerk-Traffic könnte das Problem sein. Ich habe verschiedene Maschinen getestet und alle haben in etwa 2 von 10 Versuchen Daten gesendet. Mit Wireshark sehe ich nicht, warum ich Pakete nicht empfange. Ich werde mich bei Gelegenheit direkt via Switch mit einer Maschine verbinden und testen.

Grüße Björn

B
1 Beiträge seit 2019
vor 4 Jahren

Hallo Björn,
bist Du sicher das die Geräte die abgefragt werden auf Bulk-Polling auch regagieren können? Es ist nicht ungewöhnlich wenn die Option nicht unterstützt wird.

Das Thema Timeouts bei SNMP ist leider immer wieder ein großes Problem. Insbesondere weil SNMP auf UDP-Basis funktioniert.

Ich sehe in Deinem Sourcecode das Du PDUs abfragen willst, wer ist denn hier der Hersteller und die Type?

Ich arbeite seit vielen Jahren mit DCIM-Systemen auf SNMP-Basis und kann hier möglicherweise behilflich sein.

Gruß
Bernd

B
Bjo Themenstarter:in
3 Beiträge seit 2019
vor 4 Jahren

Hallo Bernd,

offensichtlich liegt es wirklich an unserem Netzwerk-Traffic. Als ich mich via Switch direkt mit einem Drucker (HP) verbunden habe, dann die SNMP-Daten anforderte, ging es nahezu reibungslos. Na ja, mittlerweile bin ich diesen Schritt weitergekommen, und, dass die HP-Drucker ihre Zählerstände als Byte ausgeben, welche man in Fließkommazahlen umwandeln muss, weiß ich jetzt auch.

Grüße Björn