From Grandville.net

Net-snmp: Net-snmp-sample

un exemple minimal de requête SNMPv3 vers un équipement Radware


int main(int argc, char* argv[])
{
        netsnmp_session session, *ss;
        netsnmp_pdu    *pdu;
        netsnmp_pdu    *response;
        netsnmp_variable_list *vars;
        int             arg;
        int             count;
        int             current_name = 0;
        char           *names[SNMP_MAX_CMDLINE_OIDS];
        oid             name[MAX_OID_LEN];
        size_t          name_length;
        int             status;
        int             exitval = 0;
        int             failures = 0;

        snmp_sess_init(&session);
        session.version = SNMP_VERSION_3;
        session.securityName = "arno";
        session.securityNameLen = 4;
        session.securityAuthProto = usmHMACMD5AuthProtocol;
        session.securityAuthProtoLen = USM_AUTH_PROTO_MD5_LEN;
        session.securityPrivProto = usmDESPrivProtocol;
        session.securityPrivProtoLen = USM_PRIV_PROTO_DES_LEN;
        session.securityLevel = SNMP_SEC_LEVEL_AUTHPRIV;
        init_snmp("snmpapp");
        session.securityAuthKeyLen = USM_AUTH_KU_LEN;
        if (generate_Ku(session.securityAuthProto,
                session.securityAuthProtoLen,
                (u_char *) "123456789", 9,
                session.securityAuthKey,
                &session.securityAuthKeyLen) != SNMPERR_SUCCESS) {
                snmp_perror(argv[0]);
                fprintf(stderr,
                        "Error generating a key (Ku) from the supplied authentication pass phrase. \n");
                return (-2);
        }

        session.securityPrivKeyLen = USM_PRIV_KU_LEN;

        if (generate_Ku(session.securityAuthProto,
                session.securityAuthProtoLen,
                (u_char *) "987654321", 9,
                session.securityPrivKey,
                &session.securityPrivKeyLen) != SNMPERR_SUCCESS) {
                snmp_perror(argv[0]);
                fprintf(stderr,
                        "Error generating a key (Ku) from the supplied privacy pass phrase. \n");
                return (-2);
        }


        session.peername = "172.16.173.33";
        names[0]=".1.3.6.1.4.1.89.35.1.69.3.0";

        SOCK_STARTUP;

        ss = snmp_open(&session);
        if (ss == NULL) {
                snmp_sess_perror("snmpget", &session);
                SOCK_CLEANUP;
                exit(1);
        }

        pdu = snmp_pdu_create(SNMP_MSG_GET);
        for (count = 0; count < current_name; count++) {
                name_length = MAX_OID_LEN;
                if (!snmp_parse_oid(names[count], name, &name_length)) {
                        snmp_perror(names[count]);
                        failures++;
                } else
                        snmp_add_null_var(pdu, name, name_length);
        }
        if (failures) {
                SOCK_CLEANUP;
                exit(1);
        }


        status = snmp_synch_response(ss, pdu, &response);
        if (status == STAT_SUCCESS) {
                if (response->errstat == SNMP_ERR_NOERROR) {
                        for (vars = response->variables; vars;
                        vars = vars->next_variable)
                                print_variable(vars->name, vars->name_length, vars);

                } else {
                        fprintf(stderr, "Error in packet\nReason: %s\n",
                                snmp_errstring(response->errstat));

                        if (response->errindex != 0) {
                                fprintf(stderr, "Failed object: ");
                                for (count = 1, vars = response->variables;
                                vars && count != response->errindex;
                                vars = vars->next_variable, count++)
                                        /*EMPTY*/;
                                        if (vars) {
                                                fprint_objid(stderr, vars->name, vars->name_length);
                                        }
                                        fprintf(stderr, "\n");
                        }
                        exitval = 2;

                        /*
                        * retry if the errored variable was successfully removed
                        */

                }       /* endif -- SNMP_ERR_NOERROR */

        } else if (status == STAT_TIMEOUT) {
                fprintf(stderr, "Timeout: No Response from %s.\n",
                        session.peername);
                exitval = 1;

        } else {                    /* status == STAT_ERROR */
                snmp_sess_perror("snmpget", ss);
                exitval = 1;
        }                           /* endif -- STAT_SUCCESS */


        if (response)
                snmp_free_pdu(response);
        snmp_close(ss);
        SOCK_CLEANUP;

        return 0;
}
 
Retrieved from http://www.grandville.net?n=Net-snmp.Net-snmp-sample
Page last modified on June 23, 2006, at 03:08 PM