ucd-snmp工具中snmpd扩展的三种形式(1)(4)
一个简单的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信息无法获得.
评论暂时关闭