zoukankan      html  css  js  c++  java
  • 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 *);

  • 相关阅读:
    通过docker-composer启动容器nginx,并完成spring.boot的web站点端口转发
    手写redis的docker文件,通过docker-compose配置redis
    基于Docker Compose搭建mysql主从复制(1主2从)
    ubuntu 14.04 挂载window共享目录
    asp.net mvc,基于aop实现的接口访问统计、接口缓存等
    自定义属性Attribute的运用
    表值参数的使用
    js的title提示
    Android之ViewPager中包含ViewFlipper时实现双滑动嵌套解决父控件干扰问题
    Android之ViewFlipper实现手动+自动切换图片(附加动画效果)
  • 原文地址:https://www.cnblogs.com/beautifullife4e/p/4760361.html
Copyright © 2011-2022 走看看