net-snmp如何收集信息?
下面是几个示例程序,每个示例的源代码都可以通过net-snmp的帮助超链接从其网站下载。
1.编译实例——恶魔;
# include & ltnet-SNMP/net-SNMP-config . h & gt;
# include & ltnet-SNMP/net-SNMP-includes . h & gt;
# include & ltnet-SNMP/agent/net-SNMP-agent-includes . h & gt;
# include & ltsignal.h & gt
#包含" nstAgentSubagentObject.h "
静态int keep _ running
RETSIGTYPE
stop_server(int a) {
keep _ running = 0;
}
(同Internationalorganizations)国际组织
main(int argc,char *argv[])
{
int agentx _ subagent = 0;/*如果您想成为SNMP主代理,请更改此项*/
/*为了编译到主代理中,它被设置为0*/
int background = 0;/*如果您想在后台运行,请更改此项*/
int syslog = 0;/*如果您想使用syslog,请更改此项*/
/*将日志错误打印到syslog或stderr */
如果(系统日志)
SNMP _ enable _ calllog();
其他
SNMP _ enable _ stderrlog();
/*我们是agentx子代理?*/
if (agentx_subagent) {
/*使我们成为agentx客户。*/
NETSNMP _ DS _ set _ boolean(NETSNMP _ DS _ APPLICATION _ ID,NETSNMP_DS_AGENT_ROLE,1);
}
/*如果需要,在后台运行*/
如果(背景& amp& ampnetsnmp_daemonize(1,!系统日志))
退出(1);
/*如有必要,初始化tcpip */
SOCK _ STARTUP
/*初始化代理库*/
init _ agent(" example-demon ");
/*在此初始化mib代码*/
/* mib代码:来自nstAgentSubagentObject的init_nstAgentSubagentObject。C */
init _ nstAgentSubagentObject();
/*初始化vacm/usm访问控制*/
如果(!agentx_subagent) {
void init _ vacm _ vars();/* -略有修改。
void init _ USM user();
}
/* example-demon将用于读取example-demon.conf文件。*/
/*将在这里读取名为example-demon.conf的配置文件-key */
init _ SNMP(" example-demon ");
/*如果我们要成为snmp主代理,请初始化端口*/
如果(!agentx_subagent)
init _ master _ agent();/*打开监听端口(默认为udp:161) */
/*如果我们收到停止请求(kill -TERM或kill -INT) */
keep _ running = 1;
signal(SIGTERM,stop _ server);
signal(SIGINT,stop _ server);
snmp_log(LOG_INFO,“示例-demon启动并运行。\ n ");
/*您的主循环在这里...*/
while(保持运行){
/*如果使用select(),请参见snmp_api(3)中的snmp_select_info()
/* -或- */
agent _ check _ and _ process(1);/* 0 ==不要阻止*/
}
/*关机时*/
SNMP _ shut down(" example-demon ");
SOCK _ CLEANUP
返回0;
}
这里有详细的注意事项,就不解释了。
在vc项目中,添加了示例mib库文件nstAgentSubagentObject.h和nstAgentSubagentObject.c。并设置好所需的四个库文件,如文章开头所述,看看是否有必要添加wsock32.lib和NODEFAULTLIB。然后你应该能够编译它,没有错误或警告。
2.关于运营
若要运行,必须设置配置文件的路径。最好按照默认路径,在NET-SNMP的下一个二进制包中安装C:\USR。安装时,系统会提示您下载一个PERL安装包来运行mib2c工具,这个网站上有介绍。配置文件放在
C:\ C:\ usr \ etc \ SNMP或C:\usr\share\snmp是有效的。但是如果您正在运行示例主代理,您将在etc目录中找到配置文件。示例的配置文件应该与init_snmp("example-demon ")相同;在中初始化的名称是相同的:example-demon.conf配置文件只需要设置两个值:
#社区的读写是根据需要设置的,这里只设置了阅读。
公共社区
代理地址161
另外,如果运行的是二进制包,snmp.conf文件不应该手动修改,应该通过snmpconf生成。手动修改似乎无效。样本程序的配置可以手动设置。
最后,将example-demon.conf放在c:\usr\etc\snmp下。关闭二进制包的snmpd.exe服务(如果它正在运行)。那就去example-demon.exe。正常情况下,如果安装了二进制包,该示例可以在编译目录下运行。如果没有,把netsnmp.dll复制进去,或者直接把例子放到二进制包的bin目录下。如果有问题,请检查配置文件的路径和设置。最好下载一个叫getif的管理软件,测试用的方便小巧的查询工具。
3.编译你自己的mib库
第一种可以通过mib2c生成一个模板框架,在相关的地方添加数据导入指针等。
第二个可以引用nstAgentSubagentObject.c
第三种方法可以参考net-SNMP-XXX \ agent \ MIB group \ examples下的几种实现方法。
摘要
主要是环境设置,库的编译顺序,配置文件设置。参考例子基本没什么大问题。