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
五、运行测试
可能会有纰漏,第一次写技术博客,如果不行的话可以留下问题,只要我看到就会立即回答
最后希望大家能关注支持一下^^谢谢
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
五、运行测试
可能会有纰漏,第一次写技术博客,如果不行的话可以留下问题,只要我看到就会立即回答
最后希望大家能关注支持一下^^谢谢
相关文章推荐
- 新建一个win32空工程,然后使用MFC创建程序
- 使用XDC工具创建基于Codec Engine的dm6446双核工程
- 继续ANDROID学习第二步,不使用Eclipse创建JAVA工程
- 如何使用eclipse创建Maven版本的hsf工程及其子模块
- 初次使用Cmake——以OsgEarth工程创建为例
- ADT14以上创建工程使用NDK开发openGL es要注意事项!
- 使用三星smart tv sdk创建hello world工程
- 创建和使用Android library工程
- 使用Zend Framework的zf.bat创建工程【创建zf框架】
- CakePHP使用命令行创建工程
- 创建和使用Android library工程
- 使用XDC工具创建基于Codec Engine的dm6446双核工程
- 使用三星smart tv sdk创建hello world工程
- 使用VistualDDk 创建驱动工程
- 关于VC60中创建MFC工程时, 使用了UNICODE选项后编译报错的解决方法
- Android开发中使用Eclipse创建工程后提示The project cannot be built until build path errors are resolved问题的解决方法
- 使用vs2010创建MFC工程后,vs2010的bug,不知道你们有没有
- 使用maven创建基于spring的模块|工程|bundle
- 使用eclipse创建Tomcat工程
- 创建和使用Android library工程共享资源文件