SNMP功能开发简介 一 net-snmp编译与安装

部门产品还没有snmp功能,应客户需求,最近开始开发snmp功能。snmp即简单网络管理协议,管理很简单,但实际开发还是有点工作量,协议有三个版本,分为1,2c,3。相关的RFC文档也比较多,从零开始开发难度还是比较大,和技术经理讨论了下,可以基于现有方案做二次开发,移植。产品平台基于openwrt,armlinux。上层业务是用Golang开发,在github上看了下,现有的Go 版本的snmp实现还不是很全面,大部分gosnmp仅仅实现了nms(网络管理工作站)功能,对于snmp agent代理功能还没有很好的方案。现有的比较完善的方案是net-snmp,这是一个开源的snmp实现方案,基于c语言,功能比较全,支持三个版本的snmp以及v4/v6等,此外兄弟部门的产品也是基于net-snmp开发,可以参考一下,所以就定了方案,移植net-snmp。具体包括使用cgo方式调用netsnmp的c库,添加私有mib等。

在开发之前,需要先熟悉一下net-snmp的编译,运行等。

下面是在ubuntu上安装net-snmp的方式

//创建目录
cd ~
mkdir -p netsnmp  && cd netsnmp

//下载net-snmp源代码
wget https://sourceforge.net/projects/net-snmp/files/net-snmp/5.7.3/net-snmp-5.7.3.tar.gz

//解压
tar -zxvf net-snmp-5.7.3.tar.gz

//依赖库安装
sudo apt-get install libperl-dev

//配置,输入enter选择默认配置
 ./configure --with-default-snmp-version="2" --with-sys-contact="mason" --with-sys-location="shenzhen" 
--with-logfile="/var/log/snmpd.log" --with-persistent-directory="/var/net-snmp"

//编译
make

//安装
sudo make install

//设置动态库路径
cd ~ 
echo export LD_LIBRARY_PATH=/usr/local/lib >> .bashrc
source .bashrc

//测试
snmpget --version

如果出现  libnetsnmp.so.30: cannot open shared object file: No such file or directory,source ~/.bashrc就可以了

这个时候,测试snmpd,在启动snmpd之前需要设置好配置文件,可以简单的把安装包里面的EXAMPLE.conf复制到/usr/local/share/snmp/snmpd.conf目录下,修改下监听端口。

启动snmpd

//-Le选项是打印程序启动的错误
sudo snmpd -f -Le &

可能遇到的问题是程序没有启动,自动退出,这时候看下打印或者看/var/log/snmpd.log日志文件。

另一个常见的错误是:

snmpd: error while loading shared libraries: libnetsnmpagent.so.30: cannot open shared object file: No such file or directory

这种情况需要确认下/usr/local/lib目录下是不是真的没有该文件,如果没有的话,就去编译目录找到相关文件手动复制过来。

如果存在该文件的话,可能是路径不对,可以手动将/usr/local/lib添加到 /etc/ld.so.conf文件中,然后sudo ldconf

如果存在Error opening specified endpoint "udp:0.0.0.0:161"错误的话,有可能是配置文件问题,也有可能端口已经被占用。

当运行成功后,可以在windows上安装mib browser来测试一下

mib-browser 下载 :https://www.softpedia.com/get/Internet/Other-Internet-Related/ManageEngine-MibBrowser-Free-Tool.shtml

安装的时候记得不要安装在系统盘,以免出现mib无法加载错误。

安装完成后打开mibbrowser,设置目的地址为虚拟机ubuntu地址查询即可:

以上就是net-snmp在ubuntu上编译、安装与测试的基本步骤。

但是对于我们的方案来说,这只是第一步,毕竟实际的运行是在arm板子上的,需要交叉编译,此外还有添加私有mib等等。这些内容日后在详细讨论。

猜你喜欢

转载自blog.csdn.net/fuyuande/article/details/82720909