Avatar billede perjensen1992 Nybegynder
08. marts 2007 - 13:37 Der er 16 kommentarer og
1 løsning

Counter32 SNMP?

Jeg er igang med at lave en applikation som kan snakke med bl.a. router over SNMP. Jeg er dog stødt ind i en variable som på routeren hedder Counter (Counter32). Nogen der ved hvad det er for en variable i C#, altså om det er en Int, uint, long, double eller en eller en hel anden variable?
Ud over dette nogen der ved hvor jeg kan finde ud af hvordan jeg henter/læser denne værdi på internettet?
Avatar billede kalp Novice
08. marts 2007 - 13:58 #1
Counter32 = 2^32-1 (4294967295)
så er det bare at slå det op i din .NET bog hvilken der passer bedst:)
Avatar billede perjensen1992 Nybegynder
08. marts 2007 - 14:21 #2
Ved du også hvordan jeg kan læse den?
Fordi jeg har noget kode i C# som kan læse en alm. integer32 værdi, men det samme kode lader ikke til at virke ved Counter32 værdien fra snmp svaret fra enheden.
Avatar billede perjensen1992 Nybegynder
09. marts 2007 - 08:32 #3
Hvordan får jeg den retunerede counter32 værdi ud af svaret fra enheden?
Avatar billede perjensen1992 Nybegynder
12. marts 2007 - 11:24 #4
Er der nogen som kan forklare mig hvordan jeg hiver en counter32 værdi ud af et svar fra en enhed over SNMP?
Avatar billede perjensen1992 Nybegynder
15. marts 2007 - 08:11 #5
Det jeg mener er at f.eks. måden at få en integer32 variable ud af et SNMP svar gøres på denne måde:

private int HandleInt(int commlength,int miblength,int datatype,int datalength,int datastart,int firstByte,byte[] response) {
            uint variable = 0;

            extractFromMIB(commlength,miblength,datatype,datalength,datastart,firstByte);

            while(datalength > 0) {
                variable = (variable << 8) + response[datastart++];
                datalength--;
            }

            return variable;
        }

private void extractFromMIB(int commlength,int miblength,int datatype,int datalength,int datastart,int firstByte) {
            firstByte = findFirstByte(response);
            commlength = Convert.ToInt16(response[8 + firstByte]);
            miblength = Convert.ToInt16(response[31 + commlength + firstByte]);

            datatype = Convert.ToInt16(response[32 + commlength + miblength]);
            datalength = Convert.ToInt16(response[33 + commlength + miblength]);
            datastart = 34 + commlength + miblength;
        }

private int findFirstByte(byte[] bytes) {
            int startIndex = 0;
            for(int i = 0; i < response.Length; i++) {
                if(response[i] != 0x30) {
                    startIndex = i;
                    break;
                }
            }
            return startIndex;
        }

Men denne methode virker ikke når man skal have en counter32 værdi ud af et SNMP svar.
Nogen der kan forklare mig
Avatar billede perjensen1992 Nybegynder
15. marts 2007 - 08:12 #6
...kan forklare mig hvordan jeg får counter32 værdien ud af snmp svaret?
Avatar billede kalp Novice
15. marts 2007 - 08:31 #7
jeg ved desværre ikke hvordan du får den ud, men har du prøvet at skrive

Int64 counter = (Int64)dinCounter32Variabelher;
Avatar billede perjensen1992 Nybegynder
15. marts 2007 - 10:03 #8
Jeg er ikke helt med.
I øjeblikket når jeg vil have en integer32 variable ud så kalder jeg HandleInt methoden som egentlig fortolker det retunerede SNMP svar fra den enhed jeg komunikere med. Mener du at jeg skal prøve at forhøje det til en integer64 variable i stedet for?
Avatar billede kalp Novice
15. marts 2007 - 10:19 #9
ja men får du slet ingen fejl eller noget?
Avatar billede perjensen1992 Nybegynder
15. marts 2007 - 10:51 #10
Den eneste fejl jeg får er at resultatet er anderledes i forhold til det som jeg får ud fra en applikationi fra nettet får fra routeren. Applikationen får et reslutat som f.eks. kan sige 14 eller et andet nummer som nu er aktuelt for den router. Min applikation siger kun det som lokal variablen i methoden indeholder. Den bliver ikke talt op eller ned i modsætning til den reference applikation jeg bruger fra nettet til at tjekke op imod.

Du skal lige tænke på at det svar jeg får fra routeren jeg komunikere med over SNMP er i ren og skær bytes og ikke en anden simple variable som en integer, string eller anden variable type end byte og jeg selv skal sørge for at få min applikation til at fortolke svaret i stedet for at have et prædifineret modul som allerede er lavet på forhånd, som f.eks. en xmlreader i ms.net kan læse et xml dokument.
Avatar billede kalp Novice
15. marts 2007 - 11:40 #11
http://www.koders.com/cpp/fidC819CA60515AF0545A42C4ECA23227A41C43E562.aspx

tror du skal have fat i en fra c++ katagorien som måske kan fortælle hvad det svare til i c#
Avatar billede perjensen1992 Nybegynder
15. marts 2007 - 12:07 #12
gawi, ud fra linket, som det er jeg har forstået teksten, så er/minder en counter32 om en integer32. Ved du hvordan jeg kan få den hivet ud af byte svaret som jeg får retuneret?
:-)
Avatar billede kalp Novice
15. marts 2007 - 12:13 #13
så tror jeg bare du skal bruge denne klasse
http://msdn2.microsoft.com/en-us/library/system.bitconverter.aspx

Den kan konvertere fra array til primitive datatyper og omvendt så mon ikke det er løsningen?
Avatar billede perjensen1992 Nybegynder
15. marts 2007 - 14:48 #14
gawi det var løsningen. På nuværende tidspunkt får jeg det rigtige reslutat ud som jeg skal.
Hvis du ligger et svar kan du få dine points. :-)
Avatar billede kalp Novice
15. marts 2007 - 14:56 #15
Det får du her:-)
og beklager lidt min forvirring:P
Avatar billede perjensen1992 Nybegynder
15. marts 2007 - 15:04 #16
Helt iorden. Det kan ske på mange fora på grund af indirekte komunikation, samt at jeg har fået af vide at jeg kan være lidt forvirende en gang i mellem.
:-)
Avatar billede kalp Novice
15. marts 2007 - 15:05 #17
he he fair nok=)
Godt vi fandt en løsning;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester