net-snmp开发

1 net-snmp源码下载安装

1.到net-snmp官方网站下载源码(http://www.net-snmp.org/download.html),本文下载版本为5.4.4。建议下载最新版本。
#tar -zxf net-snmp.5.4.4.tar.gz
#./configure
#make
#make install (需要root权限)
a.不出意外,编译可以顺利完成,如果遇到缺少依赖库,根据提示安装对应的依赖。
b.perl库依赖安装:apt-get install libperl-dev
c.如果不用perl必须加上–without-perl-modules --disable-embedded-perl两个选项
d.默认情况下,将执行文件安装到/usr/local/bin/目录下;相关的conf文件安装在/usr/local/share/snmp/目录下;及mib文件存储路径为:/usr/local/share/snmp/mibs/。

2.接下来试图运行snmpd代理,看能否成功运行。
#./snmpd -Lo -f -d (需root权限)带参数的意思为log输出在控制台,非后台运行及debug收发报文打印。
不出意味的话,此时运行会出错,提示未找到对应的configure文件,主要是snmpd需要的snmpd.conf文件未安装。
接下来配置snmpd.conf文件,使用#snmpconf -g basic_setup命令配置,该配置为问答形式的安装,配置完成后会已snmpd.conf在当前目录下,将其复制到/usr/local/share/snmp/或/usr/local/etc/snmp/目录下。再次运行,查看执行结果。
snmpd.conf文件内容如下:
syslocation hangzhou zhejiang
syscontact chenchao03@
sysservices 76
proc init 1 1
proc httpd
disk / 30%
load 7 6 5
file /var/log/snmpd.log 1024
file /home/chenchao/file_size 2
trapsink 192.168.1.1
trap2sink 10.10.10.10
informsink 192.168.1.1
informsink localhost
trapcommunity public
autoTrapenable 1
rwuser chenchao
iquerySecName chenchao
rouser chenchao auth .1
rocommunity public
rwcommunity private 127.0.0.1
rwcommunity privateHigh

以上为一个基本的snmpd.conf配置文件信息,具体的可以根据自身需求增删内容。
3.测试下其他的snmp相关工具:(具体命令含义另述)
snmpwalk -c public -v 1 10.10.10.99 .1.3.6.1.2.1.4.20
snmpset -v 2c -c public 10.10.10.99 .1.3.6.1.2.1.1.4.0 s test

2 MIB文件编辑

下载MG-SOFT+MIB+Browser+v10b破解版工具进行编辑。该工具有build、compile、browser功能。

2.1 MIB Builder

例子
exampleObject1,exampleObject2:为定义的标量参数
simpleTable:为Table
simpleEntry:为row
simpleTbColum1,simpleTbColum2,simpleTbColum3:为columner参数。
在table中一般定义第一个参数为index参数,用于处理table表的深度。

2.1.1 实例

创建实例mib文件,AP2-MIB.my。
在这里插入图片描述

2.2 MIB Compile

当在2.1中编辑好MIB文件后,将编译生成编译文件,供Browser浏览。在MIB Builder中有按钮启动Compile进行编译,编译完成后将保存在C:\Program Files (x86)\MG-SOFT\MIB Browser\MIB\SMIDB目录下。

2.3 MIB Browser

打开MIB Browser,导入同步导入MIB***.smidb文件,进行操作。具体操作有Contact,Get,Set,Walk,Table View等。
在这里插入图片描述

3 SNMP 私有MIB实现C函数

3.1 MIB文件导出对应C文件

在此,所有的环境都已经建立,测试环境下,MIB存放路径为/usr/local/share/snmp/mibs,将要转换的MIB文件XXX-MIB.txt(对应MIB文件,如实例:AP2-MIB.my)存放在该目录下。
查看MIB文件中的“ApMgnt MODULE-IDENTITY”,将要生成的C文件名为APMgnt.c及APMgnt.h。
使用mib2c工具生成,命令为:mib2c XXX-MIB::ApMgnt

  1. ucd-snmp style code

  2. Net-SNMP style code
    选择2

  3. If you’re writing code for some generic scalars
    (by hand use: “mib2c -c mib2c.scalar.conf aoboApMgnt”)

  4. If you want to magically “tie” integer variables to integer
    scalars
    (by hand use: “mib2c -c mib2c.int_watch.conf aoboApMgnt”)

  5. Don’t generate any code for the scalars
    选择1
    1) tables where the list of rows is external to the agent.
    This is suited to MIBs which monitor or manipulate external
    data (perhaps extracted from the operating system kernel
    or other system interfaces), and where rows are typically
    created or destroyed independently of the SNMP agent.

