netsnmp源码
A. 如何用net snmp开发snmp客户端
Linux下net-snmp的安装提供的net-snmp安装包中有以下目录运行install脚本执行安装,但不建立用户运行install_cm脚本执行安装并建立cm用户运行install_vg脚本执行安装并建立vg用户用户也可以用命令:net-snmp-config --create-snmpv3-user -a MD5 -A $snmp_auth -x DES -X $snmp_priv $snmp_usr$snmp_auth 是认证密码,密码必须大于8位$snmp_priv是加密密码,密码必须大于8位$snmp_usr是将要建立的用户名 安装完以后自动启动可以运行 tools/目录下的snmpwalk命令来检查是否安装成功./snmpwalk -v 3 -l authPriv -u cm -aMD5 -A password -xDES -X password 127.0.0.1 Windows下snmp协议的安装(windows2003,windows xp)控制面板-》添加删除程序-》添加组件-》管理和监视工具点详细信息,勾选“简单网络管理协议”安装过程中会提示插入系统盘安装完成后,选择管理工具-》服务在右边的列表中选中“SNMP service”, 右键-》属性里面有一个安全页面,可以自己添加一个团体,也可以用默认的“public”团体。下面选择“接受任意主机的snmp数据包”,或者选择“接受指定主机的snmp数据包”,填入主机的ip地址或主机名。
B. net-snmp代理(snmpd)扩展开发:
其实get和set对应的调用函数已经挂载好了,只需要修改对应的函数实现,就可以达到你需要的结果。不过需要在configure文件中添加--with-mib-moles="XXXX"这样的语句,并且重新configure一遍,才能将新添加的模块编译进去。你问的比较宽泛,我回答的可能也不是很清楚,可以追问。
C. 新人求助windows下netsnmp怎么连接python
由于需要练手,准备将nagios的bash shell/perl监控脚本改用python写,而监控机上yum安装的net-snmp默认没有启用python模块,这里重新编译安装一个。
需要准备的安装包包括:
setuptools-0.6c11-py2.4.egg //提供easy_install指令用来直接在线安装python模块,类似于perl的 cpan install;
net-snmp-5.7.2.tar.gz //net-snmp的源码包。
先安装setuptools-0.6c11-py2.4.egg,否则net-snmp编译安装无法通过。
#chmod 755 setuptools-0.6c11-py2.4.egg
#./setuptools-0.6c11-py2.4.egg
接着,安装net-snmp
#tar -zxvf net-snmp-5.7.2.tar.gz
#cd net-snmp-5.7.2
#./configure --prefix=/usr/local/netsnmp --with-python-moles
#make
#make install
#cd python
#python setup.py build
#python setup.py test
出现以下错误:
ImportError: libnetsnmp.so.30: cannot open shared object file: No such file or directory
由于net-snmp是编译安装,且安装路径为/usr/local/netsnmp,以至于找不到相应模块,解决方法:
#echo "/usr/local/netsnmp/lib" >> /etc/ld.so.conf
#ldconfig
#python setup.py test//出现类似下图内容即正常:
#python setup.py install
测试net-snmp的python模块的导入:
#python
>>>import netsnmp //如果没有报错的话,则net-snmp的python模块启用成功。
D. net-snmp是如何收集信息的
在windows下编译net-snmp其实很简单,我用的是net-snmp5.2.1.2的版本。只需把源码下的win32目录中的几个库的工程编译就行了。但记住,把netsnmp.lib放在最后编译,要不然编译结果不一样,切记,切记。然后再用编译出来的四个库文件: netsnmp.lib,netsnmpagent.lib,netsnmphelpers.lib,netsnmpmibs.lib,来编译netsnmp.dll。注意还要加上wsock32.lib。如果编译出错,提示跟VC默认的库有冲突,按提示在编译环境中用NODEFAULTLIB:XXX来去掉VC的缺省库文件。
下面介绍一下几个例子程序,例子源代码都可以通过net-snmp的帮助超链接连到其网站下载
1.编译例子example-demon;
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/agent/net-snmp-agent-includes.h>
#include <signal.h>
#include "nstAgentSubagentObject.h"
static int keep_running;
RETSIGTYPE
stop_server(int a) {
keep_running = 0;
}
int
main(int argc, char *argv[])
{
int agentx_subagent=0; /* change this if you want to be a SNMP master agent */
/*为了编译成为主代理,这里设为0*/
int background = 0; /* change this if you want to run in the background */
int syslog = 0; /* change this if you want to use syslog */
/* print log errors to syslog or stderr */
if (syslog)
snmp_enable_calllog();
else
snmp_enable_stderrlog();
/* we're an agentx subagent? */
if (agentx_subagent) {
/* make us a agentx client. */
netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1);
}
/* run in background, if requested */
if (background && netsnmp_daemonize(1, !syslog))
exit(1);
/* initialize tcpip, if necessary */
SOCK_STARTUP;
/* initialize the agent library */
init_agent("example-demon");
/* initialize mib code here */
/* mib code: init_nstAgentSubagentObject from nstAgentSubagentObject.C */
init_nstAgentSubagentObject();
/* initialize vacm/usm access control */
if (!agentx_subagent) {
void init_vacm_vars();/*---------------小修改一下---------------*/
void init_usmUser();
}
/* example-demon will be used to read example-demon.conf files. */
/*这里会读取一个为example-demon.conf 的配置文件--关键*/
init_snmp("example-demon");
/* If we're going to be a snmp master agent, initial the ports */
if (!agentx_subagent)
init_master_agent(); /* open the port to listen on (defaults to udp:161) */
/* In case we recevie a request to stop (kill -TERM or kill -INT) */
keep_running = 1;
signal(SIGTERM, stop_server);
signal(SIGINT, stop_server);
snmp_log(LOG_INFO,"example-demon is up and running.\n");
/* your main loop here... */
while(keep_running) {
/* if you use select(), see snmp_select_info() in snmp_api(3) */
/* --- OR --- */
agent_check_and_process(1); /* 0 == don't block */
}
/* at shutdown time */
snmp_shutdown("example-demon");
SOCK_CLEANUP;
return 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。配置文件只需设两个值就够了:
#community 的读写根据需要设,这里设的是readonly
rocommunity public
agentaddress 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\mibgroup\examples下的几个实现方式。
总结
主要是环境设置,库的编译顺序,配置文件设置。参考例子基本没多大问题。
E. 请问net-snmp-5.7.2源码包中哪个文件处理与NSM通信以及解析oid 急!高分!!!
用 snmp_parse_oid 函数解析相应变量的 OID
snmp_parse_oid("HP-DW-SAMPLE::host",varId,&varIdLen)
F. Netsnmp_Node_Handler是什么类型原型是什么
typedef int( Netsnmp_Node_Handler )(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info*requests)
就是说如果你定义Netsnmp_Node_Handler abc;
实际上是定义 int abc(netsnmp_mib_handler *handler, netsnmp_handler_registration *reginfo, netsnmp_agent_request_info *reqinfo, netsnmp_request_info*requests)
G. snmp和net-snmp的区别
都是snmp的开发包而已 还有hp的 snmp++ 都可以 随你喜欢了
H. 如何安装net-snmp 5.7.3 并进行开发
y_Bg.jpg);}
table { font-family: "宋体"; font-size: 9pt; line-height: 20px; color: #333333}
a:link { font-size: 9pt; color: #333333; text-decoration: none}
a:visited { font-size: 9pt; color: #333333; text-decoration: none}
a:hover { font-size: 9pt; color: #E7005C; text-decoration: underline}
a:active { font-size: 9pt; color: #333333; text-decoration: none}
/*全局样式结束*/
</style>
I. python 怎么启用netsnmp
[apt-get/yum/zipper/pocman] ininstall net-snmp-python 安装library
install net-snmp net-snmp-utils 安装ipython
然后在程序里面
import netsnmp
就可以使用了.