NET-SNMP 配置与MIB 自定义

配置文件对于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?
1.       #include  
2.       #include  
3.       config_require(util_funcs)                  
4.       int   TrapSendTest()  
5.       {  
6.              netsnmp_session session,*ss;  
7.              netsnmp_pdu *pdu;  
8.              long sysuptime;  
9.              char csysuptime[20];  
10.              int status = 0;  
11.              oid oid_sysuptime[] = { 1,3,6,1,2,1,1,3,0 };  
12.              char *cp1 = "10.8.72.1", *cp2 = "public";    
13.         
14.              snmp_sess_init(&session);  
15.              session.version = SNMP_VERSION_2c;  
16.              session.peername = cp1;  
17.              session.remote_port = 162;  
18.              session.community = (unsigned char*)cp2;  
19.              session.community_len = strlen((char *)session.community);  
20.              session.retries = 3;  
21.              session.timeout = 2000;  
22.              session.sessid = 0;  
23.         
24.              SOCK_STARTUP;  
25.              ss = snmp_add(&session,netsnmp_transport_open_client("snmptrap",    
26.                      session.peername),  
27.                      NULL,    
28.                      NULL);  
29.              if (ss == NULL)    
30.              {  
31.                      snmp_sess_perror("snmptable", &session);  
32.                      SOCK_CLEANUP;  
33.              }  
34.              pdu = snmp_pdu_create(SNMP_MSG_TRAP2);      
35.              sysuptime = get_uptime();  
36.              sprintf(csysuptime, "%ld", sysuptime);    
37.              status = snmp_add_var(pdu, oid_sysuptime, OID_LENGTH(oid_sysuptime), 't', csysuptime);   
38.              if(status != 0)  
39.              {    
40.                      snmp_sess_perror("snmptrap add sysuptime error!", &session);  
41.                      return -1;  
42.              }  
43.              status = snmp_send(ss, pdu);  
44.              if (status == 0)  
45.              {    
46.                      snmp_sess_perror("snmptrap send info error!", &session);  
47.                      snmp_free_pdu(pdu);  
48.                      return -2;  
49.              }    
50.              snmp_close(ss);  
51.              snmp_shutdown("snmptrap");  
52.              return 0;  
53.       }  
在实际用的时候,改一改参数就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

好运!


http://blog.sina.com.cn/s/blog_9e7fb3070101ihfl.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 深入理解net-snmp是一本关于net-snmp工具的参考手册,主要介绍了net-snmp的特性、功能和使用方法。net-snmp是一个开源的网络管理工具,用于实现Simple Network Management Protocol(SNMP)的功能。 该书首先介绍了SNMP的基本概念和工作原理,包括管理端和被管理端之间的通信和数据交换过程。然后详细介绍了net-snmp的安装和配置步骤,包括编译和安装net-snmp软件包、设置SNMP代理和管理端的认证方法等。 接下来,书中详细介绍了net-snmp工具的使用方法,包括snmpget、snmpset、snmpwalk等命令的参数和用法。通过这些命令,用户可以从被管理设备中获取信息、设置参数和运行命令,对网络设备进行管理和监控。 此外,该书还介绍了如何使用net-snmp开发自定义的SNMP扩展和应用程序。通过使用net-snmp的API,开发人员可以编写自己的管理应用程序,实现特定的管理功能和监控需求。 书中还提供了大量的示例和实际应用场景,帮助读者更好地理解net-snmp的使用方法和功能特性。同时,书中还包括了一些常见问题和故障排除的方法,供读者参考和解决实际问题。 总之,深入理解net-snmp是一本权威的参考手册,适合网络管理员、开发人员和对SNMP协议感兴趣的读者阅读。通过学习net-snmp,读者可以深入了解SNMP的原理和应用,掌握net-snmp工具的使用方法,从而更好地进行网络管理和监控。 ### 回答2: Net-SNMP是一种开源的SNMP(Simple Network Management Protocol,简单网络管理协议)工具,用于在网络上实现管理和监控的功能。Net-SNMP提供了一个完整的SNMP实现,包括SNMP协议引擎、MIB解析器、SNMP工具等。 《深入理解net-snmp》这本书是为了帮助读者更好地了解和使用Net-SNMP而编写的。这本书的内容主要包括对Net-SNMP的介绍和使用方法、SNMP协议的基础知识、SNMP协议传输层的讲解以及针对特定设备的SNMP配置和管理等内容。 通过深入理解Net-SNMP,读者将能够掌握使用Net-SNMP进行网络管理和监控的技能。首先,读者将学习如何安装和配置Net-SNMP,并了解各种SNMP工具的使用方法,例如snmpget、snmpwalk等。然后,读者将学习SNMP协议的基础知识,包括SNMP的数据类型、对象标识符(OID)的使用方法等。此外,读者还将了解SNMP的传输层协议,包括SNMPv1、SNMPv2c和SNMPv3等。最后,读者将学习如何对特定设备进行SNMP配置和管理,包括设置SNMP团体名、配置SNMP陷阱等。 总的来说,《深入理解net-snmp》这本书能够帮助读者深入理解和掌握Net-SNMP工具的使用方法,使其能够更好地进行网络管理和监控。无论是网络管理员、系统工程师还是对网络管理和监控感兴趣的读者,都能从这本书中获得很多实用的知识和技能。 ### 回答3: Net-SNMP是一个开源的网络管理工具集,用于实现SNMP(Simple Network Management Protocol)的管理功能。《深入理解Net-SNMP》是一本介绍Net-SNMP工具集的详细解析的PDF电子书。该电子书分为多个章节,逐步深入讲解了Net-SNMP的使用和原理。 首先,该书介绍了SNMP协议的概念和作用,解释了SNMP的工作原理和基本架构。接着,它详细介绍了Net-SNMP工具集的组成和各个组件的功能。例如,它介绍了snmpd,即SNMP代理程序,它负责接收和处理SNMP请求;还介绍了snmpwalk和snmpget等命令行工具,用于获取和设置管理信息。 《深入理解Net-SNMP》还深入讲解了Net-SNMP配置和使用。它详细介绍了如何配置和启动snmpd,包括如何设置SNMP代理的身份验证、访问控制和日志记录等。此外,它还演示了如何使用snmpwalk和snmpget等命令行工具来查询和修改SNMP代理的管理信息。 此外,该书还提供了一些常见的使用示例和最佳实践。例如,它演示了如何使用SNMP来监控网络设备,如交换机、路由器和服务器等。它还介绍了如何使用Net-SNMP工具集进行远程诊断和故障排除,以及如何编写自定义的SNMP扩展和插件。 总的来说,《深入理解Net-SNMP》是一本对Net-SNMP工具集进行详细解析的电子书。它适用于任何对SNMP和网络管理感兴趣的技术人员,通过阅读该书,读者将能够充分理解和使用Net-SNMP工具集,并应用于实际的网络管理和监控中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值