2) tables where the list of rows is held by the agent itself.
   This is particularly suited to tables that are primarily
   manipulated via SNMP, or where the rows of the table are
   relatively static.

3) Do not generate code for the tables.

可以选择3(看需求)
将生成C文件。
接下来就是编辑C文件的实现接口。

3.2 SNMP 私有MIB实现模板处理

SNMP操作中主要有标量参数(普通的叶子节点)与table(表格)参数(定义在表中的一行行);table(表)参数还可能是二重(二维)。

mib2c.scalar.conf

这个模板主要生成标量参数的处理。
命令:mib2c -c mib2c.scalar.conf AP2-MIB:ApMgmt

mib2c.iterate.conf

这个模板主要生成table参数的处理。
命令:mib2c -c mib2c.iterate.conf AP2-MIB:ApMgmt

mib2c.old-api.conf

这个模板即生成标量,又生成table参数的处理。
命令:mib2c -c mib2c.old-api.conf AP2-MIB:ApMgmt

注释:

1.当使用old-api实现的时候可以用以上命令完成C函数的生成,即完成标量参数与表格参数的处理。
2.当使用scalar+iterate实现的时候,需要分别执行以上命令生成函数,并将两者的生成文件整合成一起。

4.C文件实现及编译安装

4.1openWRT移植

4.1.1 静态编译进snmpd及lib库

openWRT默认使用的是net-snmp-5.4.4版本,其中的Makefile在feeds/packages/net/net-snmp/Makefile。如需添加自己的私有MIB,先重这里的Makefile修改开始。
同样从MODULE-IDENTITY 前面的字符串参数描述开始,为模块ID。一切都是从这个关联开始。
打开Makefile,添加模块信息:如下
SNMP_MIB_MODULES_EXCLUDED =
ApMgnt

SNMP_MIB_MODULES_INCLUDED =
privatemib/ApMgnt \ //一般为存放在agent/mibgroup目录下,为MIB的实现接口

添加相关的lib库到Makefile中,如下:
CONFIGURE_ARGS +=
–with-libs=“-luci” \ //uci为需要添加的lib文件,为了给私有MIB库实现的ApMgnt所需。

MIB的实现接口C文件的编译,会自动同步修改Makefile在agent/mibgroup/Makefile下,修改如下:
mib_module_list_o=
privatemib/ApMgnt.o

mib_module_list_lo=
privatemib/ApMgnt.lo

mib_module_list_c=
privatemib/ApMgnt.c

这样可以回到openwrt编译路径进行编译。
make package/feeds/packages/net-snmp/compile V=s

4.1.2 以动态库方式加载SNMP MIB节点的实现

在qca/feeds/packages/net/net-snmp/Makefile中,增加相应的动态库依赖配置。
define Package/libnetsnmp
$(call Package/net-snmp/Default)
SECTION:=libs
CATEGORY:=Libraries
DEPENDS:=+libuci +libsnmpapi
TITLE:=Open source SNMP implementation (libraries)
endef

define Package/snmpd
$(call Package/net-snmp/Default)
DEPENDS:=+libnetsnmp +libuci +libsnmpapi
TITLE:=Open source SNMP implementation (daemon)
endef

CONFIGURE_ARGS +=
–with-libs=“-luci -lsnmpapi”
以上配置将snmpapi的接口库依赖添加到snmp中,以此来调用snmpapi中的实现函数。
注:另可能存在snmpapi库在打包ipk过程中无法自动识别查找到已经安装的snmpapi库。需要手动指定snmpapi库来安装到snmp下。
cp $(PKG_BUILD_DIR)/…/snmplib/libsnmpapi.so $(1)/usr/lib
将以上添加到Makefile中。

4.1.3配置文件

当成功运行snmpd(调试下:snmpd -Lo -d -f)时,可能存在无法set操作,返回No Access。那是没有开放写权限,需要在/etc/config/snmpd配置文件下配置写权限。配置参数如下:

config agent
        option agentaddress UDP:161

config com2sec public
        option secname rw
        option source default
        option community public

config com2sec private
        option secname rw
        option source localhost
        option community private

config group public_v1
        option group public
        option version v1
        option secname rw

config group public_v2c
        option group public
        option version v2c
        option secname rw

config group public_usm
        option group public
        option version usm
        option secname rw

config group private_v1
        option group private
        option version v1
        option secname rw

config group private_v2c
        option group private
        option version v2c
        option secname rw

config group private_usm
        option group private
        option version usm
        option secname rw

config view all
        option viewname all
        option type included
        option oid .1

config access public_access
        option group public
        option context none
        option version any
        option level noauth
        option prefix exact
        option read all
        option write all
        option notify none

4.2Linux下添加自有MIB编译

4.2.1静态编译到snmpd

