Chinaunix首页 | 论坛 | 博客
  • 博客访问: 299397
  • 博文数量: 103
  • 博客积分: 2345
  • 博客等级: 大尉
  • 技术积分: 902
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-01 09:10
文章分类

全部博文(103)

文章存档

2022年(1)

2018年(3)

2017年(2)

2016年(3)

2015年(8)

2014年(8)

2013年(2)

2012年(9)

2011年(29)

2010年(20)

2009年(18)

我的朋友

分类:

2010-08-27 12:40:04

1. 移植所使用的环境

OSlinux

Arm-linux-gcc3.4.1

Net-snmp:v5.4.2

硬件:

Target CPU:arm 9

2. 交叉编译net-snmpSimple Network Management Protocol  简单网络管理协议)

    确保arm-linux-gcc安装成功并已设置好环境变量。

将net-snmp解压到工程目录下,进入net-snmp源码目录下(此处是net-snmp-5.4.2,以下使用该目录代表源码目录),配置编译选项:

 执行下列命令:(红色代表命令直接在命令行执行)

CC=arm-linux-gcc ./configure --build=i386-linux --host=arm-linux --enable-mini-agent --disable-ipv6 --with-endianness=little --disable-manuals --disable-ucd-snmp-compatibility --enable-as-needed --disable-embedded-perl --without-perl-modules --disable-snmptrapd-subagent --disable-applications --disable-scripts

(各配置选项含义可以使用./configure help来查看,可以添加自己需要的选项或者去掉不需要的选项

配置完成后进行编译:0

然后是使用make install进行安装

编译得到的snmpd比较大,需要进行strip处理,使用arm-linux-strip snmpd处理后得到需要的snmpd文件。

3. 配置snmpd.conf文件

使用net-snmp-5.4.2/EXAMPLE.conf ,并拷贝到默认配置文件目录下,

cp EXAMPLE.conf /usr/local/share/snmp/snmpd.conf

修改snmpd.conf文件中community设置如下

#       sec.name  source          community

com2sec local     localhost       public

com2sec mynetwork 10.10.200.0/24  public #我的网段在200

将组设置改为可读写如:group MyRWGroup v2c  mynetwork (原配置为:group MyROGroup v2c mynetwork),方便测试使用。

4. 移植到目标开发板

将snmpd和snmpd.conf文件移到windows下(此处使用的是windows XP, 传输使用ftp,软件使用ServerUAdmin, ServerU的下载安装和使用自行查找,当然也可以使用其它方式传出文件完成此步骤)。

启动目标板(确保目标板可用,已经移植有bootloader和Linux系统)。Windows和目标板之间的传输通过串口进行(依然使用ServerU,通过ftp命令实现,确保目标板移植有ftp服务,ftp命令使用自行查找),此处确保串口通讯正常,并进入目标系统。

将snmpd文件上传到目标板/usr/sbin目录下(需要更改访问权限为可执行),将snmpd.conf文件上传到/usr/local/share/snmp/下(不存在的目录先要创建)。

现在可以启动snmpd了:snmpd Le d.

启动正常则此步骤完成。

5. 简单测试

确保目标板上snmpd正常启动,另一台管理机器装有linux或者windows(确保其中正确安装了net-snmp),并且和目标板网络连接正确,通讯畅通(管理机ip设置要和snmpd.conf中设置对应)。(当然此步可以通过其它方法完成,如使用图形界面的软件)。

在管理端使用命令:snmpget v 2c c public 10.10.200.101 sysContact.0(注意.0),(此处使用目标板ip为10.10.200.101),如果前面操作正确,则此处可以得到正确输出。

接下来使用snmpset v 2c c public 10.10.200.101 sysContact.0 s ,一般会出现notWriteable的提示,无法设置值。出现这种情况时的解决方案:注释或者删除 snmpd.conf(这里指管理端)中syscontact Me 一行其它如sysLocation

如果要使用snmpv2c为默认版本,可以在snmp.conf(注意没有d)文件中添加defversion 2c一行,snmp.conf文件所在目录和snmpd.conf相同。添加完成后可以使用命令snmpget c public 10.10.200.101 sysContact.0,不用写版本号了,snmpset用法相似。

6. 自定义mib(包括trap)测试

此处仅测试移植成功,使用mib为net-snmp的一个例子,具体是net-snmp.5.4.2/mibs/NET-SNMP-EXAMPLES-MIB.txt。相关的C文件在net-snmp.5.4.2/agent/mibgroup/examples/目录下。

当已经写好或者拥有一个mib文件时,可以通过mib2c来生成相应的C文件模板,在此基础上面添加需要的功能。首先要确保mib2c可用,使用man mib2c可以查看到它的用法。使用前需要将mib文件放在usr/local/share/snmp/mibs/目录下面,并将该mib添加到环境变量MIBS中如:export MIBS=+NET-SNMP-EXSMPLES-MIB,这里的NET-SNMP-EXSMPLES-MIB是mib的定义而不是mib文件的文件名,如果不确定,可以打开mib文件,一般第一行可以看到定义如:NET-SNMP-EXAMPLES-MIB DEFINITIONS ::= BEGIN其中NET-SNMP-EXAMPLES-MIB为定义的mib名,一般和mib文件名相同。

接下来就可以使用mib2c工具生成C文件了,仅以简单的方式为例,mib2c的其它用法见man mib2c或者其它相关网站。具体如:mib2c netSnmpExampleScalars,这里的netSnmpExampleScalars是mib文件中定义的一个对象,具体要生成那个对象的C文件可在mib文件中查找OBJECT IDENTIFIER的定义,接下来会出现两个选项:

1) ucd-snmp style code   2)Net-Snmp style code

