[Page Précédente][Page Suivante]

Echanges de données [Sommaire]

Commandes



Dans cette page, nous allons voir la forme des trames de type set, get, getnext et response. La trame du trap est légèrement différente et est traitée à la page suivante.

Avant de donner la description de la trame SNMP, il est nécessaire de faire quelques précisions :

La syntaxe abstraite ASN.1 permet de décrire les objets manipulés.
Pour transférer l'information entre deux machines et ce indépendamment de l'architecture des machines, on utilise actuellement un codage : le BER (Basic Encoding Rules).
Le BER poursuit le même objectif que le protocole XDR de Sun (eXternal Data Representation), mais il est plus complexe, donc plus goumand en CPU et n'offre pas de fonction de compactage de l'information.



Le codage BER


Exemple

Codage d'une instance d'objet

Tout type ASN.1 est codé de la manière suivante :



Ou plus synthétiquement :
Type(1 octet)LongueurValeur


Type se décompose ainsi :

Classe (2 bits)Forme (1 bit)indicateur (5 bits)

avec

ClasseForme
Universal00Primitive0
Application01Constructed1
Context specific10

Private11



Identificateur de classe Universal
Integer2
Bilstring3
Octetsring4
Null5
Object identifier6
Object descriptor7
Sequence and Sequence-of16


Identificateur de classe Application
IpAdress0
Counter1
Gauge2
Time Ticks3
Opaque4


Identificateur de classe Context Specific
GetRequest-PDU0
GetNextRequest-PDU1
GetResponse-PDU2
SetRequest-PDU3
Trap-PDU4




Trame



La trame SNMP suit le modèle TLV :


où le PDU se décompose comme suit (toujours suivant le modèle TLV) :


Description des champs :

Version indique la version de SNMP utilisée. 0 correspond à SNMPv1.
Community Name sert à faire de l'authentification. En fait on peut définir plusieurs groupes qui auront des droits différents sur les objets de la MIB (lecture seule, lecture/écriture). Cette authentification est la seule option de sécurité observée dans SNMPv1. Malheureusement la chaîne de caractère correspondante transite en clair sur le réseau !!!
PDU Tag Type du PDU : get, set ... Voir tableau ci-dessus
Request ID Identité du message
Error Status Indication d'erreur
Error Index Pointeur sur l'erreur

Le tableau suivant récapitule les erreurs rencontrées :


0 : noError, 1 : tooBig, 2 : noSuchName, 3 : badValue, 4 : readOnly, 5 : genError.




Exemples


retour à BER

Dans ce paragraphe, nous allons voir un exemple de requête get-response
La syntaxe utilisée est la suivante : snmpget -h host -p port -c community OID


snmpget -h 139.124.26.111 -p 161 -c public 1.3.6.1.2.1.1.1.0


