net-snmp如何收集信息?

在windows下编译net-snmp其实很简单。我用的是net-snmp5.2.1.2的版本。把源代码下win32目录下的几个库的项目编译一下就可以了。但是要记住,把netsnmp.lib放在编译的最后,不然编译结果会不一样,切记,切记。然后使用编译好的四个库文件:netsnmp.lib、netsnmpagent.lib、netsnmphelpers.lib、netsnmpmibs.lib来编译netsnmp.lib。请注意,还应该添加wsock32.lib。如果有编译错误,提示与VC的默认库冲突,根据提示使用NODEFAULTLIB:XXX删除编译环境中VC的默认库文件。

下面是几个示例程序,每个示例的源代码都可以通过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下的几种实现方法。

摘要

主要是环境设置,库的编译顺序,配置文件设置。参考例子基本没什么大问题。