Skip to content

TUIASI-AC-IoT/proiectrcp2025-moldtelecom

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

77 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Protocolul SNMP

Arhitectura și principiile de funcționare SNMPv1

Simple Network Management Protocol versiunea 1 (SNMPv1) este un protocol de nivel aplicație din suita TCP/IP, proiectat pentru monitorizarea și administrarea echipamentelor de rețea într-o manieră standardizată. Din punct de vedere inginereasc, SNMPv1 operează pe principiul unei arhitecturi distribuite, bazate pe modelul Manager–Agent, în care comunicația are loc prin mesaje definite precis, transmise peste UDP, pe portul standard 161 (pentru trafic de management) și 162 (pentru notificări de tip Trap).

Componentele arhitecturii SNMPv1

  • SNMP Manager: Componenta care inițiază cereri (requests) către echipamentele gestionate. Managerul rulează de obicei pe un sistem central de monitorizare (NMS – Network Management Station) și are rolul de a colecta, seta și analiza informațiile primite de la agenți. Managerul este responsabil de generarea pachetelor de tip GetRequest, GetNextRequest și SetRequest, precum și de interpretarea răspunsurilor GetResponse.
  • SNMP Agent: Este procesul rezident pe un echipament gestionat (de exemplu, router, switch, server sau UPS). Agentul are rolul de a furniza datele cerute de manager sau de a notifica evenimentele critice prin mesaje Trap. Acesta interacționează cu baza de date locală Management Information Base (MIB), de unde extrage valorile asociate obiectelor de management.
  • Management Information Base (MIB): Reprezintă o structură ierarhică de obiecte identificate unic prin Object Identifiers (OID). Fiecare OID corespunde unui parametru monitorizabil (de exemplu, ifInOctets , sysUpTime , cpuLoad ). Obiectele sunt descrise formal în ASN.1 (Abstract Syntax Notation One), iar datele sunt codificate conform regulilor BER (Basic Encoding Rules).

Mecanismul de comunicare

Comunicarea SNMPv1 utilizează request–response simplu, bazat pe UDP. Managerul transmite o cerere (request) către agent, identificând mesajul printr-un Request ID. Agentul procesează cererea, extrage informațiile solicitate din MIB și răspunde cu un pachet GetResponse, care conține valorile corespunzătoare.

Fluxul general al pacheteloreste:
Manager → GetRequest → Agent
Agent → GetResponse → Manager

pentru evenimente nesolicitate:
Agent → Trap → Manager

Porturile folosite:
161: Trimiterea si primirea pachetelor de tip GetRequest,GetNextRequest,SetRequest.
162: Trimiterea si primirea Trap-urilor.

Structura generală a unui mesaj SNMPv1

Toate mesajele SNMPv1 sunt transmise în format binar conform regulilor BER (Basic Encoding Rules) și conțin următoarele câmpuri principale:

  • Version: specifică versiunea protocolului (pentru SNMPv1 valoarea este 0).
  • Community String: o parolă simplă utilizată pentru controlul accesului, de exemplu public pentru citire sau private pentru scriere.
  • Protocol Data Unit (PDU): structura efectivă a mesajului, care diferă în funcție de tipul operației (GetRequest, SetRequest etc.).

Structura generală a unui pachet SNMP

Pentru cererile standard (GetRequest, GetNextRequest, SetRequest, GetResponse):

SNMPv1 Message
├── Version: INTEGER
│   ├── 0 = SNMPv1
│   ├── 1 = SNMPv2c
│   ├── ...
├── Community: OCTET STRING
│   ├── "public"
│   └── "private"
└── PDU
    ├── Request ID: INTEGER
    ├── Error Status: INTEGER
    │   ├── 0 = noError
    │   ├── 1 = tooBig
    │   ├── 2 = noSuchName
    │   ├── 3 = badValue
    │   ├── 4 = readOnly
    │   └── 5 = genError
    ├── Error Index: INTEGER
    └── Variable Bindings: SEQUENCE OF VarBind
        ├── [1]
        │   ├── Object Name: OBJECT IDENTIFIER
        │   └── Value: (NULL / VALUE)
        ├── [2]
        │   ├── Object Name: OBJECT IDENTIFIER
        │   └── Value: (NULL / VALUE)
        ├── ...

Pentru pachetele de tip Trap (au PDU-ul structurat diferit):

