NET-SNMP en C avec localhost ?

mehdi881 Messages postés 2 Date d'inscription vendredi 21 novembre 2008 Statut Membre Dernière intervention 1 décembre 2010 - 1 déc. 2010 à 18:28
mehdi881 Messages postés 2 Date d'inscription vendredi 21 novembre 2008 Statut Membre Dernière intervention 1 décembre 2010 - 1 déc. 2010 à 18:33
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

PowerNet-MIB::upsBasicOutputStatus.0 = Wrong Type (should be INTEGER): NULL
PowerNet-MIB::upsBasicOutputStatus.2 = 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

#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);
}

1 réponse

mehdi881 Messages postés 2 Date d'inscription vendredi 21 novembre 2008 Statut Membre Dernière intervention 1 décembre 2010
1 déc. 2010 à 18:33
Voici l'erreur qu'il m'affiche avec cette MIB :

NET-SNMP-TUTORIAL-MIB::nstAgentModuleObject.0 = Wrong Type (should be INTEGER): NULL
NET-SNMP-TUTORIAL-MIB::nstAgentModuleObject.0 = Wrong Type (should be INTEGER): NULL

ce qui ne change rien au problème mais qui est plus cohérent ^^

merci encore.
0
Rejoignez-nous