Cadranul cadru


Formatul mesajelor SNMP încorporate în datagrame UDP.
Fig. de protocol de management SNMP Semenov Yu.A. (SSC ITEP)

Nu uităm că sunt folosite ASN.1 și BER.







O serie de date transmise:

Primul octet trimis la dispozitiv este 30H. Acesta este un atribut de tip secvență universal de date și este de obicei primul octet în protocoalele compatibile BER / DER.

În reprezentarea binară a lui 30H:

Primele două biți sunt în partea stângă. Dacă egal cu zero, denotă o interogare universală, adică se aplică tuturor câmpurilor. Următorul bit din stânga este unul, ceea ce înseamnă o interogare complexă. Bitii rămași sunt 10000B = 10H, aceasta este SEQUENCE. Deci, aceasta este secvența universală

Următorul octet al matricei conține dimensiunea întregului pachet, excluzând primii doi octeți.

Următorul octet este 0x02. aceasta înseamnă că informația ulterioară este un întreg, adică un număr. Octetul în kk [3] este lungimea datelor și kk [4] este valoarea reală. 0x00 aici indică faptul că versiunea de protocol este 1 (una este mai mică decât valoarea reală a SNMP v.1).

Următorul este octetul 0x04. care indică faptul că datele ulterioare sunt șirul octet (8 biți). Apoi, există un octet de lungime și 6 octeți de coduri de caractere. Șirul "public" indică comunitatea. această variabilă poate fi utilizată ca parolă.

Octetul în kk [13] este 0xa1. Reprezentarea binară

Atunci când cei trei biti din stânga = 101, aceasta înseamnă că datele ulterioare sunt specifice contextului. și anume ar trebui să vedeți documentația pentru un anumit protocol. Ultimii patru biți indică numărul, care în acest caz este 1. Deci, acesta este Context specific 1. În documentația pentru SNMP - Obțineți solicitarea următoare.

Următorul octet indică lungimea (= 24, până la sfârșitul pachetului)

Următorii trei octeți conțin un ID de solicitare. pe care le stabilim egal cu unul. Kk [15] = 0x02, care indică tipul de Integer. Următorul octet este lungimea (= 1), apoi datele în sine (= 1).

Următorii trei octeți conțin starea de eroare a conexiunii curente. De când am început conversația, este setată la zero.

Desigur, după aceea avem trei octeți care indică indicele de eroare. De asemenea, este setat la zero.

Acum, în kk [26] = 30H. avem inceputul unei alte structuri (sau secventa, daca preferati asa).

Imediat după prima structură, avem alta. Acest format vă permite să faceți două solicitări în același timp. Doar adăugați următoarele 0x30 după terminarea acestei structuri și datele corespunzătoare.

După un octet lung, avem un octet de 0x06. care indică tipul de date Obiect (Object Identifier). Următorul octet este lungimea.







Următorii șapte octeți sunt foarte importanți.

ISO, în înțelepciunea sa nelimitată, a transformat Internetul într-o ierarhie asemănătoare copacilor.

Firește, în partea de sus a rădăcinii (Root), apoi se trece ISO (1), apoi în conformitate cu ISO org (1.3), apoi Departamentul Apararii sub dod sau org (1.3.6). Imediat după aceasta, avem internet (1.3.6.1), în conformitate cu internet am MGMT (1.3.6.1.2) și sub Manag am MIB sau baza de date Information Management (1.3.6.1.2.1). Deoarece folosim SNMP, care este folosit pentru a gestiona sistemele de rețea, avem sistemul (1.3.6.1.2.1.1). Deci, suntem în ierarhia din 1.3.6.1.2.1.1. Ultimul 3. în kk [36], - Sysuptime în cadrul sistemului.

Deci, octeții de la kk [30] la kk [36] conțin ierarhia interogării noastre. S-ar putea să fii puțin confuz că primul octet, kk [30], este 0x2b în loc de 1,3 așa cum ar trebui să fie. Într-adevăr, acest ISO este un pic mai înțelept (o dată!). Pentru a salva octeții transmiși, ei au decis să înmulțească primul 1 în 1.3.6.1.2.1.1.3 cu 40 și să adauge rezultatul la al doilea număr, adică 3. Deci, avem 1 * 40 + 3 = 43 sau 0x2b. Confuz, dar înțelept.

Un moment interesant este obținut dacă doriți să interogați valoarea unui obiect cu un identificator al formularului 1.3.6.1.4.1.9585.1.0. Valoarea unuia dintre subidentificatori este în mod clar mai mare decât 255 (adică octetul nu se potrivește). Citeam GOST.

GOST R ISO / IEC 8825-93.
Tehnologia informației. Interconectarea sistemelor deschise.
Specificarea regulilor de codare de bază pentru notarea sintactică abstractă a versiunii 1 (ASN.1).

22. Reprezentarea codului a valorii "identificator de obiect".

22.1 Reprezentarea codului a valorii "identificatorului de obiect" este o reprezentare simplă a codului.

22.2 Octetele de conținut trebuie să fie o secvență (ordonată) a reprezentărilor succesive ale codului de subidentificatori (vezi 22.3 și 22.4).
Fiecare subidentificator este reprezentat de o secvență de unul sau mai multe octeți. Bit 8 din fiecare octet indică dacă acesta este ultimul octet în secvența ultimului octet de 8 biți ar trebui să aibă valoarea „zero“, și bitul 8 din fiecare octet precedente - „unu“ valoare. Bits 1-7 octeți din această secvență codifică un subidentificator. Aceste grupuri de biți, conectate în serie unul cu celălalt, ar trebui să fie considerate ca număr binar fără semn, care este MSB bitul 7 al primului octet, iar bitul cel mai puțin semnificativ - 1 bit din ultimul octet. Subidentificatorul trebuie codificat folosind cel mai mic număr posibil de octeți; aceasta înseamnă că octetul de la capăt al sub-divizorului nu trebuie să aibă o valoare hexazecimală de 80H.

22,3 Numărul subid (N) ar trebui să fie unul mai mic decât numărul de componente ale identificatorului de obiect din valoarea codată a „ID obiect.“

22.4 Valoarea numerică a primului subidentificator se calculează pornind de la primele două valori ale componentelor valorilor codificate "identificator de obiect" folosind formula

(X * 40) + Y,
unde X este valoarea primei componente a identificatorului de obiect,
și Y este valoarea celei de-a doua componente a identificatorului obiectului.

Notă - Este „plin“ reprezentarea primelor două componente ale identificatorului de obiect este posibilă datorită faptului că valorile alocate pentru doar trei muchii din nodul rădăcină, și nu mai mult de 39 de valori succesive - pentru nodurile corespunzătoare X = 0 și X = 1.

22.5 Valoarea numerică a subidentificatorului i (pentru 2 <= i <= N) совпадает счисловым значением (i+1)-го компонента идентификатора объекта.

Ultimii doi octeți din pachet sunt 0x05 și 0x00. care împreună indică valoarea NULL. Acest lucru se datorează faptului că nu putem avea răspunsul în cerere!

Pachet de răspuns de 44 octeți







Articole similare

Trimiteți-le prietenilor: