基于net-snmp进行子代理扩展

  1. 下载net-snmp源码linux版本的,安装好
  2. /usr/local/snmp/share/snmp/mibs 里面放入自己的mib文件, 其中/usr/local/snmp位安装目录

Mib文件如下

1.3 进入/usr/local/snmp/bin,根据Mib文件中的类型

如果是标量,执行
./mib2c -c mib2c.scalar.conf STMETRO-StmPlatform-MIB::platformServiceNumber
如果是表格执行
./mib2c -c mib2c.iterate.conf STMETRO-StmPlatform-MIB::platformServiceTable
在选择1,就会得到相应的.c和.h。

1.4 在net-snmp源码中,添加.h和.c进行agent自定义扩展

 

附上demo初始化代码

#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
#include <signal.h>

 

#include <nstAgentSubagentObject.h>

 

static int keep_running;

 

RETSIGTYPE
stop_server(int a) {
    keep_running = 0;
}

 

int
main (int argc, char **argv) {
  int agentx_subagent=1; /* change this if you want to be a SNMP master agent */
  int background = 0; /* change this if you want to run in the background */
  int syslog = 0; /* change this if you want to use syslog */

 

  /* print log errors to syslog or stderr */
  if (syslog)
    snmp_enable_calllog();
  else
    snmp_enable_stderrlog();

 

  /* we're an agentx subagent? */
  if (agentx_subagent) {
    /* make us a agentx client. */
    netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1);
  }

 

  /* run in background, if requested */
  if (background && netsnmp_daemonize(1, !syslog))
      exit(1);

 

  /* initialize tcpip, if necessary */
  SOCK_STARTUP;

 

  /* initialize the agent library */
  init_agent("example-demon");

 

  /* initialize mib code here */

 

  /* mib code: init_nstAgentSubagentObject from nstAgentSubagentObject.C */
  init_nstAgentSubagentObject(); 

 

  /* initialize vacm/usm access control  */
  if (!agentx_subagent) {
      init_vacm_vars();
      init_usmUser();
  }

 

  /* example-demon will be used to read example-demon.conf files. */
  init_snmp("example-demon");

 

  /* If we're going to be a snmp master agent, initial the ports */
  if (!agentx_subagent)
    init_master_agent();  /* open the port to listen on (defaults to udp:161) */

 

  /* In case we recevie a request to stop (kill -TERM or kill -INT) */
  keep_running = 1;
  signal(SIGTERM, stop_server);
  signal(SIGINT, stop_server);

 

  snmp_log(LOG_INFO,"example-demon is up and running.\n");

 

  /* your main loop here... */
  while(keep_running) {
    /* if you use select(), see snmp_select_info() in snmp_api(3) */
    /*     --- OR ---  */
    agent_check_and_process(1); /* 0 == don't block */
  }

 

  /* at shutdown time */
  snmp_shutdown("example-demon");
  SOCK_CLEANUP;

  return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于 net-snmp 的项目开发可以按照以下步骤进行: 1. 确定需求:明确项目的目标和功能要求,例如监控网络设备的状态信息、采集性能数据等。 2. 安装和配置 net-snmp:下载并安装 net-snmp 软件包,根据需要进行相应的配置,如设置 SNMP 代理、定义 MIB 文件等。 3. 编写代码:使用适合的编程语言(如 C、Python、Java)编写代码来与 SNMP 代理进行交互。net-snmp 提供了一系列的 API 接口,可以方便地实现 SNMP 操作,如获取设备信息、设置参数、发送 Trap 等。 4. 连接和通信:使用 SNMP 协议与网络设备建立连接,并通过 SNMP 消息进行通信。可以使用 SNMP 的 Get、Set、Walk 等操作来获取或修改设备的数据。 5. 数据处理和分析:对从设备获取到的数据进行处理和分析,根据需求进行相应的计算、统计或报表生成等操作。 6. 错误处理和异常处理:考虑到网络环境的复杂性,需要合理地处理错误和异常情况,如设备断连、超时等。 7. 测试和调试:编写测试用例来验证代码的正确性和功能完整性,并进行调试和优化。 8. 文档编写:编写项目文档,包括项目需求、设计、实现等内容,以方便后续的维护和扩展。 9. 部署和运行:将项目部署到目标环境中,并进行验证和运行。 需要注意的是,net-snmp 是一个功能强大的 SNMP 实现,提供了丰富的功能和接口,但同时也需要对 SNMP 协议有一定的了解。在开发过程中,可以参考 net-snmp 官方文档和示例代码,以及相关的 SNMP 标准。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值