SNMPv1 Trap Message
├── Version: INTEGER
│   ├── 0 = SNMPv1
│   ├── 1 = SNMPv2c
│   ├── ...
├── Community: OCTET STRING
│   ├── "public"
│   └── "private"
└── PDU
    ├── Enterprise: OBJECT IDENTIFIER
    ├── Agent Address: NetworkAddress (IP Address, 4 octeți)
    ├── Generic Trap: INTEGER
    │   ├── 0 = coldStart
    │   ├── 1 = warmStart
    │   ├── 2 = linkDown
    │   ├── 3 = linkUp
    │   ├── 4 = authenticationFailure
    │   ├── 5 = egpNeighborLoss
    │   └── 6 = enterpriseSpecific
    ├── Specific Trap: INTEGER
    ├── Time Stamp: TimeTicks
    └── Variable Bindings:SEQUENCE OF VarBind
        ├── [1]
        │   ├── Object Name: OBJECT IDENTIFIER
        │   └── Value: (NULL / VALUE)
        ├── [2]
        │   ├── Object Name: OBJECT IDENTIFIER
        │   └── Value: (NULL / VALUE)
        ├── ...

Exemplu:
image

Tipurile principale de pachete SNMPv1

1. GetRequest

Pachetul GetRequest este generat de SNMP Manager pentru a solicita valorile curente ale unuia sau mai multor obiecte definite în MIB-ul agentului. La primirea cererii, agentul verifică dacă OID-ul este definit în MIB și are permisiune de acces pentru operația de citire. Dacă totul este valid, agentul construiește un GetResponse cu alocarea corespunzătoare obiectului.

2. GetNextRequest

GetNextRequest este o extensie a GetRequest, folosită pentru a parcurge secvențial MIB-ul, fără a cunoaște exact următorul OID. Această metodă permite managerului să exploreze complet structura MIB, un obiect la un moment dat. Implementarea acestei logici în agenți presupune existența unei funcții interne care determină următorul OID valid din arborele MIB.

3. GetResponse

Pachetul GetResponse este trimis de agent ca răspuns la o cerere (GetRequest, GetNextRequest sau SetRequest). Conține același Request ID pentru a permite managerului corelarea răspunsului. Structura este identică cu cea a cererii, diferența fiind că în câmpurile VarBind valorile sunt completate cu datele efective din MIB. Dacă agentul nu poate furniza valoarea (de exemplu, OID inexistent sau acces interzis), câmpul error-status este setat corespunzător ( noSuchName , readOnly , genErr etc.).

4. SetRequest

SetRequest este utilizat pentru modificarea valorilor din MIB, acolo unde obiectele sunt definite ca read-write. Este singurul tip de cerere care modifică efectiv starea echipamentului. După procesare, agentul returnează un GetResponse pentru confirmare, indicând succesul operației sau eroarea detectată.

5. Trap

Mesajele Trap sunt excepția majoră față de modelul request–response. Ele sunt generate asincron de agent și trimise direct managerului, pentru a semnala evenimente neprevăzute. Aceste mesaje nu sunt confirmate, deci agentul nu știe dacă managerul le-a recepționat. În practică, implementările pot include mecanisme suplimentare de retransmisie.

6. Limitări ale SNMPv1

  • SNMPv1 nu include autentificare criptografică sau integritate a mesajului. Community string-urile sunt transmise în clar, ceea ce limitează utilizarea în rețele nesigure.
  • Lipsa confirmării la nivel UDP face protocolul vulnerabil la pierderi de pachete. Mecanismele de retry trebuie implementate la nivel de aplicație.
  • Deși SNMPv1 este simplu și eficient pentru monitorizare de bază, versiunile ulterioare (SNMPv2c, SNMPv3) adaugă suport pentru bulk transfer, securitate și autentificare.

7. Arhitectura aplicatie

image

8. Implementarea SNMP

Librării folosite:

  • socket: pentru crearea conexiunilor pentru comunicarea între Manager și Agenți
  • tkinter: pentru interfața grafică a Managerului și Agenților
  • threading: pentru a rula mai multe fire de execuție ce monitorizează resursele sistemului sau ascultă pentru pachete SNMP
  • time și datetime: pentru crearea timpilor de așteptare (timeout) și timestamp-urilor
  • re: pentru extragerea cifrelor dintr-un string cu regex
  • os și psutil: pentru extragerea informațiilor despre resursele sistemului

Valorile MIB:

Resursa monotorizată OID-ul
Load CPU (%) 1.3.6.1.4.1.9999.1
Utilizare RAM (%) 1.3.6.1.4.1.9999.2
Temperatura (°C) 1.3.6.1.4.1.9999.3
Spațiu stocare liber (MB) 1.3.6.1.4.1.9999.4
Nivel baterie (%) 1.3.6.1.4.1.9999.5
U.m. Temperatură (°C/°F) 1.3.6.1.4.1.9999.6
U.m. stocare (kB/MB/GB) 1.3.6.1.4.1.9999.7

U.M Temperatura:

  • 1 -> Grade Celsius
  • 2 -> Grade fahrenheit

U.M Free Storage:

  • 1 -> KB
  • 2 -> MB
  • 3 -> GB

Interfața Aplicației:

image

9. Documentatie

About

Proiect SNMP - Darius & Silviu

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages