snmp学习笔记

snmp5.5 client

包含头文件

#include <net-snmp/net-snmp-config.h>

#include <net-snmp/net-snmp-includes.h>

用到的函数有:
初始化snmp库:
void init_snmp(const char *);                   用于初始化snmp库

netsnmp_session *snmp_open(netsnmp_session *);  打开socket并绑定响应的udp端口,如果返回空,则设置snmp_errno为错误代码

int snmp_close(netsnmp_session *);              关闭输入的session,释放session中申请的内存,抛弃所有未处理的请求,关闭所有socket,返回值为1是表示成功,否则返回0
int snmp_close_sessions(void);                  关闭所有打开的session

 

关于pdu的操作:
netsnmp_pdu    *snmp_pdu_create(int type);     根据type创建snmp的pdu,一下为type可选值

netsnmp_pdu *snmp_clone_pdu(netsnmp_pdu *pdu); 克隆一份pdu

netsnmp_pdu *snmp_fix_pdu(netsnmp_pdu *pdu, int idx);修复一个接收到的pdu,idx使用创建pdu时的type,修复后需要释放响应pdu

void snmp_free_pdu(netsnmp_pdu *pdu);  释放pdu

 

设置pdu中值的操作:

netsnmp_variable_list *snmp_pdu_add_variable(netsnmp_pdu *pdu,   const oid * name, size_t name_length, u_char type, const void * value, size_t len); 向pdu中添加一个oid和这个oid的值

netsnmp_variable_list *snmp_varlist_add_variable(netsnmp_variable_list ** varlist, const oid * name, size_t name_length, u_char type,   const void * value, size_t len);    向netsnmp_variable_list中添加一个oid和这个oid的值

netsnmp_variable_list *snmp_add_null_var(netsnmp_pdu *pdu, const oid * name, size_t name_length);   向pdu中添加一个没有值的oid

netsnmp_variable_list *snmp_clone_varbind(netsnmp_variable_list * varlist);克隆结构体

 

接收和发送snmp的pud有两种方式:同步和异步。同步方式如下:

int snmp_synch_response(netsnmp_session *, netsnmp_pdu *,netsnmp_pdu **);同步发送请求和接收相应。

异步方式如下:请参考http://www.net-snmp.org/wiki/index.php/TUT:Simple_Async_Application
异步和同步不同之处在于:
/* 异步session中需要设置callback */
session.callback = asynch_response;            /* default callback */
session.callback_magic = hs;

其他辅助函数:

/* Output */

void print_variable(const oid * objid, size_t objidlen,const netsnmp_variable_list * variable);

void fprint_variable(FILE * fp,const oid * objid, size_t objidlen, const netsnmp_variable_list * variable);

int snprint_variable(char *buf, size_t buf_len,const oid * objid, size_t objidlen, const netsnmp_variable_list * variable);

void print_value(const oid * objid, size_t objidlen,  const netsnmp_variable_list * variable);

void fprint_value(FILE * fp,const oid * objid, size_t objidlen, const netsnmp_variable_list * variable);

int snprint_value(char *buf, size_t buf_len,const oid * objid, size_t objidlen, const netsnmp_variable_list * variable);

/* Searching the MIB Tree */
oid *snmp_parse_oid(const char *, oid *, size_t *);
int read_objid(const char *, oid *, size_t *);
int get_module_node(const char *, const char *, oid *, size_t *);

 

posted @ 2015-08-26 14:38  明夫人  阅读(687)  评论(0编辑  收藏  举报