1.首先拿到一个标准的SNMP MIB文件,使用mib2c生成MIB相对应的C文件,具体方式很多,下面先描述一种实现。
#mib2c -c mib2c.old-api.conf XXX-MIB:ApMgnt
将生成ApMgnt.h及ApMgnt.c文件在当前目录下;将这两个文件拷贝到agnet/miggroup/apmib/目录下。
2.重新配置configure进行编译:
./configure --with-mib-modules=“apmib/ApMgnt”
其他的配置参数同Linux下其他编译的参数选择。
3.编译源码:make;此时使用mib2c生成的代码还未修改实现,肯定会编译出错。这里需要根据MIB的需求来实现C文件函数功能,及补全代码。当编译完成后,跟第一章节描述的一样运行调试。

4.2.2 动态库编译

1.编译net-snmp源码,注意动态加载不能配置–disable-shared。

#./configure --prefix=/usr/local/snmp --disable-embedded-perl  --without-perl-modules --disable-applications --disable-scripts
#make & make install

2.编译4.1.1中的源码MIB生成编辑文件,编写Makefile

chenchao@ubuntu-snmp:~/snmplib$ cat Makefile
CC=gcc
FLAGS=-I. `net-snmp-config --cflags` -g
DLFLAGS=-shared -fPIC -g

aoboAcMgmt.so: aoboAcMgmt.c
        $(CC) $(CFLAGS) $(DLFLAGS) -c ApMgmt.c Accfg.c
        $(CC) $(CFLAGS) $(DLFLAGS) -o libApMgmt.so ApMgmt.o Accfg.o

.PHONY : clean
clean :
        rm -f *.so *.o
  
 #make
 #cp libApMgmt.so /usr/local/snmp/lib/      

3.配置snmpd.conf,并运行snmpd

chenchao@ubuntu-snmp:~/snmplib$ cat /usr/local/snmp/share/snmp/snmpd.conf

//在最后增加私有MIB的配置及对应动态库的加载。
dlmod ApMgmt /usr/local/snmp/lib/libApMgmt.so

运行snmpd,以调试方式运行,可以查看打印信息。
#sudo /usr/local/snmp/sbin/snmpd -f -Lo -d -c /usr/local/snmp/share/snmp/snmpd.conf

4.客户端调试私有MIB的实现情况

4.2.3 嵌入式configure配置

嵌入式编译移植,configure配置示例:

./configure --host=arm-linux-gnueabi --build=i686-linux --with-cc=arm-linux-gnueabi-gcc --with-ar=arm-linux-gnueabi-ar --prefix=/usr/local/net-snmp --with-endianness=little --disable-shared --enable-mini-agent --disable-manuals --disable-ucd-snmp-compatibility --enable-as-needed --disable-embedded-perl --without-perl-modules --disable-applications --disable-scripts --disable-ipv6 --sysconfdir="/etc/snmp” --with-ldflags=-L/usr/local/arm-linux-gnueabi/libc/usr/lib --with-libs="-lsqlite3 -llua -lm" --disable-mib-loading --with-transports=UDP --disable-mibs --with-openssl=/usr/local/openssl --with-mib-modules="xxx,xxx"

xxx为自己添加的私有MIB。

4.2.4 Linux下的配置如第一节描述。

5. 模板生成文件及实现

6.调试SNMP

6.1 SNMP报文传输格式

SNMP使用BER(Basic Encoding Rule)传输编码,对信息的编码主要解决以下问题:
1.内容的定位,内容的起始和结束标记;
2.内容的解释,解释内容的具体含义。
BER通过TLV(Type,Length,Value)的三元组实现了上述要求。T、L均为一个字节表示。
在这里插入图片描述
在Object对象标识符(OID)后面即为TLV数据。具体的Type定义如下:
在这里插入图片描述
上下文类型主要为SNMP中的PDU的data的命令请求。通过对报文的简单分析,便于调试中网络抓包分析传输数据。

7 MIB Browser

7.1 iReasoning MIB Browser

1.下载安装,下载MIB Browser Free Personal Edition。免费
https://www.ireasoning.com/download.shtml
2. 下载后在windows下安装完成。
3. 运行iReasoning MIB Browser配置参数,SNMP服务器IP,及高级配置,读写团体名,及SNMP版本。
在这里插入图片描述
4. 在OID中输入对应的SNMP MIB节点,荣国walk,get,set等指令进行操作。
5. MIB文件导入,直接将MIB文件导入即可。示例导入华为的L2IF.mib文件。在左边MIB树展开即可。
在这里插入图片描述

7.2 MG-SOFT MIB Browser

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答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工具集,并应用于实际的网络管理和监控中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值