实验六 SNMP管理器编程
实验五SNMP管理器编程
一、实验目的
掌握应用SNMP++软件包开发SNMP管理程序的基本方法。二、实验内容
编写一个简单的SNMP Manager 程序,能够查询指定设备和对象信息。
三、实验环境
SNMP++ v3.2.25软件包、VC++6.0开发工具。
四、实验步骤
1、编译SNMP++软件包
1)下载SNMP++v3.2.25.tar.gz并解压到D盘根目录下,同时修改
文件D:\snmp++\include\snmp_pp\config_snmp_pp.h,在其中添加下面代码用来去除SNMPv3(如果不添加该行,那么需要添加des库来实现SNMPv3的安全功能):
#define _NO_SNMPv3 //去掉SNMPv3。
2)按照教材91页7.2.2小节的步骤完成编译工作
注意:为工程添加的源文件是指D:\snmp++\src下的所有*.cpp文件,头文件是指D:\snmp++\include\snmp_pp下的所有*.h文件。
2、编写一个简单的SNMP Manager。
1)首先建立VC++6.0控制台工程ManagerTest
在Project →Settings→Link →Object /library modules中添加
ws2_32.lib 、snmp _pp.lib,如下图:
2)输入ManagerTest的全部代码,然后执行编译:
#include
#include
using namespace std;
int main(int argc, char* argv[])
{
Vb vb;
Pdu pdu;
int status;
Snmp::socket_startup(); //开启Socket
UdpAddress address((LPCTSTR) "192.168.1.80"); //设置被管设备的IP地址address.set_port(161); //设置端口号
Snmp snmp(status, 0,false); //新建SNMP对象
Oid oid("1.3.6.1.2.1.1.1.0"); //指定被管对象实例标识符
vb.set_oid(oid);
pdu+=vb;
//设置发送对象
CTarget ctarget(address);
ctarget.set_version(version1);
ctarget.set_retry(1);
ctarget.set_timeout(100);
ctarget.set_readcommunity((LPCTSTR)"public");
SnmpTarget *target;
target = &ctarget;
//发送PDU并获取结果
status = snmp.get(pdu,*target);
if(status == SNMP_CLASS_SUCCESS)
{
//输出结果
pdu.get_vb(vb,0);
cout< } Snmp::socket_cleanup(); } 3)运行ManagerTest查看运行结果,正常情况应如下图所示。 如果未能得到类似的结果,应检查被管设备是否运行SNMP协议和相关的服务、端口是否正确、共同体名是否相符等情况,将原 因详细记录。 4)修改程序,查询设备(172.21.85.254)的ipInReceives对象的 信息。 5)修改程序,查询设备(172.21.85.254)的ipRouteTable中目的 网络为210.38.176.0的ipRouteNextHop对象的信息。 6)尝试完善程序,使得能根据输入的IP、对象OID、端口等进 行信息查询,例如: ManagerTest 172.21.85.254 1.3.6.1.2.1.1.1.0 161 五、实验报告 提交程序运行的结果、修改后的程序代码和运行结果、实验过程中遇到的问题及解决的办法。