SNMP++ 00-开发准备篇

阅读完本文你可以学到:

(1)在 Windows 平台下如何搭建与 SNMP 代理进行通信的开发环境(支持 SNMP V3),并给出测试程序。


一、搭建与 SNMP 代理进行通信的开发环境(支持 SNMP V3)(在 VS2013 下演示)

1. 下载 SNMP++ 和 LIBDES

SNMP++官方下载地址:http://www.agentpp.com/download.html#AGENTPP,如图1-1:

SNMP++ 00-开发准备篇_第1张图片

图1-1

请注意:

我一开始使用的是 SNMP++3.3.7,但编译后出现有些文件打不开,其中路径不对的问题可以 easy 解决,但有些文件根本就不存在哭后来改用 snmp++v3.2.25(下载地址:http://download.csdn.net/detail/wohenfanjian/9507541),最后测试成功。下面详细记录从无到测试成功的每一个过程。

重申一遍,以下所有内容使用的是 snmp++v3.2.25.tar.gz 及 libdes-l-4.01a.tar.gz,以下内容一定不适用于 SNMP++3.3.7.tar.gz,至于 libdes的的其他版本是否适用尚未验证也就是说,如果你使用的不是 snmp++v3.2.25.tar.gz 及 libdes-l-4.01a.tar.gz,我并不能保证阅读完本文可使你获得正确的测试结果。

2. 生成 snmp++lib 静态 lib 文件(注:snmp++lib  为你要生成的 lib 的文件名,可自拟)

(1)新建一个“Win32”项目,如图2-1:

SNMP++ 00-开发准备篇_第2张图片

图2-1

(2)只选择“静态库”,其余的都不选,如图2-2:(虽然看到有些博客说加上“预编译头”最后也可以成功,但是本人强烈建议“尽最大可能降低你所生成库的依赖项”)

SNMP++ 00-开发准备篇_第3张图片

图2-2


(3)解压先前下载好的压缩包  (下载地址:http://download.csdn.net/detail/wohenfanjian/9507541)并分别解压 libdes-l-4.01a.tar.gz 和 snmp++v3.2.25.tar.gz。如图2-3:

SNMP++ 00-开发准备篇_第4张图片

图2-3

(4)将文件夹 libdes-l-4.01 和 snmp++v3.2.25 拷贝到你刚刚建立的 snmp++lib 工程中,如图2-4:

SNMP++ 00-开发准备篇_第5张图片

图2-4

(5)添加源文件。将 snmp++lib\snmp++v3.2.25\snmp++\src 下的所有源文件添加到工程中,并将 snmp++lib\libdes-l-4.01a\libdes 下的所有源文件添加到工程中,如图2-5:

SNMP++ 00-开发准备篇_第6张图片

图2-5

(6)添加头文件。将 snmp++lib\snmp++v3.2.25\snmp++\include\snmp_pp 下的所有头文件添加到工程中,并将 snmp++lib\libdes-l-4.01a\libdes 下的所有头文件添加到工程中。添加方法为:项目->snmp++lib属性页->C/C++->常规->附加包含目录,如图2-6:

SNMP++ 00-开发准备篇_第7张图片

图2-6

(7)生成解决方案,如图2-7:

SNMP++ 00-开发准备篇_第8张图片

图2-7

(8)生成解决方案成功后在该工程中的Debug下找到生成的 snmp++lib.lib 文件,如图2-8:


图2-8

3. 生成 libdeslib 静态 lib 文件(和生成 snmp++lib.lib 的方法一样)。

4. 在 windows 平台下编写第一个与SNMP代理进行通信的控制台程序(使用前面生成的 snmp++lib.lib 和 libdeslib.lib)。

(1)新建一个控制台程序,项目名称为 snmptest

(2)在该工程下新建文件夹 snmp++,用于存放相关头文件及库文件,如图2-9:

SNMP++ 00-开发准备篇_第9张图片

图2-9

在建好 snmp++ 文件夹后,在 snmp++文件夹 下建立 include文件夹,用于存放相关头文件,并建立 lib 文件夹,用于存放 snmp++lib.lib 和 libdeslib.lib。如图2-10:


2-10

include 文件夹中存放 snmp++v3.2.25\snmp++\include\snmp_pp (这是前面解压的 snmp++v3.2.25.tar.gz)中所有的头文件及 libdes-l-4.01a\libdes(这是前面解压的 libdes-l-4.01a.tar.gz)中的所有头文件

lib 文件夹中存放  snmp++lib.lib 和 libdeslib.lib

(3)配置该工程的属性:项目->snmptest属性->链接器->输入。在附加依赖项中添加 ws2_32.lib;snmp++\lib\libdeslib;snmp++\lib\snmp++lib.lib;  。如图2-11:

SNMP++ 00-开发准备篇_第10张图片

图2-11

(4)测试程序为:

// snmptest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include "snmp++\include\snmp_pp.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	Snmp::socket_startup();

	CTarget target(IpAddress("10.116.2.18"), "private-xxq", "private-xxq");
	target.set_version(version1);

	Vb vb("1.3.6.1.2.1.1.1.0");
	Pdu pdu;
	pdu += vb;

	int status;
	Snmp snmp(status);
	if (SNMP_CLASS_SUCCESS != status)
	{
		cout << snmp.error_msg(status) << endl;
		return -1;
	}

	cout << "目的IP:" << target.get_address().get_printable() << " 版本号:" << target.get_version() << endl;
	cout << "read共同体:" << target.get_readcommunity() << "  write共同体:" << target.get_writecommunity() << endl;

	if ( (status = snmp.get(pdu, target)) == SNMP_CLASS_SUCCESS )
	{
		pdu.get_vb(vb, 0);
		cout << "System Descriptor =" << vb.get_printable_value() << endl;
	}
	else
	{
		cout << snmp.error_msg(status) << endl;
		return -1;
	}

	Snmp::socket_cleanup();
	return 0;
}

(5)启动并配置 SNMP代理。

参考我的另一篇博文 http://blog.csdn.net/wohenfanjian/article/details/51265047 。(注意 SNMP代理中共同体的名称必须与测试程序的共同体名称保持一致

(6)在 SNMP代理启动并配置好后,运行测试程序。结果如下:

SNMP++ 00-开发准备篇_第11张图片


本文生成的完整的工程见:http://download.csdn.net/detail/wohenfanjian/9507690。要成功地与本地SNMP代理进行通信,除了该工程外,你还需要对本地 SNMP代理进行配置(可参考本文相关部分)。如果你遇到 SNMP request time out问题,可参考http://blog.csdn.net/wohenfanjian/article/details/51290275。

你可能感兴趣的:(windows,编译,snmp,snmp++)