Structures des PDU SNMP Chapitre 4
Format du message SNMPv1 Le champ version permet à un nouveau format de message d’être identifié —Permet de s'assurer que l'administrateur et l'agent utilisent la même version —N’était plus utilisé dans la version initiale de SNMPv2 —Utilisé dans SNMPv2C et aussi dans SNMPv3 La communauté est une authentification triviale utilisée par SNMPv1 La plupart des équipements permettent de configurer des noms de communauté différents en lecture et en écriture Le nom de communauté de "lecture" est souvent "public", par défaut —Envoyé sous forme de chaîne de texte ASCII dans les PDU –Quiconque possédant un analyseur de protocole peut le capturer La section "données" contient une des cinq PDU SNMP —On définit seulement deux formats de PDU –GetRequest, GetNextRequest, GetResponse, SetRequest utilisent le même format de PDU –Le Trap de SNMPv1 utilise un format de PDU différent ASCII = American Standard Code for Information Interchange
Format des messages SNMPv1 et SNMPv2c Les messages SNMPv1 ont le format suivant : SNMP-Message ::= SEQUENCE { version INTEGER {version-1(0)}, community OCTET STRING, data ANY} version_1(1) GetRequest PDU GetNextRequest PDU GetResponse PDU Trap PDU SetRequest PDU community data Authentification Version SNMP du message Message SNMP
Formats des PDU Get, Set et Response Le champ “Request ID” permet à la partie gestionnaire d’identifier la réponse correspondant à la requête formulée Le champ “Error Index” identifie la variable (variable bindings) qui a occasionné l'erreur Chaque ensemble variable bindings (les données) regroupe le nom de la variable avec sa valeur —La variable est nommée par son OID complet (identifiant une instance) —Les PDU GetRequest et GetNextRequest utilisent NULL à la place de la valeur –NULL est un type ASN.1 (UNIVERSAL) particulier
Formats des PDU Get, Set et Response (suite) versioncommunity SNMP message GetRequest, GetNextRequest, GetResponse, or SetRequest PDU PDU type Request ID Error status Error index Object 1, Value 1Object 2, Value 2 Variable bindings PDU tagPDU GetRequest GetNextRequest GetResponse SetRequest Trap noError tooBig noSuchName badValue readOnly genErr ValueError Meaning Opération manager/agent OK PDU Response dépasse la limite locale OID ne correspond pas à un nom de la MIB SetRequest contient valeur non valide Non défini dans la RFC-1157 D’autres erreurs sont intervenues
Format de la PDU Trap Le champ “Enterprise” identifie l'entreprise de l’équipement qui a émis le Trap —Par exemple, le préfixe OID identifie FTP Software Inc. comme constructeur dans l’émission du Trap —Cet OID précise la nature de l’alarme dans la MIB constructeur Le champ “Agent Address” contient l'adresse IP de l'agent envoyant le Trap —L'adresse signifie que l’émission ne vient pas d'un réseau IP Le champ “Specific Trap Type” précise le type de trap constructeur, quand le champ “generic” indique trap constructeur (enterprise specific) —Est défini par les directives de la RFC-1215 —Seulement valide pour les "Trap" spécifiques entreprises Le champ “Timestamp” contient la valeur de l'objet sysUpTime de l’agent au moment de l’envoi de ce trap
Format de la PDU Trap (suite) SNMP message.... versioncommunity Trap PDU PDU type (4) Enterprise Agent address Generic trap type Specific trap type TimestampObject 1, Value 1Object 2, Value 2 Variable bindings ValueTrapMeaning coldStart warmStart linkDown linkUp authenticationFailure egpNeighborLoss enterpriseSpecific Sending protocol entity has reinitialized (config. may be altered) Sending protocol entity has reinitialized (config. not altered) A communications link has failed A communications link has come up Improperly authenticated SNMP message from manager An EGP peer neighbor is down A nongeneric trap has occurred
Format du message SNMPv2 Il n’y a jamais eu de consensus sur le Format du message SNMPv2 (1993) On a défini trois nouveaux types de PDU : —GetBulkRequest –Utilisé pour récupérer de grandes quantités de données, ex. : le contenu de tables —InformRequest –Devait permettre à un administrateur d'envoyer des informations à un autre administrateur —SNMPv2-Trap –Remplace le PDU Trap SNMPv1 (obsolète) La PDU Trap de SNMPv2 utilise maintenant une structure identique aux autres PDU —La première variable contient sysUpTime Les informations de type "Error Status" sont plus explicites
SNMPv2/v3 Error Reporting *Never generated by SNMPv2/v3 entity Error status valueMeaning 0 noError 1 tooBig 2 noSuchName * 3 badValue * 4 readOnly * 5 genErr 6 noAccess 7 wrongType 8 wrongLength 9 wrongEncoding 10 wrongValue 11 noCreation 12 inconsistentValue 13 resourceUnavailable 14 commitFailed 15 undoFailed 16 authorizationError 17 notWritable 18 inconsistentName
Format du message SNMPv2c SNMPv2c (c pour community) utilise ces nouvelles PDU SNMPv2 —Mais les encapsule dans un format de message de type SNMPv version SNMPv2 PDU SNMPv2 message PDU type Request ID Error Status or Non-Rptr Error Index or Max-Reps Object 1, Value 1Object 2, Value 2 PDU tagPDU GetRequest GetNextRequest Response SetRequest obsolete GetBulkRequest InformRequest SNMPv2-Trap Non-Rptr:Nonrepeaters, how many of the requested variables will not be processed repeatedly (used in GetBulkRequest only) Max-Reps:Maximum-repetitions, the maximum number of repeated executions to retrieve specific variables (used in GetBulkRequest only) Variable bindings community
Format du message SNMPv3 SNMPv3 utilise aussi les PDU SNMPv2 —Mais les encapsule dans un nouveau format de message (SNMPv3) version (3)SNMPv2 PDU SNMPv3 message PDU type Request ID Error Status or Non-Rptr Error Index or Max-Reps Object 1, Value 1Object 2, Value 2 PDU tagPDU GetRequest GetNextRequest Response SetRequest obsolete GetBulkRequest InformRequest SNMPv2-Trap msgGlobalData:Security model-specific parameters (see Chapter 7) msgSecurityParameters:Format defined by security model (see Chapter 7) Variable bindings msgGlobalDatamsgSecurityParameters
Transmettre des informations de gestion Le SMI (Structure of Management Information) définit toutes les propriétés d’un objet de la MIB ASN.1 définit le type d'un objet et éventuellement des limites de valeurs Les règles d'encodage de base (BER) définissent comment les valeurs ASN.1 réelles dans l’application sont encodées en flux d'octets (sérialisation) —Ce que vous voyez sur le câble Utilise un encodage Type-Longueur-Valeur (TLV) ValeurLongueurType
Encodage du champ Type For tags greater than or equal to First octet ClassPC Second octetThird octet Last octet 0Z Z Z Z Z Z ZY Y Y Y Y Y Y X X X X X X X Number of tag = XXXXXXX YYYYYYY... ZZZZZZZ For tags from 0 through 30 TypeLengthValue ClassPCTag number One octet
Encodage du champ Type (suite) Classe :TAG pour la classe UNIVERSAL : 00= UNIVERSAL1 = BOOLEAN (ASN.1 OSI)) 01= APPLICATION2=INTEGER 10= CONTEXT-SPECIFIC3=BITSTRING 11= PRIVATE4=OCTETSTRING 5=NULL 6=OBJECT IDENTIFIER 16=SEQUENCE / SEQUENCE OF PC = 1 pour un encodage structuré, 0 pour encodage simple
Encodage du champ Type (suite) Classe :TAG pour la classe APPLICATION : 00= UNIVERSAL0 = IPADDRESS 01= APPLICATION1=COUNTER32 10= CONTEXT-SPECIFIC2=GAUGE32 11= PRIVATE3=TIMETICKS 4=OPAQUE 6=COUNTER64 Classe :TAG pour la classe CONTEXT SPECIFIC 0 = GetRequest PDU 5 = GetBulkRequest PDU 1 = GetNextRequest PDU 6 = InformRequest PDU 2 = Response PDU 7 = SNMPv2-Trap PDU 3 = SetRequest PDU 4 = SNMPv1-Trap PDU PC = 1 pour un encodage structuré, 0 pour encodage simple
Encodage du champ Longueur Le champ “Longueur” détermine le nombre d'octets occupés par le champ “Valeur”... Length = 0 – 127 octets 0X X X X X X X Number of octets in value field Length > 127 octets 1X X X X X X XX X X X X X X XX X X X X X X X Number of subsequent octets Number of octets in Value field
Encoder le champ Valeur BOOLEAN (Tag = 1) ASN.1 OSI —Un octet unique avec un contenu de zéro pour FALSE, # 0 pour TRUE —Exemple : FALSE est codé (en hexadécimal) INTEGER (Tag = 2) —La représentation utilisant le plus petit nombre d'octets possible —Exemple : 500 codé f4 (en hexadécimal) OCTET STRING (Tag = 4) —Les contenus représentent exactement les valeurs de la chaîne d'octets —Un encodage structuré casse la chaîne en plusieurs sous-chaînes —Exemple : 55 ff 00 codé ff 00 (en hexadécimal) NULL (Tag = 5) —Il n'y a pas de contenu —Exemple : Null codé (en hexadécimal)
Encoder le champ Valeur (Objets de la MIB) (suite) OBJECT IDENTIFIER (Tag = 6) —Les deux premiers composants sont encodés selon la formule : premier 40 (décimal) + Second (ici 1x40+3=43 —Les composants suivants sont codés de manière indépendante —Chacun est codé comme entier non-négatif en utilisant aussi peu de blocs de 7 bits que possible —Chaque bloc de 7 bits est enfermé dans un octet avec le bit de poids fort a 1, sauf pour le dernier bloc de chaque sous-identifiant —Exemple : est codé b (hexa) SEQUENCE and SEQUENCE OF (Tag = 16) —Concaténation des codages BER des valeurs des composants, dans l'ordre de la définition —Exemple : –Définition : SEQUENCE (INTEGER,INTEGER) –Valeur : (7,11) –Codé en b (en hexadécimal)
Message Get Request avec SNMPv D 69 6E A0 1B C E 30 0C B Type length Value Field type Sequence Integer String Integer Integer Integer Sequence Sequence Object ID Null Context-specific constructed Length Value 0 admin 0 Get- request MIB descriptor sequence of 0x27 octets Version number - 1 = version 1 Community name “admin” get-request length 0x1B Request ID 12 Error status = 0 Error index = › SYSUPTIME Comments D696E A01B C E 300C 06082B
Message Get Response avec SNMPv1 30 2A E A2 1E C Type length Value Field type Sequence Integer String Integer Integer Integer Sequence Sequence Object ID Context-specific constructed Length Value 0 admin Get- response MIB descriptor sequence of 0x2A octets Version number - 1 = version 1 Community name “admin” Get-response with length 0x1E Request ID 0x0C Error status Error index › SYSUPTIME Time of 7 minutes 10 seconds Comments 302A D696E A21E C F 06082B A7F8 Applicationwide TimeTicks hundredths of a second 30 0F B A7 F8 Data link headerIPUDP