SNMP++是什么?
SNMP++是HP公司开发的一套用于SNMP编程的C++开源库,提供了简单易用的接口,被广泛使用于网络管理的开发。
snmp++ 于2016年2月29发布了新的版本,针对于C++ API接口的包已经更新到了3.3.7版本。 大家可以从http://www.agentpp.com/网站去下载最新的版本的源文件。
基于snmp++ 3.3.7开发时所需要以下两种类型的文件,然后把这两种类型的文件拷贝至相应的路径下即可。
1、头文件
2、库文件
网上有很多snmp++ 3.2.25版本编译成库文件的文章,但snmp++ 3.3.7版本库的编译,过程稍有不同,特此记录之。
我的系统是Centos 6.7(64位),gcc 版本为系统装好后的默认版本4.4.7。
一、下载文件并解压
1)从http://www.agentpp.com/网站下载libdes-l-4.01a.tar.gz和snmp++-3.3.7.tar.gz;
2)分别解压libdes-l-4.01a.tar.gz和snmp++-3.3.7.tar.gz这两个压缩包,解压之后会分别生成libdes和snmp++-3.3.7的两个文件夹
二、编译生成libdes.a 库文件,并将库文件拷贝至/usr/lib目录
生成libdes.a文件步骤比较简单:
1、进入libdes目录; 2、利用文件夹下现成的Makefile编译生成libdes.a文件; 3、将libdes.a文件拷贝至/usr/lib目录下即可。
cd libdes
make -f Makefile
cp libdes.a /usr/lib
三、编译生成snmp++相关库文件,并将库文件拷贝至/usr/lib目录
snmp++ 3.3.7库文件的生成和snmp++ 3.2.25版本库文件的生成有很大不同,snmp++ 3.2.25版本在src目录下就有对应linux环境的Makefile.linux的makefile文件,直接make就可以生成对应的库文件了。snmp++ 3.3.7不一样,需要利用其提供的./configure 文件去生成makefile文件。 生成snmp++文件步骤:
1、进入snmp++-3.3.7目录;
2、利用目录下提供的configure脚步在src目录下生成makefile文件;
3、进入src目录下,利用./configure生成的makefile文件make编译生成lib库文件;
4、进入隐藏目录.libs下将lib文件拷贝至/usr/lib。
cd snmp++-3.3.7
./configure
cd src
make
cd .libs/
cp lib* /usr/lib
四、拷贝头文件至/usr/include
cd snmp++-3.3.7
cp libsnmp.h /usr/include/
cd include
cp -r snmp_pp /usr/include
ldconfig
五、测试
snmp++-3.3.7.tar.gz解压后专门有一个consoleExample的目录,可以利用下面的cpp文件进行测试,比如我就用下面的snmpGet.cpp 文件进行测试
cd consoleExamples/
g++ snmpGet.cpp -o snmpget-lsnmp++ -ldes //编译的时候把我们上面生成的库文件加上,否则报错。
如果你的系统环境和我的一样,centos6.7的版本,gcc 版本4.47,上面命令执行完时,还是报错。主要原因两点:
1、snmpGet.cpp在预处理时,试图导入iostream.h的古老文件。
iostream.h是98年标准化以前的文件,太旧了。现在都是用的iostream的文件,将# include
解决方法:
step1: 在 /usr/include/libsnmp.h的220行, 将# include
step2: 在我们所用到的测试文件snmpGet.cpp 中,添加该代码,using namespace std;
2、未include相关头文件
解决办法,直接在/usr/include/libsnmp.h 添加以下代码就行。
#include
#include
六、再次测试
再次执行
g++ snmpGet.cpp -o snmpget -lsnmp++ -ldes
./snmpget --help
如果输出帮助提示,说明SNMP++ 的环境就搭建好了。
再找个设备,配上IP和read community string,在真实测试以下。
[root@localhost consoleExamples]# ./snmpget 192.168.2.80 -v2 -Cpublic 1.3.6.1.2.1.1.1.0
20161007.13:03:39: 139844037580768: (6)INFO : AuthPriv: Added auth protocol (id): (3)
20161007.13:03:39: 139844037580768: (6)INFO : AuthPriv: Added auth protocol (id): (4)
20161007.13:03:39: 139844037580768: (6)INFO : AuthPriv: Added auth protocol (id): (5)
20161007.13:03:39: 139844037580768: (6)INFO : AuthPriv: Added auth protocol (id): (6)
20161007.13:03:39: 139844037580768: (6)INFO : AuthPriv: Added auth protocol (id): (7)
20161007.13:03:39: 139844037580768: (6)INFO : AuthPriv: Added auth protocol (id): (2)
20161007.13:03:39: 139844037580768: (6)INFO : AuthPriv: Added priv protocol (id): (2)
20161007.13:03:39: 139844037580768: (6)INFO : AuthPriv: Added priv protocol (id): (4)
20161007.13:03:39: 139844037580768: (6)INFO : AuthPriv: Added priv protocol (id): (20)
20161007.13:03:39: 139844037580768: (6)INFO : AuthPriv: Added priv protocol (id): (21)
20161007.13:03:39: 139844037580768: (3)INFO : AuthPriv: Added default Auth and Priv protocols.
SNMP++ Get to 192.168.2.80 SNMPV2 Retries=1 Timeout=1000ms Community=public
20161007.13:03:39: 139844037580768: (4)DEBUG : SNMPMessage: return value for build message: (0)
**************************
VB nr: 0
Oid = 1.3.6.1.2.1.1.1.0
Value = Cisco IOS Software, C3550 Software (C3550-IPSERVICESK9-M), Version 12.2(50)SE3, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2009 by Cisco Systems, Inc.
Compiled Wed 22-Jul-09 07:25 by prod_rel_team
Syntax = 4
ok,如果能看到以上类似的信息输出,恭喜,环境搭建成功。
另外上面有很多的log和其他的没必要的信息输出,你就需要在相关源文件把它去掉或注释掉,重新编译就ok了。