SNMP管理器编程Word格式.docx

上传人:b****2 文档编号:14904003 上传时间:2022-10-25 格式:DOCX 页数:15 大小:64.96KB
下载 相关 举报
SNMP管理器编程Word格式.docx_第1页
第1页 / 共15页
SNMP管理器编程Word格式.docx_第2页
第2页 / 共15页
SNMP管理器编程Word格式.docx_第3页
第3页 / 共15页
SNMP管理器编程Word格式.docx_第4页
第4页 / 共15页
SNMP管理器编程Word格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

SNMP管理器编程Word格式.docx

《SNMP管理器编程Word格式.docx》由会员分享,可在线阅读,更多相关《SNMP管理器编程Word格式.docx(15页珍藏版)》请在冰豆网上搜索。

SNMP管理器编程Word格式.docx

网管系统是指课管理真个网络及其中的网络设备的软件系统。

网管系统设计4个方面的内容:

网管功能、资源、信息及结构。

其中,网管功能由ISO网络管理功能域定义:

网管资源的表示涉及资源的表示方法,主要包括网络中硬件,软件与服务等资源;

网管信息的表示方法与传输方式,由网管系统采用的网络管理协议决定;

网管系统的结构主要包括两层结构与三层结构。

SNMP网管系统采用客户机/服务器工作模式。

SNMP网管系统包括两个组成部分:

SNMP客户机与SNMP服务器。

其中,SNMP客户机是SNMP服务的请求者,他安装在网管管理工作站中,通常被称为SNMP管理器:

SNMP服务器是SNMP服务的响应者,它安装在支持SNMP服务的网络设备中,通常被称为SNMP代理。

管理信息保存在SNMP代理的MIB中。

SNMP服务在传输层采用UDP协议,在传输管理信息之前不需要先建立连接。

需要注意的是,SNMP代理主动发送Trap信息给SNMP管理器。

3、基本思路及关键问题的解决方法

1)程序流程图

程序流程图如图1所示:

 

图1程序流程图

2)基本思路

首先,加载SNMP(包括SNMP主版本号、SNMP副版本号、支持的最高操作标准、默认的实体/上下文传输模式以及默认的重发机制);

建立会话,在此过程中得到的会话句柄非常重要;

设置传输模式SnmpSetTranslateMode和重传模式SnmpSetRetransmitMode,这两个函数的参数就是加载SNMP时使用的传输模式以及重发机制;

创建实体HSNMP_ENTITY,第一个参数是步骤2中得到的句柄。

IP可以是发送消息的网络设备的IP地址或接收消息的管理设备的IP地址,通过需要具体创建实体——hSrcEntity、hDestEntity;

对源实体和目的实体设置超时时间和重传次数——SnmpSetTimeout、SnmpSetRetry;

建立上下文句柄——HSNMP_CONTEXT、hContext;

建立变量捆绑列表;

设置PDU格式,要正确发送数据必须采用特定的PDU格式;

发送SNMP命令——SnmpSendMsg;

接收SNMP响应;

等到响应成功就释放资源。

3)关键问题及解决方案

1.如何设置PDU格式

PDU是SNMP数据包的一个部分,它包括请求标识符、错误状态、错误索引以及捆绑的变量名称。

因此设置PDU格式是此程序的关键部分。

HSNMP_PDUhPdu;

hPdu=SnmpCreatePdu(hSession,SNMP_PDU_GETNEXT,0,NULL,NULL,hVbl)

第二个参数是PDU类型,有多种操作方式:

SNMP_PDU_GETNEXT用来在不了解该表时获取第一个组值,SNMP_PDU_GET用来获得某个对象某个对象标识符的值;

SNMP_PDU_SET用来修改某个对象标识符的值。

2.如何接收和响应SNMP

要接收和响应SNMP就先得创建实体,然后SNMP管理器调用函数,接收从SNMP代理返回的SNMP响应,SNMP管理器需要解析SNMP响应数据包,对各个字段逐个进行分析与判断,SNMP管理器需要分析错误类型字段,判断是否成功完成对管理对象的操作。

hSrcEntity=SnmpStrToEntity(hSession,(LPCSTR)GetLocalIP());

