`
sfeve
  • 浏览: 42420 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

snmp++开发包小例子

    博客分类:
  • C++
阅读更多

在一篇论文上看到了snmp++开发包使用的一个小例子,拿来调试一下。main函数主要代码如下:

#define SYSDESCR      "1.3.6.1.2.1.1.1.0"        //ObjectID for system descriptor 
#define SYSOBJECTID   "1.3.6.1.2.1.1.2.0"        //ObjectID for system object ID 
#define SYSCONTACT    "1.3.6.1.2.1.1.4.0"        //ObjectID for system contact 

int main() {
    int status; 
	Vb vb[3]; 
	Pdu pdu; 
	vb[0].set_oid(SYSDESCR); 
	vb[1].set_oid(SYSOBJECTID); 
	vb[2].set_oid(SYSCONTACT); 
	pdu.set_vblist(vb,3); 
	CTarget ctarget((IpAddress) "192.168.0.1");  //被管代理的ip
	Snmp snmp(status); 
	if((status=snmp.get(pdu, ctarget))!=SNMP_CLASS_SUCCESS) 
		cout<<snmp.error_msg(status); 
	else { 
		pdu.get_vblist(vb,3); 
		for(int i=0;i<3;i++) 
			cout<<vb[i].get_printable_value()<<endl;
	} 

	return 0;
}

 

 加入所需的头文件"snmp_pp.h"后,compile通过,build失败,报类似如下错误:

 

error LNK2001: unresolved external symbol "public: char const * __thiscall Vb::get_printable_value(void)const " (?get_printable_value@Vb@@QBEPBDXZ)

。。。。

 fatal error LNK1120: 33 unresolved externals

 

 

查资料,原来没有引入所需库文件,引入类库:snmp_pp.lib 动态链接库:snmp_pp.dll,再rebuild,成功。

运行后没有得到正确的输出,错误输出如下:

 

20100928.17:39:51: 3464: (4)DEBUG  : SNMPMessage: return value for build message: (0)
SNMP++: Transport operation failed

 

继续查资料,发现原因是由于snmp++开发包利用windows socket通信。这里自然应该先引入相关头文件和类库,再加载套接字库。最终代码如下:

#include <iostream>
#include <winsock2.h>
#include "snmp_pp.h"

using namespace std;

#define SYSDESCR      "1.3.6.1.2.1.1.1.0"        //ObjectID for system descriptor 
#define SYSOBJECTID   "1.3.6.1.2.1.1.2.0"        //ObjectID for system object ID 
#define SYSCONTACT    "1.3.6.1.2.1.1.4.0"        //ObjectID for system contact 

#pragma comment(lib, "snmp_pp.lib")
#pragma comment(lib, "ws2_32.lib")

int main() {
	//加载套接字库
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;

	wVersionRequested = MAKEWORD(1, 1);

	err = WSAStartup(wVersionRequested, &wsaData);
	if(err != 0) {
		return 1;
	}

	if(LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1) {
		WSACleanup();
		return 1;
	}
	//加载结束

    int status; 
	Vb vb[3]; 
	Pdu pdu; 
	vb[0].set_oid(SYSDESCR); 
	vb[1].set_oid(SYSOBJECTID);
	vb[2].set_oid(SYSCONTACT); 
	pdu.set_vblist(vb,3); 
	CTarget ctarget((IpAddress)"10.150.0.84"); 
	Snmp snmp(status); 

	if((status=snmp.get(pdu, ctarget))!=SNMP_CLASS_SUCCESS) 
		cout<<snmp.error_msg(status)<<endl; 
	else { 
		pdu.get_vblist(vb,3); 
		for(int i=0;i<3;i++) 
			cout<<vb[i].get_printable_value()<<endl;
	} 

	return 0;
}

 

运行结果如下:

 

20100928.17:44:26: 3956: (4)DEBUG  : SNMPMessage: return value for build message: (0)
Hardware: x86 Family 6 Model 15 Stepping 6 AT/AT COMPATIBLE -Software: Windows
2000 Version 5.1 (Build 2600 Multiprocessor Free)
1.3.6.1.4.1.311.1.1.3.1.1

 

OK,搞定。

 

分享到:
评论

相关推荐

    snmp++开发资源包

    snmp++的资源包,有编译好的例子,有doc文档资料,适合snmp管理软件极其相关技术的学习.

    snmp++开发包详解

    这是篇描述SNMP++的文档。面向对象的SNMP++是一套专注于网络管理的开放技术,是SNMP协议原理和C++结合的产物。该文档描述了各种各样可移植的C++类(Class),正是这些C++类...同时包含的还有这些类的相关的许多例子。

    Visual C++开发基于SNMP的网络管理软件(第2版)

    面向对象的SNMP++是一套专注于网络管理的开放技术,是SNMP协议原理和C++(结合的产物)。该文档描述了各种各样可移植的C++类(Class),正是这些C++类构建了SNMP++。(同时包含的)还有这些类的相关的许多例子。 ...

    snmp agent开发包

    这是一个snmp agent开发包,完全支持snmpv1和snmpv2c(目前暂时不支持Counter64)的 各种操作包括get,getnext,getbulk,set和v1,v2两种Trap。用户编写程序时不需考虑协议 细节,程序框架由mib编译器自动生成,使用...

    snmpppv3.2.9a.rar_SNMP_linux snmpnext

    snmp++ 是一个第三方的网管开发包 支持C++编程 有例子

    agent++3.5.29

    最新版的agent++开发包,我在linux下编译成功,里面有一些可以使用的例子,编译完后,把lib下的库考到/usr/lib的目录下即可,需要snmp++编译后的库

    JAVA上百实例源码以及开源项目源代码

    Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来...

    TCP-IP详解卷2

    1.9.6 UDP输出小结 14 1.10 输入处理 15 1.10.1 以太网输入 15 1.10.2 IP输入 15 1.10.3 UDP输入 16 1.10.4 进程输入 17 1.11 网络实现概述(续) 17 1.12 中断级别与并发 18 1.13 源代码组织 20 1.14 测试网络 21 ...

    Python在Unix和Linux系统管理中的应用

    《Python在Unix和Linux系统管理中的应用(影印版)》的每一章都会提出一个特定的管理问题,例如并发或数据备份,然后通过实际的例子提供基于Python的解决方案。你将学习使用Python开发一套属于自己的命令行工具,并...

    使用Log4j进行日志操作

    在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外,Apache为我们提供了一个强有力的日志操作包-Log4j。 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的...

    JAVA上百实例源码以及开源项目

    此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这...

    QPS接口耗时统计log_monitor.zip

    Cacti 在英文中的意思是仙人掌的意思,Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。它通过snmpget来... 基于springboot jeesuite-libs的统一监控平台jeesuite362 ...

Global site tag (gtag.js) - Google Analytics