Visual Studio 2010基于SNMP++开发(1)

来源:互联网 发布:济南图书马克数据加工 编辑:程序博客网 时间:2024/06/03 10:30

Visual Studio 2010基于SNMP++开发(1)

转自

http://blog.sina.com.cn/s/blog_8ce3de3b0100v8h3.html



最近一直在研究利用SNMP++的包,在Visual Studio 2010上进行开发。

说实话挺恶心,好歹现在有点眉目。记录一下吧。

一、SNMP服务的开启。

1.第一步肯定要开启系统的SNMP服务,不然一切都是浮云。

Win7用户就不用多说了,如果是Xp用户,如果没有安装盘,需要下载一个安装包(SnmpForXp)网上有。

安装完成以后,需要进行简单的设置。

控制面板\管理工具\服务

Visual <wbr>Studio <wbr>2010基于SNMP++开发(1)

看见这两项开启即可。

2.双击SNMP Service,打开陷阱,在“团体名称”中新建一个public,然后在“陷阱目标”中加入“127.0.0.1”或者自己的地址,便于测试。

3.打开安全,点上“发送身份验证陷阱”,可以根据需要更改一些权限,还有接受来自哪些主机的SNMP包,都可以自己定义。确定,完成。

4.测试一下,SNMP是否启用。首先要下载一个工具--“Snmputil.exe”,可以放到windows\system32\下,这样可以随时随地使用。开始-运行-cmd。打入:snmputil,回车,可以看到一个简介。

Visual <wbr>Studio <wbr>2010基于SNMP++开发(1)
usage:就是这个软件的用法,agent:代理地址,community:记得刚才新建的“public”吗,oid不明白自己再去看吧。

5.假设我们打命令:snmputil get 192.168.0.102 .1.3.6.1.2.1.1.5.0,回车,如下图

Visual <wbr>Studio <wbr>2010基于SNMP++开发(1)

这里:192.168.0.102,是我在局域网里的地址,".1.3.6.1.2.1.1.5.0"是Oid,注意一定要前面加一个“.“。

到这里就哦了,SNMP服务已经安装上了。

如果,没有开机启动SNMP,也可以手动开启,有一个简单的命令,CMD后,net start snmp

 

二、用Vs2010编译本地的snmp_pp.lib

从官网上下包。详细内容,参见:
http://www.cnblogs.com/VRS_technology/archive/2010/08/13/1799226.html

只有一点不一样,在“目录设置”的时候,Vs2010的方法是在“属性管理器”->Debug|Win32->Microsoft.Cpp

其他都一样,就是细心一点分清楚.h和.cpp以及.c文件就行了。

 

三、创建一个Win32应用控制台程序

1.这里有我的一个编译通过的代码。可以测试一用。注意把IP地址改掉。

#include "stdafx.h"
#include <snmp_pp.h>
#include <iostream>
#define SYSDESCR "1.3.6.1.2.1.1.1.0"
using namespace std;

void get_system_descriptor()
{
 Snmp::socket_startup(); //这个很重要。虽然是SNMP++但是还是不能完全脱离WinAPI。
 int status;
 CTarget ctarget((IpAddress)"192.168.0.1"); //换成你用snmputil行的通的地址。
 Vb vb(SYSDESCR);
 Pdu pdu;

 Snmp snmp(status);
 if( status != SNMP_CLASS_SUCCESS){
  cout<<"status error!"<<snmp.error_msg(status)<<endl;
  return;
 }
 pdu += vb;
 if((status = snmp.get(pdu, ctarget)) != SNMP_CLASS_SUCCESS)
  cout<<"snmp.get error!"<<snmp.error_msg(status)<<endl;
 else{
  pdu.get_vb(vb, 0);
  cout<<"System Oid = "<<vb.get_printable_oid()<<endl;
  cout<<"System Descriptor = "<<vb.get_printable_value()<<endl;
 }
}

int _tmain(int argc, _TCHAR* argv[])
{
 get_system_descriptor();
 getchar();
 return 0;
}
2.但是仅仅是这样还是不够的。我们引入一个SNMP++的库,以及一个snmp_pp.lib都是有用的。

在项目->属性里,进行如下设置。

常规 ==》MFC的使用 ==》 在共享的DLL中使用MFC

C/C++  ==》代码生成  ==》运行库 ==》多线程DLL(/MD)

链接器 ==》输入 ==》 附加依赖项 加入 snmp_pp.lib

注意:网上有的解决办法是采用静态MFC,运行库也不一样,具体大家自己琢磨一下。

3.现在可以编译试试了。

 

四、常见问题

1.各种冲突,神马在神马中已经定义????????!!!

注意看好哪些库冲突,然后在项目==》属性==》链接器==》输入==》忽略特定默认库==》加入就行了。

 

2.各种神马外部符号无法确认?????????!!!!!

  a.看一下,你的头文件中(stdafx.h),可以加入一个 #include <afx.h>。

   b.尝试切换一下,项目==》属性==》C\C++==》代码生成==》运行库,里头几个来回试试。也许能行。

总之,各种问题的产生问题也不同,网上的答案也是千奇百怪,如果我说的不行,大家再试试别的方法。

具体内部原因,因为我也是初学者,自己理解的也不一定对。如果有高人,请留言指点。


原创粉丝点击