简单网络管理协议(SNMP),SNMP++第三方API配置
最近在对简单网络管理协议(SNMP)进行学习,主要任务目标是获取到指定进程的CPU使用率与内存占用率。
首先通过互联网资源熟悉SNMP的基本原来与功能,再此不重点讨论。在对资料的学习当中,发现了基于C++的SNMP++第三方API,通过SNMP++可以获取到诸如进程名称,地址,CPU使用与内存占用的原始数据。
首先需要进行的是在Windows 7操作系统下基于VS2013对SNMP++进行环境配置。
在此重点参考了以下几篇技术博客:
http://blog.****.net/lusvan/article/details/45015021 //主要参考
http://blog.****.net/zzj806683450/article/details/39054059
http://blog.****.net/systomnet/article/details/25330437
http://blog.****.net/systomnet/article/details/25335065
http://blog.****.net/lusvan/article/details/45015021转载原文如下:
现在agent++ 网站上的SNMP版本是3.3.4,但是根据网上所有的教程来操作,包括为数不多的一本书:《visual c++开发基于SNMP的网络管理软件》,也不能实现编译成静态链接库文件,经过一天的摸索(包内文档的readme很重要),终于完成了编译,我觉得最主要的问题还是要了解VS的编译环境,缺什么就加什么。
篇幅较长,觉得啰嗦照图操作
首先下载三个文件解压完成并复制到同一文件夹SNMP++下
其实不需要像其他教程一样各种复制添加,我也那样试过,是可以的,但是其他教程说那个VS2013之类的没用到,觉得没什么用,刚开始我也这样觉得,觉得就是.h,.cpp管用,但是我研究后发现,vs2013下的4个文件夹就是4个VS的工程文件夹,这4个工程文件夹直接可以生成4个静态链接库,agent++和agentx++是代理开发用的,如果只是开发管理站的完全可以删去,我们只需要生成libdes.lib和SNMP++.lib.
libdes是用来支持SNMPv3的DES数据加密功能,在SNMP++的文件夹下的一个README中有:
实现SNMPv3需要OpenSSL,libdes,libtomcrypt其中之一个,libdes是最简单实施的,所以只需要根据VS2013文件夹下的libdes来直接生成libdes.lib.
这个生成没有问题,直接点击SNMP++/vs2013/libdes/libdes.sln,然后就能生成libdes.lib。
最麻烦的就是生成SNMP++.lib了
1,首先还是点击SNMP++/VS2013/SNMP++/SNMP++.sln,然后生成文件,你会发现各种找不到,原来装放源代码的文件夹SNMP++/SNMP++-3.3.4是有版本号,而工程文件的配置文件中没有版本号,所以得把版本号去掉
2,继续生成
这个libsnmp.h是在SNMP++\vs2013\SNMP++\include下,所以要到项目属性页添加
‘
有几个D盘下的目录是本来就有的,是错误的链接目录,不用管
cpp文件的头文件找不到了,所以继续添加目录
我也纳闷了,头文件在SNMP++\snmp++\include\snmp_pp下,cpp文件在SNMP++\snmp++\src下为什么还是找不到呢,include"snmp_pp/***.h"包含的文件找不到,说明编译器找不到snmp_pp这个文件夹,这个文件夹在SNMP++\snmp++\include下,所以把这个也加到编译目录中去试试。
然后就OK了。
3,继续运行,错误如下
左思右想发现应该吧libdes目录加到检索目录中
然后再运行就OK啦
注1:如果后面出现这种错误
就右键点项目,然后卸载项目,再重新加载,生成,就OK了。
注2:以下的文件是VS2013下的README.win32,用UE打开显示如下,简单点就是说把SNMP++\snmp++\\include/snmp_pp/config_snmp_pp.h删掉,然后把VS2013\SNMP++\include\snmp_pp\config_snmp_pp.h复制过来,防止版本错误。
注3,如果不许要SNMPv3的话可以在config_snmp_pp.h里面修改,把箭头指向的1改为0,这样的话libdes.lib也不用加载,那个文件夹也不用下载了,文档说OpenSSL和libdes任选一个,所以第二个箭头也改为0.但是理论是这样的,我把第一个改了之后又是一堆错误,那就这样吧...
http://blog.****.net/zzj806683450/article/details/39054059 转载原文如下:
1.官网下载
2.编译生成libdes.lib
2.1在vs2010中新建一个win32项目,选择静态库,空项目,不需要编译头
2.2将所有需要的头文件和源文件均加入进来,截图如下:
2.3 生成解决方案,这时会在工程目录下的debug目录下出现一个lib文件,正是我们需要的
3.生成snmplib。
3.1再新建一个同样的win32项目,静态库,空项目,不需要编译头
3.2将解压后的snmp++/src目录下和libdes-l-4.01a下所有的.cpp都加入到源文件当中,同时还要将所有的.h文件加入,可以直接使用项目属性—C/C++--常规—附加包含目录,将头文件的目录加进来
3.3接下来,就生成解决方案,同样也会生成对应的lib库
4.拷贝snmplib.lib,libdes.lib,ws2_32.lib
5.建立测试项目
5.1新建项目,选择win32控制台应用程序TestCip。
5.2导入头文件。
5.3加入lib库。
5.4编写测试程序
- #include <iostream>
- #include "snmp_pp/snmp_pp.h"
- using namespace std;
- #define SYSDESCR "1.3.6.1.2.1.1.1.0" // Object ID for System Descriptor
- void get_system_descriptor(){
- int status;//return status
- CTarget ctarget((IpAddress)"192.168.1.111");
- Vb vb(SYSDESCR);//SNMP++ variable Binding
- Pdu pdu;//SNMP ++ pdu
- //--------[Construct a SNMP++ SNMP Object--------------
- Snmp snmp(status);//create a snmp session
- if (status != SNMP_CLASS_SUCCESS)
- {
- cout << snmp.error_msg(status);//if fail,print error string
- return;
- }
- //---------[Invoke a SNMP++ Get]------------------------
- pdu += vb;//add the variable binding
- if ((status = snmp.get(pdu,ctarget)) != SNMP_CLASS_SUCCESS)
- {
- cout << snmp.error_msg(status);
- }
- else {
- pdu.get_vb(vb,0);//extract the variable binding
- cout << "System Descriptor = " << vb.get_printable_value();
- }
- }
6.运行结果