六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 57|回复: 0

snmp++开发包小例子

[复制链接]

升级  11.33%

15

主题

15

主题

15

主题

秀才

Rank: 2

积分
67
 楼主| 发表于 2013-2-7 03:47:32 | 显示全部楼层 |阅读模式
在一篇论文上看到了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");  //被管代理的ipSnmp 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: Windows2000 Version 5.1 (Build 2600 Multiprocessor Free)1.3.6.1.4.1.311.1.1.3.1.1 
OK,搞定。
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表