Bonjour,

je découvre le SNMP et j'ai développé le petit programme qui suit, à l'aide du tutoriel officiel de NET-SNMP. Il s'agit en gros du programme de présentation qui s'exécuterait en local. Je précise que l'application à distance du tuto (connexion à "test.net-snmp.org" fonctionne parfaitement.

Mais lorsque je compile et exécute mon programme local, au lieu de m'envoyer un résultat (sous forme de STRING ou INTEGER), il me renvoie :

.1702326096.1952796274.1112100141.1886730810.1935753843.1968137065.1953853556.1952543827.841905013.0.990059265.36.3.4294966456

NET-SNMP-TUTORIAL-MIB::nstAgentModuleObject.0 = Wrong Type (should be INTEGER): NULL
NET-SNMP-TUTORIAL-MIB::nstAgentModuleObject.0 = Wrong Type (should be INTEGER): NULL
j'ai testé pas mal de solutions, mais rien ne vient à bout de ce "wrong type"... Je comprend le code écrit ligne par ligne, seulement l'erreur doit venir du fonctionnement global de SNMP (ou de NET-SNMP).

Mon but final est simplement d'afficher la valeur d'un objet d'une MIB "faite maison" (personnelle), mais pour le moment je travaille avec celle fournie par le tuto (la MUB étant en préparation).

Avez vous une idée ?

merci à tous.

----------------------------------
programme en c :: avec "localhost" passé en paramètre d'exécution

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <string.h>
int main(int argc, char ** argv)
{
      struct snmp_session session;
      struct snmp_session *sess_handle;
      struct snmp_pdu *pdu;
      struct snmp_pdu *response;
      struct variable_list *vars;
      oid id_oid[MAX_OID_LEN];
      oid serial_oid[MAX_OID_LEN];
      size_t id_len = MAX_OID_LEN;
      size_t serial_len = MAX_OID_LEN;
      int status;
      struct tree * mib_tree;
 
      /*********************/
      init_mib();
      if(argv[1] == NULL){
	  printf("Please supply a hostname\n");
	  exit(1);
      }
 
      init_snmp("test_PowerNet");
 
      snmp_sess_init( &session );
      session.version = SNMP_VERSION_1;
      session.community = "public";
      session.community_len = strlen(session.community);
      session.peername = argv[1];
      sess_handle = snmp_open(&session);
 
      add_mibdir(".");
      mib_tree = read_mib("NET-SNMP-TUTORIAL-MIB.txt");
      pdu = snmp_pdu_create(SNMP_MSG_GET);
 
      read_objid("NET-SNMP-TUTORIAL-MIB::nstAgentModuleObject.0", id_oid, &id_len);
      snmp_add_null_var(pdu, id_oid, id_len);
      read_objid("NET-SNMP-TUTORIAL-MIB::nstAgentModuleObject.0", serial_oid, &serial_len);
      snmp_add_null_var(pdu, serial_oid, serial_len);
 
      print_objid("NET-SNMP-TUTORIAL-MIB::nstAgentModuleObject.0",id_len);
      /**
      *returns : 
      .1702326096.1952796274.1112100141.1886730810.1935753843.1968137065.1953853556.1952543827.841905013.0.990059265.36.3.4294966464
      **/
      status = snmp_synch_response(sess_handle, pdu, &response);
      for(vars = response->variables; vars; vars = vars->next_variable){
	  print_variable(vars->name, vars->name_length, vars);
      }
 
      snmp_free_pdu(response);
      snmp_close(sess_handle);
 
      return (0);
}