项目需求系统利用SNMP Trap消息上报状态给NMS,考虑使用net-snmp提供的SNMP库函数实现该功能,且需要根据不同端口使用不同的session。
1)头文件
为了使用 netsnmp 的 API,必须 include 以下这些头文件:
1
2
|
#include <
net-snmp
/net-snmp-config.h>
#include <
net-snmp
/net-snmp-includes.h>
|
在使用 netsnmp 库之前,先要做一些必要的初始化工作。 函数 init_snmp 初始化 SNMP Library。 假如在调用 init_snmp 函数时指定了文件名,init_snmp 函数将读取配置文件,设置诸如 Access Control 等具体配置。否则会使用默认的 /etc 下面的配置文件。
初始化 SNMP 库之后,我们就可以打开一个会话 session。此后所有和 NMS 的信息交互都在该 session 内进行,因为可能在同一台机器上运行多个 SNMP 进程,每个进程都需要自己独立的 session 来和 NMS 进行信息交互。
调用函数 snmp_sess_init 成功后将返回一个 session 数据结构。我们用该数据结构来设置 session 的属性,比如 peer 的 IP 信息。在下面的代码中,我将 peername 设置为 16.157.76.227。
还可以设置其它的必要信息,比如 Community,即用于 SNMP 安全的社区设置,前面 snmptrapd 设置为 public,因此这里也设置为 public。这类似于通行密码,不过安全性的确比较弱。
Session 属性设置好之后便可以使用函数 snmp_open 打开 session。示例代码如下。
代码最大长度示例
1
2
3
4
5
6
7
8
9
10
|
init_snmp("myexample");
struct snmp_session session;
snmp_sess_init(&session);
session.version = SNMP_VERSION_2c;
strcpy(peername,"16.157.76.227:1622");
strcpy(commu,"public");
|