En fait, nous demandons des renseigenments (en l'occurence le sysDescr) d'une sonde 
qui a pour adresse IP 139.124.26.111. Et la réponse obtenue est :


Request Id: 0
Error: noError
Index: 0
Count: 1

Name: 1.3.6.1.2.1.1.1.0
Kind: OctetString
Value: "HP LanProbe III SNMP 1.0 (A.00.05), (Boot ROM A.00.01 8M)"




Nous allons maintenant décomposer la trame grâce au codage TLV


LANWatch ethernet trace file:  get_resp.bin - created Tue Oct 08 05:19:04 1996.

#******* Receive time: 360.303 (0.000) packet length:82   received length:82  
Ethernet:   (   HP b1e4a1 -> Cisco 467a32)  type: IP(0x800)
Internet:  139.124.33.249 -> 139.124.26.111  hl: 5   ver: 4   tos: 0  
 len: 68   id: 0x2c35 fragoff: 0   flags: 00 ttl: 64  prot: UDP(17)  
 xsum: 0xfb13
UDP:  1424 -> SNMP(161)  len: 48  xsum: 0x72c4
SNMP:  len: 38 version: int(1) 0x00 comm: string(6) "public" type: GET 
 req-id: int(1) 0x00 error: int(1) 0x00 error-index: int(1) 0x00 
 var: obj(8) 1 3 6 1 2 1 1 1 0 val: string(0) ""                               

==============================================================+=======++=======.
0000: 00 00 0c 46 7a 32 08 00 - 09 b1 e4 a1 08 00 45 00       |  .Fz2. ..... E |
0010: 00 44 2c 35 00 00 40 11 - fb 13 8b 7c 21 f9 8b 7c       | D,5  @....|!..||
0020: 1a 6f 05 90 00 a1 00 30 - 72 c4 30 26 02 01 00 04       |.o.. . 0r.0&.. .|
0030: 06 70 75 62 6c 69 63 a0 - 19 02 01 00 02 01 00 02       |.public.... .. .|
0040: 01 00 30 0e 30 0c 06 08 - 2b 06 01 02 01 01 01 00       |. 0.0...+...... |
0050: 04 00                                                   |.               |






T : 0x02
ClasseFormeIdentificateur
00000010
UniversalPrimitiveInteger
L : 0x01 = 1 octet V : 0x00 = 0 correspond à un paquet SNMPv1
T : 0x04
ClasseFormeIdentificateur
00000100
UniversalPrimitiveOctetString
L : 0x06 = 6 octets V :
0x700x750x620x6c0x690x63
public

T : 0xA0
ClasseFormeIdentificateur
10100000
Context SpecificConstructedGetRequest-PDU
L : 0x19 = 25 octet V : Et sa réponse :
#0 Receive time: 360.306 (0.003) packet length:139 received length:139 Ethernet: (Cisco 467a32 -> HP b1e4a1) type: IP(0x800) Internet: 139.124.26.111 -> 139.124.33.249 hl: 5 ver: 4 tos: 0 len: 125 id: 0xf4b fragoff: 0 flags: 00 ttl: 252 prot: UDP(17) xsum: 0x5bc4 UDP: SNMP(161) -> 1424 len: 105 xsum: 0xc9c4 SNMP: len: 95 version: int(1) 0x00 comm: string(6) "public" type: RESPONSE req-id: int(1) 0x00 error: int(1) 0x00 error-index: int(1) 0x00 var: obj(8) 1 3 6 1 2 1 1 1 0 val: string(57) "HP LanProbe III SNMP 1.0 (A.00.05), (Boot ROM A.00.01 8M)" ==============================================================+=======++=======. 0000: 08 00 09 b1 e4 a1 00 00 - 0c 46 7a 32 08 00 45 00 |. .... .Fz2. E | 0010: 00 7d 0f 4b 00 00 fc 11 - 5b c4 8b 7c 1a 6f 8b 7c | }.K ..[..|.o.|| 0020: 21 f9 00 a1 05 90 00 69 - c9 c4 30 5f 02 01 00 04 |!. ... i..0_.. .| 0030: 06 70 75 62 6c 69 63 a2 - 52 02 01 00 02 01 00 02 |.public.R.. .. .| 0040: 01 00 30 47 30 45 06 08 - 2b 06 01 02 01 01 01 00 |. 0G0E..+...... | 0050: 04 39 48 50 20 4c 61 6e - 50 72 6f 62 65 20 49 49 |.9HP LanProbe II| 0060: 49 20 53 4e 4d 50 20 31 - 2e 30 20 28 41 2e 30 30 |I SNMP 1.0 (A.00| 0070: 2e 30 35 29 2c 20 28 42 - 6f 6f 74 20 52 4f 4d 20 |.05), (Boot ROM | 0080: 41 2e 30 30 2e 30 31 20 - 38 4d 29 |A.00.01 8M) |
Voici un autre exemple avec une requête getnext-response snmpnext -h 139.124.26.111 -p 161 -c public 1.3.6.1.2.1.1 Request Id: 0 Error: noError Index: 0 Count: 1 Name: 1.3.6.1.2.1.1.1.0 Kind: OctetString Value: "HP LanProbe III SNMP 1.0 (A.00.05), (Boot ROM A.00.01 8M)" Request Id: 1 Error: noError Index: 0 Count: 1 Name: 1.3.6.1.2.1.1.2.0 Kind: ObjectId Value: 1.3.6.1.4.1.11.2.3.7.6.3.3 Request Id: 2 Error: noError Index: 0 Count: 1 Name: 1.3.6.1.2.1.1.3.0 Kind: TimeTicks Value: 319562062 Request Id: 3 Error: noError Index: 0 Count: 1 Name: 1.3.6.1.2.1.1.4.0 Kind: OctetString Value: "" Request Id: 4 Error: noError Index: 0 Count: 1 Name: 1.3.6.1.2.1.1.5.0 Kind: OctetString Value: "gfhhf" Request Id: 5 Error: noError Index: 0 Count: 1 Name: 1.3.6.1.2.1.1.6.0 Kind: OctetString Value: "hhhhhh" Request Id: 6 Error: noError Index: 0 Count: 1 Name: 1.3.6.1.2.1.1.7.0 Kind: Integer Value: 15 Request Id: 7 Error: noError Index: 0 Count: 1 Name: 1.3.6.1.2.1.2.1.0 Kind: Integer Value: 2
[Page Précédente][Page Suivante]