可按照自己的需要选择,选择1)则直接生成代码,选择2)会出现三个选项,前两项其实就是mib2c.scalar.conf和mib2c.int_watch.conf,选择1)或2)(此处可选择1)后会生成代码(默认命名是上面mib2c的参数)。

接下来要将mib编译到Agent(snmpd)中(一般自定义mib生成C文件放在net-snmp.5.4.2/agent/mibgroup/目录下),下面使用example中的netSnmpExampleScalar,具体文件在net-snmp.5.4.2/agent/mibgroup/examples/下的scalar_int.h和scalar_int.c。

接下来进行编译,在./configure最后面添加--with-mib-modules=scarlar_int,如果有多个对象则在引号中添加,用空格间隔。配置完成后,编译、安装、移植等和前面2、3、4的过程相似,完成后启动snmpd。管理端使用snmpget c public 10.10.200.101 netSnmpExampleScalar.0获取该节点值,设置snmpset用法相似。

测试trap使用net-snmp.5.4.2/agent/mibgroup/examples/下的notification,用法和简单mib相似,./configure 的modules改为notification或者添加notification进去,重新编译、移植(注意需要修改配置文件snmpd,在文件后面添加trap2sink 10.10.200.202 public一行,指明能够接收该agent发出trap的管理端ip),该mib功能实现为每30秒发送一次trap,管理端使用snmptrapd接收,启动可以使用:

snmptrapd Lo d

如果一切运行正常,snmptrapd能够接收到相应信息。

7. 使用snmpv3

以上定义访问组和ip段,适合snmpv1和v2使用,如前面使用snmpget或者snmpset中的-c public指明了这一点,而v3中使用用户名和密码来访问,使配置更灵活,访问也更安全。

使用net-snmp-config --create-snmpv3-user命令创建一个v3的用户。首先:Enter a SNMPv3 user name to create:

如输入 Living

接下来Enter authentication pass-phrase:

如输入 whoareyou    //(注意长度应该>=8)

接下来Enter encryption pass-phrase:

可以输入加密密码,此处直接回车使用和上面相同输入即whoareyou

这时在/usr/local/share/snmp/snmpd.conf文件后面添加了rwuser Living一行,成功添加用户(snmpd.conf应重新放到目标板上并重启snmpd)。

此时使用snmpget -v 3 -l authPriv -u Living -A "whoareyou" -X "whoareyou"  10.10.200.101 sysUpTime.0测试可成功获取值,注意这里没有使用-c public 的community而是使用用户名密码进行访问。

接下来使用snmpget -v 3 -l authNoPriv -u Living -A "whoareyou"  10.10.200.101 sysUpTime.0命令也没有问题(注意之间的区别)。

最后使用snmpget -v 3 -l noAuthNoPriv -u Living 10.10.200.101 sysUpTime.0命令会出现authorizationError,拒绝访问该对象,解决方法是给予权限,在snmpd.conf中rwuser Living后面添加noauth(注意Living和noauth之间有空格)后重启snmpd,重新使用该命令正确获取值。

以上只是对net-snmp的简单编译和使用,更多功能和操作方法请参考网站:或者net-snmp源码。

阅读(1389) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~