Re: snmpv3 broadcast
David Peer <[email protected]>
| Newsgroups | gmane.network.net-snmp.user |
|---|---|
| Organization | cs.huji.ac.il |
| Message-ID | <[email protected]> |
I manged to send request with v1, but how, with this code, handle with
all the responses?
I still will be glad to here if someone managed to do it using v3.
David
David Peer wrote:
>Hi,
>I've changed snmpdemoapp to work with snmpv3 ( auth & Priv ), to as my
>configuration of snmpd.conf,
>But i can't handle async response.
>I've applied the patch:
>70068--http://sf.net/support/tracker.php?aid=700681
>on 5.3 release.
>the broadcast is sent out ( checked with ethereal ), but as I mensioned
>I can't handle async response.
>And that the output from runing it:
>
>
>No log handling enabled - turning on stderr logging
>snmpget: USM unknown security name (no such user exists)
>
>
>
>Here is the code:
>
>#include <net-snmp/net-snmp-config.h>
>#include <net-snmp/net-snmp-includes.h>
>#include <string.h>
>
>/* change the word "define" to "undef" to try the (insecure) SNMPv1
>version */
>#define DEMO_USE_SNMP_VERSION_3
>
>#ifdef DEMO_USE_SNMP_VERSION_3
>const char *our_v3_passphrase = "???????????";
>const char *our_v3_priv_passphrase = "?????????????";
>#endif
>
>int main(int argc, char ** argv)
>{
> struct snmp_session session, *ss;
> struct snmp_pdu *pdu;
> struct snmp_pdu *response;
>
> oid anOID[MAX_OID_LEN];
> size_t anOID_len = MAX_OID_LEN;
>
> struct variable_list *vars;
> int status;
> int count=1;
>
> /*
> * Initialize the SNMP library
> */
> init_snmp("snmpapp");
>
> /*
> * Initialize a "session" that defines who we're going to talk to
> */
> snmp_sess_init( &session ); /* set up defaults */
>// Enable Bcasting
> session.peername = strdup("255.255.255.255");
> session.flags |= SNMP_FLAGS_UDP_BROADCAST;
>// session.callback = 0;
> **** What should if any, do here?????
> session.callback = snmp_async_send;
>
> /* set up the authentication parameters for talking to the server */
>
>#ifdef DEMO_USE_SNMP_VERSION_3
>
> /* Use SNMPv3 to talk to the experimental server */
>
> /* set the SNMP version number */
> session.version=SNMP_VERSION_3;
>
> /* set the SNMPv3 user name */
>// session.securityName = strdup("MD5User");
> session.securityName = strdup("?????");
> session.securityNameLen = strlen(session.securityName);
>
> /* set the security level to authenticated, but not encrypted */
> session.securityLevel = SNMP_SEC_LEVEL_AUTHPRIV;
>
> /* set the authentication method to MD5 */
> session.securityAuthProto = usmHMACMD5AuthProtocol;
> session.securityAuthProtoLen =
>sizeof(usmHMACMD5AuthProtocol)/sizeof(oid);
> session.securityAuthKeyLen = USM_AUTH_KU_LEN;
>
> /* set the authentication key to a MD5 hashed version of our
> passphrase "The UCD Demo Password" (which must be at least 8
> characters long) */
> if (generate_Ku(session.securityAuthProto,
> session.securityAuthProtoLen,
> (u_char *) our_v3_passphrase, strlen(our_v3_passphrase),
> session.securityAuthKey,
> &session.securityAuthKeyLen) != SNMPERR_SUCCESS) {
> snmp_perror(argv[0]);
> snmp_log(LOG_ERR,
> "Error generating Ku from authentication pass phrase. \n");
> exit(1);
> }
>
> /* set the priv method to DES */
> session.securityPrivProto = usmDESPrivProtocol;
> session.securityPrivKeyLen = USM_PRIV_KU_LEN;
>
> if (generate_Ku(session.securityAuthProto,
> session.securityAuthProtoLen,
> (u_char *) our_v3_priv_passphrase,
>strlen(our_v3_priv_passphrase),
> session.securityPrivKey,
> &session.securityPrivKeyLen) != SNMPERR_SUCCESS) {
> snmp_perror(argv[0]);
> snmp_log(LOG_ERR, "Error generating Ku from priv pass
>phrase. \n");
> exit(1);
> }
>
>#else /* we'll use the insecure (but simplier) SNMPv1 */
>
> /* set the SNMP version number */
> session.version = SNMP_VERSION_1;
>
> /* set the SNMPv1 community name used for authentication */
> session.community = "demopublic";
> session.community_len = strlen(session.community);
>
>#endif /* SNMPv1 */
>
> /*
> * Open the session
> */
> SOCK_STARTUP;
> ss = snmp_open(&session); /* establish the
>session */
>
> if (!ss) {
> snmp_perror("ack");
> snmp_log(LOG_ERR, "something horrible happened!!!\n");
> exit(2);
> }
>
> /*
> * Create the PDU for the data for our request.
> * 1) We're going to GET the system.sysDescr.0 node.
> */
> pdu = snmp_pdu_create(SNMP_MSG_GET);
> read_objid(".1.3.6.1.2.1.1.1.0", anOID, &anOID_len);
>
>#if OTHER_METHODS
> get_node("sysDescr.0", anOID, &anOID_len);
> read_objid("system.sysDescr.0", anOID, &anOID_len);
>#endif
>
> snmp_add_null_var(pdu, anOID, anOID_len);
>
> /*
> * Send the Request out.
> */
> status = snmp_synch_response(ss, pdu, &response);
>
> /*
> * Process the response.
> */
> if (status == STAT_SUCCESS && response->errstat == SNMP_ERR_NOERROR) {
> /*
> * SUCCESS: Print the result variables
> */
>
> for(vars = response->variables; vars; vars = vars->next_variable)
> print_variable(vars->name, vars->name_length, vars);
>
> /* manipuate the information ourselves */
> for(vars = response->variables; vars; vars = vars->next_variable) {
> if (vars->type == ASN_OCTET_STR) {
> char *sp = (char *)malloc(1 + vars->val_len);
> memcpy(sp, vars->val.string, vars->val_len);
> sp[vars->val_len] = '\0';
> printf("value #%d is a string: %s\n", count++, sp);
> free(sp);
> }
> else
> printf("value #%d is NOT a string! Ack!\n", count++);
> }
> } else {
> /*
> * FAILURE: print what went wrong!
> */
>
> if (status == STAT_SUCCESS)
> fprintf(stderr, "Error in packet\nReason: %s\n",
> snmp_errstring(response->errstat));
> else
> snmp_sess_perror("snmpget", ss);
>
> }
>
> /*
> * Clean up:
> * 1) free the response.
> * 2) close the session.
> */
> if (response)
> snmp_free_pdu(response);
> snmp_close(ss);
>
> SOCK_CLEANUP;
> return (0);
>} /* main() */
>
>
>
-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems? Stop! Download the new AJAX search engine that makes
searching your log files as easy as surfing the web. DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
_______________________________________________
Net-snmp-users mailing list
[email protected]
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users