您的位置:首页 > 其它

SNMP++ 工程创建与使用

2016-12-10 23:19 169 查看
一、工程准备

1.1首先去网上下载SNMP++的公共库   snmp_pp,博主使用的是V3.2.25,http://www.agentpp.com/这是SNMP++的官网,另外需要下载libdes-l-4.01a。

二、静态库编译

2.1 编译生成libdes.lib

2.1.1打开编译器,博主使用的是VS2013,新建一个win32项目,选择静态库,不使用编译头。

2.1.2把下载好的libdes的头文件全部包含进去,如图



2.1.3 生成解决方案,在DEBUG目录下会生成一个libdes.lib。



2.2 编译生成SNMP++.lib

2.2.1步骤同上,把下载好的头文件包含进去,生成SNMP++.lib。

三、下面可以写测试用例

3.1 建立工程,选择WIN32控制台exe

3.2 工程设置,静态调用,用编译好跟下载的动态库SNMP++.lib;libdes.lib;WS2_32.lib;libeay32.lib;ssleay32.lib



3.3包含下载好的snmp_pp头文件

#include <snmp_pp/snmp_pp.h>

#include "snmp_pp/target.h"

3.4 下面可以编写测试用例了

#define SYSDESCR "1.3.6.1.2.1.1.1.0" // Object ID for System Descriptor 

#define SYSMEM  "1.3.6.1.2.1.25.2.2.0"  //系统内存大小

#define SYS_USER_CPU_USE   "1.3.6.1.4.1.2021.11.11.0"

这是MIB public的几个OID,用VB对象绑定,发送到指定IP在get_vb可以获取值。

#include <iostream>

void  Walk()

{

 Snmp::socket_startup();

 int status;//return status 

 CTarget ctarget((IpAddress)"172.16.10.224");

 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 
 FILE  *  pf = fopen("log.txt", "wb");

 if (pf == nullptr)

  return;

 std::string strItem;

 while (status == SNMP_CLASS_SUCCESS)

 {

  if ((status = snmp.get_next(pdu, ctarget)) == SNMP_CLASS_SUCCESS) {

   pdu.get_vb(vb, 0);

   cout << "Mib Object = " << vb.get_printable_oid() <<"\n";

   cout << "Mib value = "  << vb.get_printable_value() << "\n";

   strItem = vb.get_printable_oid();

   strItem += " : ";

   strItem += vb.get_printable_value();

   strItem += "\r\n";

   fwrite(strItem.c_str(), strItem.size(), 1, pf);

   pdu.set_vb(vb, 0);    // use last vb as the next one

  }

  else

   cout << "SNMP++ Error = " << snmp.error_msg(status);
 // Sleep(1000);

 }
 fclose(pf);
 //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();

 //}
}

int _tmain(int argc, _TCHAR* argv[])

{

 char szSql[100];

 sprintf_s(szSql, 100, "UPDATE %%s SET ");

  //CTarget ctarget((IpAddress)"192.168.1.111");

 Walk();

 system("pause");

 return 0;

}

四、服务开启
4.1 需要开启snmp服务才能支持以上测试用例
4.2 博主用的是WIN10的操作系统,打开控制面板,选择程序和功能,启用或关闭Windows功能,选择SNMP协议,点击确定。



4.3 右键计算机,点击管理,看到SNMP Service ,开启服务,右键属性,点击安全,添加社区名称 public





五、运行测试



可能会有纰漏,第一次写技术博客,如果不行的话可以留下问题,只要我看到就会立即回答

最后希望大家能关注支持一下^^谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: