1、安装
./configure
make
make install
2、配置参数/文件
只有适当的配置snmpd.conf文件,snmpd才能运行起来。
位置:
可以在./configure的时候指定配置文件所在的位置,也可以用--with-persistent-directory="path"的命令行指定配置文件所在的位置。
文件的配置:
配置文件对于net-snmp的运行十分重要,net-snmp中提供了一个EXAMPLE.conf。
可以在EXAMPLE.conf的基础上进行修改,需要修改的地方主要包括:
1) com2sec 设置可访问的IP地址,访问的口令以及分组
# sec.name source community
com2sec local localhost private
com2sec mynetwork 10.8.0.0/16 private
2)group 设置安全用户名的组
# sec.model sec.name
group MyRWGroup v1 local
group MyRWGroup v2c local
group MyRWGroup usm local
group MyROGroup v1 mynetwork
group MyROGroup v2c mynetwork
group MyROGroup usm mynetwork
3)view 可以对哪些MIB子树进行访问
# incl/excl subtree mask
view all included .1
4)access 指定各个组对MIB子数的读写权限
# context sec.model sec.level match read write notif
access MyROGroup "" any noauth exact all none none
access MyRWGroup "" any noauth exact all all none
3、命令行
在./configure ; make; make install之后在net-snmp/agent目录下会生成一系列的可执行文件。可以用命令行调用这些执行文件,主要用于测试。主要的命令包括:
先在一个窗口中执行./snmpd
1、snmptable
再打开另一个窗口执行snmptable –v 1 –c demopublic -Os localhost sysORTable,会显示sysORTable的详细信息。(获得table的信息)
2、snmpget
可以执行 snmpget –v 1 –c public localhost SNMPv2-MIB::sysUpTime.0,会得到sysUpTime变量的值。(获得普通变量的信息)。
3、......
自己查吧 :http://net-snmp.sourceforge.net/wiki/index.php/Tutorials
4、创建私有MIB文件
想要扩展agent吗?先学写MIB文件。
MIB文件的格式比较简单,参照标准MIB文件写就OK了,之后可以用MG-soft编译。在archlinux上MIB文件库是放在/usr/share/snmp/mibs/下面。
几点注意的问题:
1、注意IMPORTS 私有mib的上级节点
2、注意IMPORTS 变量的类型名,如DisplayString,直接使用的话是不能识别的。
3、注意大小写。
4、注意编译的时候一定把error和warning全都消灭掉。
5、扩展 agent
到这里你已经应该正确的写出了一个私有的MIB文件,你需要把它放置到系统的MIB文件库中。我的系统的MIB库路径是/usr/share/snmp/mibs/。
然后开始学习使用MIB2C这个强大的工具,它的作用是把你写好的一个MIB文件,转化成一个或多个在net-snmp下可以使用的.c/.h文件。
一个简单的例子:当你写成了一个叫做ucdDemoPublic的私有MIB文件。
mib2c -c mib2c.scalar.conf ucdDemoPublic就可以生成ucdDemoPublic.c和ucdDemoPublic.h
MIB2C有很多版本,也有很多参数可供选择,可以在netsnmp的官网上查到:http://net-snmp.sourceforge.net/docs/man/mib2c.html
重要的参数是 –c 后面的那个.conf值:
mib2c.mfd.conf
mib2c.scalar.conf
mib2c.int_watch.conf
mib2c.iterate.conf
mib2c.create-dataset.conf
mib2c.array-user.conf
mib2c.column_defines.conf
mib2c.column_enums.conf
一个重要的问题:
在使用mib2c时,需要配置一个mib2c的配置文件:snmp.conf
我的配置文件路径是:/var/net-snmp/snmp.conf
在配置文件中要加入类似下面的语句,表示我要把XXX-MIB.txt这个mib文件转化成c文件。
mibfile /usr/share/snmp/mibs/XXX-MIB.txt
简单变量的代码生成
用mib2c.scalar.conf生成简单MIB变量的XXX.c和XXX.h,如上例。生成MIB之后需要自己根据具体参数的含义,修改get或set时的动作。在XXX.c中包含两个重要的函数:init_XXX()和handle_XXX(),需要在init_XXX中修改oid,在handle_XXX中的case MODE_GET和case MODE_SET_ACTION中设置GTE和SET的函数。
Table变量的代码生成
用mib2c.mfd.conf生成table类型的MIB文件,生成的文件比较多,包括:XXX.c/.h;XXX_data_access.c/.h; XXX_data_get.c/.h; XXX_data_set.c/.h; XXX_enums.h; XXX_interface.c/.h; XXX_oids.h;
Snmpget的修改:需要修改的是XXX_data_access.c中的XXX__container_load函数,修改XXXTable中的变量值。
Snmpset的修改:需要修改的是:
XXX_data_set.c:XXXTable_commit中设置rowreq_ctx->column_set_flags的值,表示已经修改了XXXTable中的某一项。
XXX_data_set.c:中所有的XXX_set.c中指定自己想要的值。
代码集成
生成了正确的.c/.h文件之后,需要把代码继承到snmpd中,有两种比较靠谱的方法:
1、 把所扩展的agent MIB,静态的集成到snmpd中。方法:把所生成的.c/.h文件拷贝到/net-snmp/agent/mibgroup下面,然后重新 ./configure --with-mib-modules="XXX"; make; make install, 好了你的私有MIB已经被静态集成到snmpd里面了,最后用命令行snmpget;snmpset试验一下。
2、 是动态加载的方式,自己写一个makefile,把所有生成的.c/.h编译成为一个.so,把这个.so放到一个特定的路径下面,并在snmpd.conf文件中指明.so的位置。
1)编译的时候除指定-fPIC -shared -O0参数之外,还需要指定= -I. `net-snmp-config --cflags`,在最后链接成.so的时候还需要指定`net-snmp-config --libs`参数
2)在需要在snmpd.conf文件中指定.so的位置:如
dlmod exampleTable /usr/lib/exampleTable.so
3)在运行./snmpd的时候需要指定所需的.so如:
./snmpd –f –L –Dexample,DLmod,
这样也可以实现对agent的动态扩展。
6、扩展trap
net-snmp的trap也是可以扩展的,我用的方法是把写好的trap代码(.c)放到snmp/snmplib下面,修改一下snmplib的Makefile,make;make install,即可
其代码的样例如下:
view plaincopy to clipboardprint?
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
config_require(util_funcs)
int TrapSendTest()
{
netsnmp_session session,*ss;
netsnmp_pdu *pdu;
long sysuptime;
char csysuptime[20];
int status = 0;
oid oid_sysuptime[] = { 1,3,6,1,2,1,1,3,0 };
char *cp1 = "10.8.72.1", *cp2 = "public";
snmp_sess_init(&session);
session.version = SNMP_VERSION_2c;
session.peername = cp1;
session.remote_port = 162;
session.community = (unsigned char*)cp2;
session.community_len = strlen((char *)session.community);
session.retries = 3;
session.timeout = 2000;
session.sessid = 0;
SOCK_STARTUP;
ss = snmp_add(&session,netsnmp_transport_open_client("snmptrap",
session.peername),
NULL,
NULL);
if (ss == NULL)
{
snmp_sess_perror("snmptable", &session);
SOCK_CLEANUP;
}
pdu = snmp_pdu_create(SNMP_MSG_TRAP2);
sysuptime = get_uptime();
sprintf(csysuptime, "%ld", sysuptime);
status = snmp_add_var(pdu, oid_sysuptime, OID_LENGTH(oid_sysuptime), 't', csysuptime);
if(status != 0)
{
snmp_sess_perror("snmptrap add sysuptime error!", &session);
return -1;
}
status = snmp_send(ss, pdu);
if (status == 0)
{
snmp_sess_perror("snmptrap send info error!", &session);
snmp_free_pdu(pdu);
return -2;
}
snmp_close(ss);
snmp_shutdown("snmptrap");
return 0;
}
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
config_require(util_funcs)
int TrapSendTest()
{
netsnmp_session session,*ss;
netsnmp_pdu *pdu;
long sysuptime;
char csysuptime[20];
int status = 0;
oid oid_sysuptime[] = { 1,3,6,1,2,1,1,3,0 };
char *cp1 = "10.8.72.1", *cp2 = "public";
snmp_sess_init(&session);
session.version = SNMP_VERSION_2c;
session.peername = cp1;
session.remote_port = 162;
session.community = (unsigned char*)cp2;
session.community_len = strlen((char *)session.community);
session.retries = 3;
session.timeout = 2000;
session.sessid = 0;
SOCK_STARTUP;
ss = snmp_add(&session,netsnmp_transport_open_client("snmptrap",
session.peername),
NULL,
NULL);
if (ss == NULL)
{
snmp_sess_perror("snmptable", &session);
SOCK_CLEANUP;
}
pdu = snmp_pdu_create(SNMP_MSG_TRAP2);
sysuptime = get_uptime();
sprintf(csysuptime, "%ld", sysuptime);
status = snmp_add_var(pdu, oid_sysuptime, OID_LENGTH(oid_sysuptime), 't', csysuptime);
if(status != 0)
{
snmp_sess_perror("snmptrap add sysuptime error!", &session);
return -1;
}
status = snmp_send(ss, pdu);
if (status == 0)
{
snmp_sess_perror("snmptrap send info error!", &session);
snmp_free_pdu(pdu);
return -2;
}
snmp_close(ss);
snmp_shutdown("snmptrap");
return 0;
}
在实际用的时候,改一改参数就OK了。
Makefile的修改:
在.o和.lo编译目标列表尾部加入你所加入的文件名即可:XXX.o和XXX.lo, 这样你扩展的trap就静态加入snmpd中了
Snmpd的调用:snmpd的监听程序和你所扩展的trap程序是不能顺序运行的,否则会互相影响。所以要fork一下,父子进程分别运行。
7、调试方法
1、可以使用strace -f -L ./snmpd的方法跟踪snmpd调用的系统调用,来猜测snmpd的运行流程
2、由于snmpd是后台运行的,可以用syslog.
8、总结
net-snmp很好很强大,但是总是有BUG,当你实在找不到错误原因时,不妨找找它的BUG
好运!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sealyao/archive/2009/09/12/4545082.aspx
分享到:
相关推荐
_net-snmp 开发教程 Net-SNMP 是一个开源的基于 SNMP(Simple Network Management Protocol,简单网络管理协议)的开发库,允许开发者创建自己的 SNMP 应用程序。本文将详细介绍 Net-SNMP 的开发过程、开发环境配置...
五、net-snmp-5.9.4社区与开发 net-snmp项目拥有活跃的社区,用户可以在其官方论坛、邮件列表和GitHub仓库中寻求帮助、参与讨论或贡献代码。项目的持续更新和维护确保了net-snmp-5.9.4能够适应不断发展的网络环境和...
《深入探索net-snmp 5.9.1:开源网络管理协议实现的解析与开发实践》 Net-SNMP是一个广泛使用的开源网络管理协议实现,它提供了SNMP(简单网络管理协议)的各种工具、库和服务。这个源码包,net-snmp-5.9.1.tar.gz...
标题中的"net-snmp agent开发详解"指的是使用Net-SNMP库来创建自定义的SNMP代理程序。这个过程涉及到理解SNMP的工作原理、熟悉MIB的概念以及编写相应的C代码来处理SNMP请求。 首先,SNMP代理是运行在网络设备上的...
总结,net-snmp 5.7.2是一个强大且灵活的开源SNMP开发工具,对于Linux平台上的网络管理软件开发而言,无疑是不可或缺的选择。通过深入理解和熟练应用,开发者可以构建出高效、安全的网络管理系统,为企业的IT基础...
net-snmp是一个功能强大的网络管理软件,它提供了一套完整的网络管理和监控工具,包括SNMP代理、SNMP客户端、SNMP库以及用于开发SNMP应用的API。本文将详细介绍net-snmp在Windows x64操作系统中的安装、配置及使用,...
《net-snmp开发详解》 net-snmp是一个广泛使用的网络管理软件套件,它提供了SNMP(简单网络管理协议)的实现,包括一个代理、一个命令行接口和库,允许开发者构建自己的SNMP应用程序。本文将详细介绍如何移植...
在net-snmp-5.5.0-2.x64中,除了命令行工具外,还包括C语言编写的库函数,开发者可以利用这些库来开发自己的SNMP应用程序,实现更高级的网络管理功能。此外,官方提供的文档和源代码让学习和定制net-snmp变得更为...
#### 一、Net-SNMP简介与下载 Net-SNMP 是一个开源项目,提供了一系列关于 Simple Network Management Protocol (SNMP) 的库和工具。它支持多种操作系统平台,包括 Windows 和各种 Linux 发行版等。如果你计划在 ...
4. 软件开发:为开发具有SNMP功能的应用提供库支持,例如网络设备的管理界面。 总之,NET-SNMP 5.6是一个强大的网络管理工具,适用于各种规模的网络环境。通过理解和熟练使用它,可以极大地提升网络运维效率和故障...
net-snmp-5.7.3 linux windows macqt-net-snmp library is a C++/Qt abstraction layer over Net-SNMP API that provides a basic support to SNMPv1/2 requests.
本文将深入探讨Net-SNMP 5.4.1版本,包括其核心特性、应用开发和实际操作中的关键知识点。 1. Net-SNMP概述 Net-SNMP项目始于1990年,旨在提供一个全面的SNMP软件套件,包括代理、命令行工具、库和MIB编译器。...
Net-SNMP是一个开源项目,提供了SNMP代理、命令行实用程序和库,用于开发SNMP应用。作为学习Net-SNMP的基础,这个软件包是必不可少的。配合MIB查看软件,用户可以更深入地理解和操作SNMP相关的网络管理任务。 **...
这个是本人由于公司需要扩展Net-SNMP的Agent而写的一个开发流程文档,压缩包中也包含程序的源代码,和配置文件。根据Net-SNMP官方的实例程序,详细介绍了SNMP代理开发的各个步骤,各位读者按照步骤可以轻松的完成一...
1. **下载**:下载gcc-3.4.1-sol9-intel-local.gz、libgcc-3.4.1-sol9-intel-local.gz、netsnmp-5.4.1-sol9-x86-local.gz、openssl-0.9.8h-sol9-x86-local.gz等文件。 2. **解压**:使用`gzip -d xxx.gz`解压缩文件...
1. **环境设置**:确保在你的开发环境中安装了Net-SNMP库,并包含了相应的头文件。在Windows上,这可能涉及下载并编译源代码;在Linux上,可以通过包管理器如`apt-get`或`yum`安装。 2. **初始化SNMP库**:在你的C...
【net-snmp开发教程】 net-snmp是一个开源的网络管理软件包,它提供了SNMP(简单网络管理协议)的实现,允许系统管理员监控和管理网络设备。本教程将深入介绍net-snmp的开发过程,包括环境配置、工具使用以及相关的...
5. **Chapter 10**:可能会讲解如何使用Net-SNMP库开发自定义的MIB模块,以及如何扩展和定制SNMP代理的行为,以适应特定的网络环境或设备。 6. **Chapter 11**:这一章可能涉及SNMP陷阱(Trap)和通知服务,包括...