一个简单的SNMP代理程序

实际上, 我们可以利用ucd-snmp编写自己的SNMP代理程序. 如下文件, hsnmpd.c, 所示. 其实, 这个文件与上一个子代理程序完全相同. 我仅仅是将变量agentx_subagent赋成0.代码如下.

hsnmpd.c :

1) #include ;
2) #include ;
3) #include ;
4) int main () {
5) int agentx_subagent=0; 
6) if (agentx_subagent) {
7) ds_set_boolean(DS_APPLICATION_ID, DS_AGENT_ROLE, 1);
8) }
9) init_agent("snmpd");
10) init_ustScalarSet();
11) init_snmp("snmpd");
12) if (!agentx_subagent)
13) init_master_agent(161, NULL, NULL); 
14) while(1) {
15) agent_check_and_process(1);
16) }
17) snmp_shutdown("snmpd");
18) }
第1-3行: 必须包含的头文件.
第5行: 定义一个变量, 表示该代理是主代理或子代理. 
        通过ucd-snmp开发包编写的代理程序, 既可以作为AgentX主代理, 也可以作为AgentX子代理. 
第7-9行:子代理需要初始化的内容.
第10行:初始化代理.
第11行:初始化支持的MIB. 文件ustScalarSet.c中的函数.
第12行:初始化SNMP.
第13-14行:主代理需要初始化的内容.
第15-17行:SNMP协议PDU处理主循环.
第18行:关闭SNMP, 做一些释放资源的工作.

如下编译:

gcc -g -I/usr/local/include -o hsnmpd hsnmpd.c ustScalarSet.c 
/usr/local/lib/libucdagent.a /usr/local/lib/libucdmibs.a /usr/local/lib/libsnmp.a

运行该程序, hsnmpd. 除了一些关于无法解释配置文件的相关内容的报警外, 程序运行正常. 并且, 可以用工具程序, 如snmpget, snmpwalk等访问其中的MIB信息. 当然, 仅仅只有UCD-SNMP-TUTORIAL-MIB中所描述的信息, 而其他的没有实现的MIB信息无法获得.


相关内容