myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Sporadischer Timeout bei SNMP Lextm.SharpSnmpLib
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Sporadischer Timeout bei SNMP Lextm.SharpSnmpLib

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Bjo
myCSharp.de-Mitglied

Dabei seit: 20.06.2019
Beiträge: 3


Bjo ist offline

Sporadischer Timeout bei SNMP Lextm.SharpSnmpLib

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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?

C#-Code:
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);
            }

        }

    }
}
20.06.2019 16:22 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 13.057
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top



Zitat von Bjo:
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.
20.06.2019 17:27 Beiträge des Benutzers | zu Buddylist hinzufügen
Papst Papst ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.09.2014
Beiträge: 218
Entwicklungsumgebung: VS2017
Herkunft: Kassel


Papst ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
20.06.2019 18:03 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Bjo
myCSharp.de-Mitglied

Dabei seit: 20.06.2019
Beiträge: 3

Themenstarter Thema begonnen von Bjo

Bjo ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
21.06.2019 11:40 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Bspautz1969 Bspautz1969 ist männlich
myCSharp.de-Mitglied

Dabei seit: 05.07.2019
Beiträge: 1
Entwicklungsumgebung: Visual Studio 2019 Pro
Herkunft: Deutschland


Bspautz1969 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
05.07.2019 09:42 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Bjo
myCSharp.de-Mitglied

Dabei seit: 20.06.2019
Beiträge: 3

Themenstarter Thema begonnen von Bjo

Bjo ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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
10.07.2019 08:32 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 3 Monate.
Der letzte Beitrag ist älter als 3 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 15.10.2019 21:37