hDestEntity=SnmpStrToEntity(hSession,ip);

4、源代码

#include"

winsock2.h"

Winsnmp.h"

#include<

string>

vector>

algorithm>

iostream>

#pragmacomment(lib,"

wsnmp32.lib"

ws2_32.lib"

usingnamespacestd;

typedefvector<

strvec;

strvec>

strvec_vec;

classCManager

{public:

CManager(stringstrIP,stringstrCommunity);

//构造函数

~CManager();

//析构函数

stringValueToString(smiVALUEsValue);

//返回值转换

boolInitSnmp();

//用于加载SNMP

boolSend(conststrvec&

strOIDArray,smiINTsPDUType=SNMP_PDU_GETNEXT);

boolReceive(HSNMP_VBL&

hVbl);

//接收应答包

boolGetAValue(conststring&

strOID,string&

strResult);

//获取ObjectID值

boolGetTable(strvecstrOIDArray,strvec_vec&

strResultTable);

stringGetLocalIP();

//获取本机IP地址

voidErrorMessage(stringstrMessage);

//输出错误信息

voidSetEvent();

protected:

HSNMP_SESSIONm_hSession;

//会话句柄

HSNMP_CONTEXTm_hContext;

//上下文句柄

staticSNMPAPI_STATUSCALLBACKCallback

HSNMP_SESSIONhSession,//WinSNMP会话句柄

HWNDhWnd,//处理通知窗口的句柄

UINTwMsg,//窗口消息通知码

WPARAMwParam,//消息类型

LPARAMlParam,//PDU的请求标识符

LPVOIDlpClientData//可选的自定义数据

);

private:

smiUINT32m_nMajorVersion;

//WinSNMPAPI主版本

smiUINT32m_nMinorVersion;

//WinSNMPAPI副版本

smiUINT32m_nLevel;

//支持最高的操作标准

smiUINT32m_nTranslateMode;

//默认实体/上下文模式

smiUINT32m_nRetransmitMode;

//默认的重发机制

stringm_IP;

//IP地址

smiOCTETSm_Community;

//团体名

HANDLEm_hEvent;

};

//构造函数

CManager:

:

CManager(stringstrIP,stringstrCommunity):

m_nMajorVersion(0),

m_nMinorVersion(0),

m_nLevel(0),

m_nTranslateMode(0),

m_nRetransmitMode(0),

m_IP(strIP)

{m_Community.len=strCommunity.length();

m_Community.ptr=newsmiBYTE[strCommunity.length()];

memcpy(m_Community.ptr,strCommunity.c_str(),strCommunity.length());

m_hEvent=CreateEvent(NULL,true,false,NULL);

}

//析构函数

~CManager()

{SnmpFreeContext(m_hContext);

SnmpClose(m_hSession);

SnmpCleanup();

delete[]m_Community.ptr;

//SNMP初始化函数

boolCManager:

InitSnmp()

{

//加载SNMP

if(SnmpStartup(&

m_nMajorVersion,&

m_nMinorVersion,&

m_nLevel,&

m_nTranslateMode,&

m_nRetransmitMode)==SNMPAPI_FAILURE)

{ErrorMessage("

startupSNMPerror!

"

);

returnfalse;

}

//设置传输模式

if(SnmpSetTranslateMode(m_nTranslateMode)==SNMPAPI_FAILURE)

Settransfermodeerror!

//设置重传模式

if(SnmpSetRetransmitMode(m_nRetransmitMode)==SNMPAPI_FAILURE)

Setretransmissionmodeerror!

//建立会话

m_hSession=SnmpCreateSession(NULL,NULL,CManager:

Callback,(LPVOID)this);

if(m_hSession==SNMPAPI_FAILURE)

Setconversationerror!

//建立实体

HSNMP_ENTITYhEntity;

if((hEntity=SnmpStrToEntity(m_hSession,m_IP.c_str()))==SNMPAPI_FAILURE)

Createntityerror!

!

//建立上下文句柄

if((m_hContext=SnmpStrToContext(m_hSession,&

m_Community))==SNMPAPI_FAILURE)

{ErrorMessag

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1