简单网络管理协议(SNMP),SNMP++第三方API配置

最近在对简单网络管理协议(SNMP)进行学习,主要任务目标是获取到指定进程的CPU使用率与内存占用率。

首先通过互联网资源熟悉SNMP的基本原来与功能,再此不重点讨论。在对资料的学习当中,发现了基于C++的SNMP++第三方API,通过SNMP++可以获取到诸如进程名称,地址,CPU使用与内存占用的原始数据。

首先需要进行的是在Windows 7操作系统下基于VS2013对SNMP++进行环境配置。

在此重点参考了以下几篇技术博客:

http://blog.csdn.net/lusvan/article/details/45015021 //主要参考
        http://blog.csdn.net/zzj806683450/article/details/39054059
http://blog.csdn.net/systomnet/article/details/25330437
http://blog.csdn.net/systomnet/article/details/25335065

http://blog.csdn.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.csdn.net/zzj806683450/article/details/39054059 转载原文如下:

1.官网下载

snmp开发,首先需要机器已经安装了snmp服务,这方面的资料网上比较完备,安装的时候注意每少一个文件,网上都可以下载到,这样可以自己形成一个包,供以后使用。只要最后snmp的服务开启就可以使用snmp服务了(刚开始trap服务可能是未开启的)
snmp++官网http://www.agentpp.com/,选择自己需要的开发包,我这里下载了snmp++v3.2.25.tar.gz,如果需要支持v3版本的数据传送功能,还需要下载libdes-l-4.01a。准备工作做完之后,我们的目的就是要生成需要的两个lib库文件。

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

将生成的两个lib文件及下载的ws2_32.lib都拷贝到vs2010安装目录的lib文件夹下,方面后续snmp开发

5.建立测试项目

   5.1新建项目,选择win32控制台应用程序TestCip。

   5.2导入头文件。

因为要用到snmp,所以还需要将snmp所需要的头文件加入到附加包含目录中,方便起见,可以将libdes的几个头文件均拷贝到snmp++的include目录下,而include下的snmp_pp文件夹是snmp单独的头文件,这样就只需引入一次头文件就可以了。


5.3加入lib库。

在项目属性中,链接器/输入中加入这样几项内容

5.4编写测试程序

[cpp]  view plain  copy
 print ?
  1. #include <iostream>  
  2. #include "snmp_pp/snmp_pp.h"  
  3.   
  4. using namespace std;  
  5.   
  6. #define SYSDESCR "1.3.6.1.2.1.1.1.0" // Object ID for System Descriptor  
  7.   
  8.   
  9. void get_system_descriptor(){  
  10.       
  11.     int status;//return status  
  12.     CTarget ctarget((IpAddress)"192.168.1.111");  
  13.     Vb vb(SYSDESCR);//SNMP++ variable Binding  
  14.     Pdu pdu;//SNMP ++ pdu  
  15.     //--------[Construct a SNMP++ SNMP Object--------------  
  16.     Snmp snmp(status);//create a snmp  session  
  17.     if (status != SNMP_CLASS_SUCCESS)  
  18.     {  
  19.         cout << snmp.error_msg(status);//if fail,print error string  
  20.         return;  
  21.     }  
  22.     //---------[Invoke a SNMP++ Get]------------------------  
  23.     pdu += vb;//add the variable binding  
  24.     if ((status = snmp.get(pdu,ctarget)) != SNMP_CLASS_SUCCESS)  
  25.     {  
  26.         cout << snmp.error_msg(status);  
  27.     }  
  28.     else {  
  29.         pdu.get_vb(vb,0);//extract the variable binding  
  30.         cout << "System Descriptor = " << vb.get_printable_value();  
  31.     }  
  32.       
  33. }  
main函数,这里就不写了,直接调用这个函数就OK

6.运行结果





  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值