计算机网络管理 -第6章 Windows和SNMP.

Slides:



Advertisements
Similar presentations
本章重点内容  SMB 协议和 Samba 简介  安装和启动 Samba  配置 Samba 文件共享  配置 Samba 打印共享  在 Linux 环境下访问 Samba 共享.
Advertisements

6.1 区域委派与域名转发 6.2 虚拟主机技术 6.3 架设FTP服务器 6.4 动态主机分配协议 6.5 架设Mail服务器
1 项目一 计算机网络概论 2 项目二 计算机网络协议与体系结构 3 项目三 物理层基础与应用 4 项目四 数据链路层基础与应用 5 项目五 网络层基础与应用 6 项目六 传输层的基础与应用 7 项目七 应用层的基础与应用 8 项目八 网络管理与网络安全.
第五章 网络服务组件.
6.6 简单网络管理协议 SNMP 网络管理的基本概念
动态网站开发 【HTTP与网络基础】 李博杰
计算机应用基础网考课 第六章 计算机网络基础.
網路程式設計 (Network Programming)
项目四:Internet基础与接入方法 第八章 应用服务器安装配置
第6章:计算机网络基础 网考小组.
计算机网络高级工 梁绍宇.
第七章 Internet 基础与应用 第一节 主机名字与域名服务 第二节 Internet的域名体系 第三节 主机名字的书写方法
计算机网络(第 6 版) 第 6 章 应用层 青岛理工大学通信与电子工程学院.
第 12 章 UDP 與 TCP.
信息犯罪与计算机取证 第三章计算机入侵.
计算机网络 指导教师:杨建国 二零一零年三月.
中国科学技术大学 肖 明 军 《网络信息安全》 中国科学技术大学 肖 明 军
因特网 TCP/IP协议 IP路由技术 Internet接入技术 Internet服务.
电子商务网络技术 主讲:苑毅 电子商务教研室.
计算机网络安全技术实验 启动虚拟机、GIF、measpoilt、.
第三章 管理信息系统的技术基础 主要内容: 数据处理 数据组织 数据库技术 4. 计算机网络.
DP DHCP原理 ISSUE 1.0.
Windows 2000/XP网络组建与系统管理 李燕 中南分校.
数据转发过程.
第一节 电子商务网站规划 第二节 网络服务的选择与费用核算 第三节 网站内容建设
第11讲 IDS技术(一).
网络实用技术基础 Internet技术及应用.
计算机系统安全 第10章 常用攻击手段.
遠距圖書服務系統 國家圖書館 遠距圖書服務系統 文獻傳遞服務 2002/09
Socket.
企业网搭建及应用 重庆市永川职业教育中心
教学目的:通过本章的学习大家要掌握端口 教学重点:端口的分类的两大类,静态端口 教学难点:几种常见的端口.
基于WinSock的邮件系统 1 设计目标: 1.1 SMTP发送邮件服务器(c语言) 1.2 POP3接受邮件服务器(c语言)
学习目标: 1)理解包和包过滤 2)理解包过滤的方法 3)设置特殊的包过滤规则
教师:陈有为 TCP/IP与Internet(A) 教师:陈有为
網路基本概念 本章主要是為讀者建立有關網路的基本知識, 作為後續章節的基礎。首先我們會說明網路的基本概念, 接著介紹網路的各種類型與相關的作業系統, 最後則是介紹 OSI 與 DoD 等兩種網路模型, 讓讀者能進一步了解網路運作的方式。
华南师范大学 防火墙 华南师范大学
第3讲 网络安全协议基础 此为封面页,需列出课程编码、课程名称和课程开发室名称。
指導老師:梁明章 老師 學生:鄭筱樺 二○○九年六月十九日
安全网管技术 张焕杰 中国科学技术大学网络信息中心
Rinpoche整合網路管理系統 - 台北市教育網路應用
TCP和UDP基本原理.
網路服務 家庭和小型企業網路 – 第六章.
第 2 章 TCP / IP 簡介.
在一定程度上 人类的思维产生于 简单个体之间的相互作用 ——Marvin Minsky.
Chapter 14 DHCP.
Westmont College 网络管理 SNMP
MFC WinSock类的编程 为简化套接字网络编程,更方便地利用Windows的消息驱动机制,微软的基础类库(Microsoft Foundation Class Libary,简称MFC),提供了两个套接字类,在不同的层次上对Windows Socket API函数进行了封装,为编写Windows.
Windows 2003 server 進階介紹 麋鹿.
考试题型 填空题(30) 选择题(20) 名词解释(10) 问答题(24) 计算题(16) 附加题(30) 成绩核算:
网络游戏开发语言基础 ——Windows程序设计
网络系统集成技术 访问控制列表 Access Control List 第七章.
第12章 远程访问、NAT技术.
Web前端开发 第23章:网站发布 阮晓龙 / 河南中医药大学管理科学与工程学科
Web Server 王宏瑾.
Westmont College 网络应用软件 第一讲 (客户-服务器 概念, 协议端口的使用, 套接字API)
Window Socket 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
Advister: Quincy Wu Speaker: Chenglin Tsai Date:3/26
個人電腦與網路 1.個人電腦IP設定 自動取得IP與固定IP IP登錄系統與IP自動分配系統 固定IP申請 IP衝突處理
数据块中的数据存储 目录 页 目标 …… 数据存储区 … ……… 数据块 (DB) … STEP 7数据类型概述 STEP 7基本数据类型
NAT技术讲座 主讲:周旭 大唐电信科技股份有限公司光通信分公司 数据通信部.
COM组件及其设计 一、COM组件定义和DNA思想简介 二、COM组件的特点 三、COM组件对象的软件工程方法 四、DNS、MTS
第 14 章 DHCP 著作權所有 © 旗標出版股份有限公司.
2019/5/3 JAVA Socket(UDP).
主要内容: 活动目录的基本知识 活动目录的安装 构造域帐户 安全策略的设置 设置共享文件夹 安装网络打印机
基于C#的.NETFramework 程序设计语言
第10讲 Web服务.
1.4WIN32中的宽字符.
助教:廖啟盛 JAVA Socket(UDP) 助教:廖啟盛
Internet课程设计 教师:陈 妍 朱海萍 西安交通大学计算机系
Presentation transcript:

计算机网络管理 -第6章 Windows和SNMP

第6章 Windows和SNMP 6.1 Windows SNMP服务的基本概念 6.2 SNMP应用程序接口 6.3 扩展代理的实现 6.4 陷入的实现 6.5 SNMP管理应用程序接口 6.6 网络管理应用程序设计

SNMP在90年代初刚刚开始应用,那是Windows 3.0/3.1/3.2是16位操作系统,微软还没有制定16位的网络管理标准; Windows NT操作系统出现后,微软制定了远程过程调用和系统管理服务(SMS)标准,作为公司专用的网络管理平台. 由于SNMP在TCP/IP网络上广泛应用,微软推出TCP/IP 32位协议簇时包含了一个SNMP选件,可以安装在NT的服务器和工作站上,接收和发送SNMP请求/响应/陷入等. 本章从windows中的SNMP服务的安装/测试/应用开发方面进行介绍.

6.1 Windows SNMP服务的基本概念 6.1.1 Windows 的SNMP服务 Windows NT是SNMP理想的开发平台,它支持SNMP V1管理站和代理功能,包括发送和接收陷入的功能. SNMP服务完全集成在windows NT系统中,是NT软件包的一部分.(在安装NT时可选装) Windows 95/98只支持SNMP的代理功能,不支持管理站的功能.(Windows95/98是被管的对象) 服务的概念:是一种特殊的32位应用软件,它通过win32 API与Windows NT的服务控制管理器(SCM)接口,一般后台运行;它作用是监视硬件设备和其它的系统进程,提供访问外围设备和操作系统辅助功能的能力.(系统服务在系统启动或用户登录时可以自动运行,用户退出或系统关机停止运行.) Windows SNMP的服务包括:SNMP代理服务程序snmp.exe和SNMP陷入服务程序SNMPTRAP.EXE; snmp.exe:接收SNMP请求报文,根据要求发送响应报文,能对SNMP报文进行语法分析,ASN.1和BER编码/译码 SNMPtrap.exe:监听发送给NT主机的陷入报文,然后把其中的数据传送给SNMP管理API.(windows 95/98没有陷入服务)

Winsock 控件对用户来说是不可见的,它提供了访问 TCP 和 UDP 网络服务的方便途径。Microsoft Access、Visual Basic、Visual C++ 或 Visual FoxPro 的开发人员都可使用它。为编写客户或服务器应用程序,不必了解 TCP 的细节或调用低级的 Winsock APIs。通过设置控件的属性并调用其方法就可轻易连接到一台远程机器上去,并且还可双向交换数据。 如果创建客户应用程序,就必须知道服务器计算机名或者 IP 地址(RemoteHost 属性),还要知道进行“侦听”的端口(RemotePort 属性),然后调用 Connect 方法。如果创建服务器应用程序,就应设置一个收听端口(LocalPort 属性)并调用 Listen 方法。当客户计算机需要连接时就会发生 ConnectionRequest 事件。为了完成连接,可调用 ConnectionRequest 事件内的 Accept 方法。 建立连接后,任何一方计算机都可以收发数据。为了发送数据,可调用 SendData 方法。当接收数据时会发生 DataArrival 事件。调用 DataArrival 事件内的 GetData 方法就可获取数据。

SNMP服务和扩展代理 WinSock API 扩展代理DLL SNMP代理服务(SNMP.EXE) SNMP陷入服务(SNMPTRP.EXE) UDP Port 162 UDP Port 161 SNMP Request SNMP Response SNMP Trap 扩展代理:SNMP代理服务是可扩展,允许动态地加入和减少MIB信息(程序员不必修改和重编译代理程序,只要添加和删除子代理就可以,该子代理称扩展代理,它能处理私有的MIB对象和特定的陷入条件:当SNMP代理服务接收到一个请求报文时,它就把变量绑定表的有关内容送给对应的扩展代理。扩展代理根据SNMP的规则对其私有的变量进行处理,形成响应信息)

SNMP代理服务与SNMP API的交互作用 SNMP API:是Microsoft为SNMP协议开发的应用程序接口,是一组用于构造SNMP服务,扩展服务和SNMP管理系统的库函数。上图表示了SNMP代理与SNMP API交互作用的过程。SNMP报文通过UDP/IP服务经WinSock API传送到SNMP代理,SNMP代理对报文译码,并进行认证检查,这个过程通过SNMP API(SNMPAPI.DLL交互作用,然后把变量绑定表的内容传送到有关扩展代理,经扩展代理处理形成响应信息又送回SNMP代理,再由SNMP代理装配成GetResponse报文,交给WinSock API送回发送请求的管理站) SNMP API(SNMPAPI..DLL) 扩展代理(MIB-2) 1.3.6.1.2.1 扩展代理(LAN Manager) 扩展代理(Microsoft WINS) SNMP 代理服务(SNMP.EXE) Winsock API GetRequest GetNextRequest SetRequest GetResponse Trap

SNMP 管理API(MGNTAPI.DLL) SNMP陷入服务与SNMP API的交互作用 SNMP 陷入:陷入服务监视从WinSock API传来的陷入报文,然后把陷入数据通过命名的管道传送给SNMP的管理API(MGNTAPI.DLL)。管理API是Microsoft为开发SNMP管理应用提供动态连接库,是SNMP API的一部分。管理应用程序从管理API接收数据,向API发送管理信息,并通过管理API与WinSock通信,实现网络的管理。 SNMP API(SNMPAPI..DLL) SNMP 管理应用 SNMP陷入服务 (SNMPREAP.EXE) SNMP 管理API(MGNTAPI.DLL) Winsock API GetRequest GetNextRequest SetRequest GetResponset Trap

安装SNMP服务象安装Windows NT其它服务一样,唯一要注意的是,它必须先‘安装TCP/IP协议。 文件 解释 INETMIB1.DLL 实现MIB-2(1.3.6.1.2.1)扩展代理 LMMIB2.DLL 实现LAN Manager MIB-2的扩展代理 MGMTAPI.DLL SNMP管理API MIB.BIN 经过编译的MIB数据,由管理API使用 SNMP.EXE SNMP代理服务可执行程序 SNMPTRAP.EXE SNMP陷入服务可执行程序 可安装的SNMP文件

文件 解释 WINS.MIB 实现WINS服务MIB(1.3.6.4.1.311.1.2)的扩展代理 WINSMIB.DLL DHECMIB.DDL 实现DHEC服务MIB(1.3.6.4.1.311.1.3)的扩展代理 DHEC.MIB INETSRV.MIB Microsoft IIS MIB(1.3.6.1.2.1.77.1.7.2.1) FTP.MIB Microsoft IIS FTP 服务器MIB(1.3.6.1.2.1.77.1.7.2.1) HTTP.MIB Microsoft IIS HTTP服务器 MIB(1.3.6.1.2.1.77.1.7.3.1) Internet 信息服务 (IIS) 是 Web 服务,它使得在 Intranet 或 Internet 上发布信息很容易 GOPHERD.MIB Microsoft IIS Gopher服务器 MIB(1.3.6.1.2.1.77.1.7.4.1) Microsoft的有关MIB模块 “Windows Internet 名称服务 (WINS)”:提供了动态复制数据库服务,此服务可以将 NetBIOS 名称注册并解析为网络上使用的 IP 地址。它启用服务器计算机来充当 NetBIOS 名称服务器并注册和解析网络上启用 WINS 客户的名称,就像 TCP/IP 上的 NetBIOS 标准中描述的一样 动态主机配置协议 (DHCP) :是一种 TCP/IP 标准,旨在通过服务器计算机来集中管理网络上使用的 IP 地址和其他相关配置详细信息,以减少管理地址配置的复杂性。提供了 DHCP 服务,它允许服务器计算机履行 DHCP 服务器的职责并且如 DHCP 草案标准 RFC 2131 中所述在您的网络上配置启用 DHCP 的客户机

SNMP在Windows NT中的安装和配置: [1]安装: 1)登录到具有授权安装的帐户 2)双击控制面板的网络图标 3)点击服务 4)点击添加 5)点击网络服务队列中的SNMP服务选项 6)确定开始安装(一般安装完毕,重新安装windows NT的SP4以上版本) [2]配置: 1)SNMP服务的属性中的代理:包含变量sysContact(联系人)、sysLocation(位置)、sysServices(服务) 2)陷入:最多可以设置5个网络地址(IP地址,或IPX或DNS主机名) 3)陷入报文的团体名:区分大小写,是为了发送需要认证的陷入报文用,如果不设置,则任何的团体名都是有效的.如果要使代理只接收某些特定的管理主机发来的陷入,则可以在“安全性”中键入对应主机地址。

SNMP在Windows Windows9X中的安装和配置: [2]策略编辑器的安装 [3]SNMP的配置: [4]修改注册表: [5]安装扩展代理DLL [6]测试SNMP服务

6.2 SNMP应用程序接口 [1]SNMP应用程序接口SNMP API由4部分组成: 扩展API 管理API 实用程序API 服务API 在编写扩展API代理和SNMP管理应用程序都使用这些函数。 [2]常用几个数据类型(在SNMP头文件SNMP.H中定义) Typedef struct{ BYTE *stream; //字节流指针 UINT length; //字节数 BOOL dynamic //如果动态分配存储器则为“true” } AsnOctetString

Typedef struct{ UNIT idlength //在oid中的整数个数 UINT ids; //指向整数流的指针 } AsnObjectIdentifier BYTE asnType union{ AsnInteger number; AsnOctetString String; ASnObjectIdentifier Object; AsnSequence sequence; AsnIpAddress Address AsnCounter Counter; AsnCauge gauge; AsnTimeticks ticks; AsnOpaque arbitrary; //(未知类) } } AsnAny

Typedef struct vb{ AsnObjectName name; AsnObjectSyntax value; } RFC1157VarBind Typedef struct{ RFC1157VarBind *list; UINT len; } RFC1157VarBindList

6.2.1 扩展API的概念 扩展API是4个函数的集合。SNMP服务和扩展代理DLL使用这些函数交换数据。这些函数的原型在SNMP.H头文件中,函数代码用在每个扩展代理中。 函数 用途 SnmpExtensionInit 实现扩展代理初始化和MIB对象注册 SnmpExtensionInitEx 提供多个MIB对象注册 SnmpExtensionQuery 处理Get,GetNext,Set请求 SnmpExtensionTrap 从扩展代理收集Trap数据

1)SnmpExtensionInit原型: BOOL WINAPI SnmpExtensionInit( DWORD dwTimeZeroReference, //扩展代理存储的时间(白分之一秒) HANDLE *phPollForTrapEvent, //扩展代理发送Trap时获取的事件句柄 AsnObjectIdentifier *pSupportedView; //MIB子树的对象标识符 ) 2)SnmpExtensionInitEx原型: BOOL WINAPI SnmpExtensionInitEx( 3) SnmpExtensionQuery原型: BOOL WINAPI SnmpExtensionQuery( BYTE nRequestType, //Get 160,GetNext 161,Set 163 RFC1157VarBindList *pVariableBinding, //变量绑定表指针 AsnInteger *pnErrorStatus , //tooBig 1,noSuchName 2,badValue 3, //readOnly 4,genErr 5 AsnInteger *pnErrorIndex;)

4) SnmpExtensionTrap原型: BOOL WINAPI SnmpExtensionTrap( AsnObjectIdentifier *penterprise, AsnInteger *pdwGenericTrap,//coldStart 1,warmStart 1,... AsnIngeter *pdwSpecificTrap, AsnTimeticks *pdwtimeStamp, RFC1157VarBindList *pVaribleBindings;)

管理API(MGMTAPI.DLL)是7个函数的集合。管理应用程序调用这些函数发送请求,接收响应 和陷入。 把OBJECT IDENTIFIER转换成AsnObjectIdentifier SnmpMgrStrToOid 把AsnObjectIdentifier转换成OBJECT IDENTIFIER SnmpMgrOidToStr 接收代理发来的Trap数据 SnmpMgrGetTrap 注册接收Trap的管理应用 SnmpMgrTrapListen 向代理发送Get,GetNext和Set请求 SnmpMgrRequest 关闭到代理的管套 SnmpMgrClose 打开到代理的管套 SnmpMgrOpen 用途 函数

Microsoft SNMP管理API有一定的局限性: 1)只能运行在Win32操作系统。 2)陷入操作调用命名管道服务,而Windows 95/98不支持命名管道,因此不能支持陷入服务。 3)发出请求和接收响应都调用SnmpMgrRequest,而SnmpMgrRequest函数是同步操作。不支持异步操作。 4)只能使用C,C++,因为两个头文件SNMP.H和MGMTAPI.H的很多数据类型是 AsnAny(包含大量的union的结构),所以大量使用指针。Java和 VB很难胜任。

6.2.3 实用程序API 实用API包含14个函数,分为存储器分配和数据管理两个组,函数原型在SNMP.H中,函数代码在SNMPAPI.DLL和SNMPAPI.LIB中。 函数 用途 SnmpUtilMenAlloc 分配内存 SnmpUtilMenREAlloc 重新分配内存 SnmpUtilMenFree 释放内存 SnmpUtilOidAppend 把两个对象放在一起 SnmpUtilOilCmp 比较两个AsnObjectIdentifier对象的值 SnmpUtilOidNCmp 比较两个AsnObjectIdentifier对象的前N个值 SnmpUtilOidCpy 拷贝一个AsnObjectIdentifier对象 SnmpUtilOidFree 释放AsnObjectIdentifier对象分配的存储器 SnmpUtilVarBindCpy 拷贝一个RFC1157VarBind对象 SnmpUtilVarBindFree 释放RFC1157VarBind对象动态分配的存储器 SnmpUtilVarBindListCpy 拷贝一个RFC1157VarBindList对象 SnmpUtilVarBindListFree 释放RFC1157VarBindList对象动态分配的存储器 SnmpUtilDbgPrint 在LOG文件中写入Debug消息 SnmpUtilPrintAsnAny 在标准打印机存储在AsnAny对象中的值

[1]存储器分配函数 注意: 1)SnmpUtilMen* 函数为SNMP应用和管理API分配和回收存储器。 2)扩展代理不能调用Win32的存储管理(LocalAlloc或GlobalAllo),也不能调用(编译支持)标准的C的存储管理(malloc,remalloc,free). 3)为了防止存储器泄漏(由于分配在不同的堆中而不能释放),要求所有的动态的对象都使用SnmpUtilMen*分配在同一存储堆中。 4)这些函数的参数和返回值与标准的C的存储管理函数(malloc,remalloc,free)相同,即返回的是指针而不是存储句柄。

1)SnmpUtilMenAlloc:该函数的作用是分配内存。 例子:为一个字节串os分配内存的。 AsnOctetString os; 3个函数: 1)SnmpUtilMenAlloc:该函数的作用是分配内存。 例子:为一个字节串os分配内存的。 AsnOctetString os; char szString[]=“An Octet String”; os.Length=lstrlen(szString); os.stream=(BYTE*)SnmpUtilMenAlloc(sizeof(BYTE)*os.Length); if(os.stream) mencpy(os.stream.szString,os.Length); 2)SnmpUtilMenReAlloc:重新分配内存,即改变以前分配的存储对象的大小。该函数有两个参数:一个指针指向已有的存储对象;另一个参数表示存储对象的新的字节数。 如:如果字节数增加,则分配存储器,反之如果字节数减少,则收回一部分存储器。重新分配成功时,返回新存储的对象指针,否则返回NULL。 SnmpUtilMenReAlloc(VarBinds.list,sizeof(RFC1157VarBind) *VarBinds.len);

3)SnmpUtilMenFree:这个函数的作用是释放内存。 例子: AsnOctetString os; os.Length=10; os.stream=(BYTE*)SnmpUtilMenAlloc(sizeof(BYTE)*os.Length); if(os.stream) { SnmpUtilMenFree(os.stream); os.stream=(BYTE*)NULL }

[2]数据管理函数 1)SnmpUtilOidAppend:把两个对象放在一起。 SNMPAPI SNMP_FUNC_TYPE SnmpUtilOidAppend( AsnObjectIdentifier * pOidDst, //目标对象 AsnObjectIdentifier * pOidSrc //加到目标对象的源对象 ); 2) SnmpUtilOidCmp比较两个AsnObjectIdentifier对象值 SnmpUtilOidCmp( AsnObjectIdentifier * pOid1, AsnObjectIdentifier * pOid2

3) SnmpUtilOidNCmp比较两个AsnObjectIdentifier对象值前N子标识符 SNMPAPI SNMP_FUNC_TYPE SnmpUtilOidNCmp( AsnObjectIdentifier * pOid1, AsnObjectIdentifier * pOid2, UINT nSubIds //需要比较的子标识符个数 ); 4)SnmpUtilOidCpy:拷贝一个AsnObjectIdentifier对象,源拷贝到目标 SnmpUtilOidNCpy( AsnObjectIdentifier * pDstObjId, AsnObjectIdentifier * pSrcObjId);

5) SnmpUtilOidFree:释放为AsnObjectIdentifier对象动态分配的存储器。 VOID SNMP_FUNC_TYPE SnmpUtilOidFree( AsnObjectIdentifier * pOid ); 6) SnmpUtilVarBindCpy:拷贝一个SnmpVarBind对象。 SNMPAPI SnmpUtilVarBindCpy( SnmpVarBind * pVbDst, SnmpVarBind * pVbSrc 7)SnmpUtilVarBindFre:释放为SnmpVarBind对象动态分配的存储器 SnmpUtilVarBindFree( SnmpVarBind * pVb

8) SnmpUtilVarBindListCpy:拷贝SnmpVarBindList对象 SNMPAPI SNMP_FUNC_TYPE SnmpUtilVarBindListCpy( SnmpVarBindList * pVblDst, SnmpVarBindList * pVblSrc ); 9) SnmpUtilVarBindListFree:释放为SnmpVarBindList对象动态分配的存储器 VOID SnmpUtilVarBindListFree( SnmpVarBindList * pVbl

10)SnmpUtilDbgPrint:在LOG文件中写入Debug信息 BOOL WINAPI SnmpUtilDbgPrint( INT nLogLevel,//错误级别 LPSTR szFormat,//打印格式 … //其它打印参数 ); 11)SnmpUtiPrintAsnAny:打印存储在AsnAny对象中的值。

6.2.4 服务API 见P181-182 服务API(SNMPAPI.DLL)包含19个函数,这些函数用在SNMP.EXE中。 在windows 2000中正式公布 见P181-182

6.3 扩展代理的实现 扩展API的4个函数用在扩展代理中。其中SnmpExtensionInit, SnmpExtensionQuery, SnmpExtensionTrap,应该出现在每个扩展代理中,另一个函数SnmpExtensionInitEx是任选,根据扩展代理的需要;每个扩展代理是通过这些函数与SNMP通信的,一般不需要执行其它的线程。 6.3.1扩展代理动态连接库 扩展代理被SNMP服务装入后,首先调“入口函数”,然后调用SnmpExtensionInit(或SnmpExtensionInitEx ),完成必要的初始化工作。(例如:变量运行时间赋值;为缓冲区分配内存;进程,线程和事件生成等) 1)DLL入口函数 dwReason的值为DDL-PROCESS-ATTACH,则DllMain被调用后完成初始化 dwReason的值为DDL-PROCESS-DEATTACH,则DllMain被调用后,进行卸载,完成关闭句柄,释放内存,通知主进程等。 见书182-183 2)初始化函数1 DLL转入成功就调用SnmpExtensionInit函数进行初始化操作。 见书P183-184

3)初始化函数2(提供多个MIB子树登记) 如果DllMain和SnmpExtensionInit调用成功,SNMP服务就检查扩展代理中是否有SnmpExtensionInitEx函数.如果有,发付调用,把所有的扩展代理支持的MIB子树登记完毕.即直到该函数返回FALSE为止. 见P185-186页 4)SnmpExtensionQuery函数 作用:处理请求报文(Get,GetNext,Set)报文中的变量绑定表,生成应答报文GetResponse中的变量绑定表,并决定错误状态。 注意1:由于每个扩展代理只处理自己管理的那部分MIB变量,所以SNMP服务收到一个请求报文后,必须把变量绑定表的内容按照各个已装入的扩展代理的管辖范围分成若干部分,交给相应的扩展代理处理。 注意2:ResolveVarBind处理变量绑定表对 见P186-187

6.3.2 MIB数据库的实现 MIB数据库文件(*.mib)组织成一维数组,每个元素是结构类型MIBVARS 1)MIBVARS结构定义: Typedef struct-MibVars { AsnObjectIdentifier Oid;/*mib变量的对象子标识符*/ void *pStroage; /*本地存储器地址指针*/ void *ptempVar; /*缓冲变量指针,set命令用*/ BOOL fModified; /*指示变量的值是否被改变过*/ BYTE bType; /*变量类型*/ DWORD dwMinVal; /*变量最小值*/ DWORD dwMaxVal; /*变量最大值*/ UINT uAccess;/*访问模式*/ UINT (MinFunc)(UINT,struct-MibVars*,RFC1157VarBind*) /*实现变量操作函数,参数为:操作类型,变量元素 指针,变量绑定表指针*/ struct-MibVars MibNext;/*指向下一个指针*/ }MIBVARS

2)MIB的定义: 见P188-189 3)搜索MIBVARS的数据库 见P190-191 4)搜索的结果 见P191-192

6.4 陷入的实现 实现陷入的扩展函数是SnmpExtensionTrap. 6.4.1 陷入设计: 1)代理的作用:检测陷入事件,收集陷入数据,发送陷入消息。 2)单状态事件:用户击键,输入口令,SNMP报文认证失败等事件,通常用计数器跟踪单状态事件出现的次数,达到一定的门限即触发陷入。 3)多状态事件:被监视的变量值在多个状态之间转换,例如:指示灯ON/OFF转换,主机电源开、关等,这类事件用整型变量指示其所处的状态。 4)陷入决策问题:决定那些事件可以引起陷入;另外陷入的报文应该包含那些数据。如果陷入是基于MIB,则可陷入的事件就已经确定了,甚至可以写到文档中;如果基于企业的MIB,则要根据企业的标准或设备的特点决定那些事件可以引入陷入。(陷入一般分为不同的优先级) 5)陷入的管理模式:陷入制导轮询(见P37):管理站启动或每隔一定时间,用Get操作轮询一遍所有代理,得到某些关键的信息或基本性能统计数据,得到数据后停止轮询;而代理进程负责在必要的时间向管理站报告异常事件,并通过陷入操作传给管理站,得到异常事件的报告,管理站可以查询有关的代理,以便得到更具体的信息,对事件的原因作进一步的分析。

6)陷入的记录:记录信息; 信息收集时可能有延迟。 6.4.2 扩展代理支持的陷入 1)扩展代理实现陷入的两个函数:SnmpExtensionInit,SnmpExtensionTrap. 例子(P194): 主要功能:调用CreatEvent函数产生一个事件,用于支持的陷入句柄通知SNMP服务;如果产生事件失败则函数SnmpExtensionInit返回FALSE,表示无法初始化;函数SnmpExtensionTrap为一个陷入收集数据,这些数据来自全局变量,经该函数的参数传递给SNMP服务;静态变量fCleanUp的作用是区分两种操作:提供陷入数据或清除前次发送陷入占用的缓冲区。

6.4.3 陷入检测 陷入检测主要包括:用什么检测陷入和怎样检测陷入。 1)事件检测和数据收集 扩展代理完成事件检测和数据收集 外部进程完成事件检测,扩展代理完成数据收集 扩展代理完成事件检测,外部进程完成数据收集,然后通过进程间通信机制把数据传送给扩展代理。 外部进程完成事件检测和数据收集,然后通过进程间通信机制把数据传送给扩展代理。 2)事件检测方法: 通常的检测方法是主动轮询。扩展代理生成一个线程,经常检查特殊条件是否出现,检测到一个事件后就收集有关数据,并通知扩展代理发送陷入。 主动轮询:由SetTimer或SetWaitableTimer生成的定时器,扩展代理在一定时间间隔上检查陷入事件。(可能会有延迟,轮询信息可能占用大量的网络带宽,影响正常的网络通信) 被动等待:有一种触发机制,在可陷入事件时由监视线程发出通知。唤醒扩展代理发送陷入报文。(必须支持通知机制)

6.5 SNMP 管理应用程序接口 Microsoft的管理应用程序接口(MGMTAPI.DLL)有7各函数它们的功能见P177. 6.5.1 Microsoft MIB编译器: Microsoft MIB编译器MIBCC.EXE是支持管理应用的附属工具,它的作用是把人工可读的数据格式,产生二进制文件MIB.BIN,由管理应用程序使用。 其基本格式见P197-198. 6.5.2管理API头文件 1)头文件:管理API使用的常数和数据类型包含在头文件MGMTAPI.H中: #include <snmp.h> #include <winsock.h> #ifdef –cplusplus … #endif

2)数据类型定义: Typedef struct –SNMP_MGR_SESSION{ SockDesc fd;//由Winsock API返回的网络管套描述符 struct sockaddrdestAddr,//网络连接的远方地址 LPSTR community,//团体名 INT timeout,//打开管套或等待响应超值 INT retries,//重新发送次数 AsnInteger requestID,//请求标识 char recvBuf[RECVBUFSIZE],//用于存储响应报 文的缓冲区 }SNMP-MGR-SESSION,*LPSNMP-MGR-SESSION;

6.5.3 管理API功能 管理API 由7个函数组成: 1)SnmpMgrOpen:在发送请求之前调用该函数,打开与SNMP代理的连接。 LPSNMP_MGR_SESSION SNMP_FUNC_TYPE SnmpMgrOpen( IN LPSTR lpAgentAddress, // Name/address of target agent IN LPSTR lpAgentCommunity, // Community for target agent IN INT nTimeOut, // Comm time-out in milliseconds IN INT nRetries // Comm time-out/retry count ); 如果建立连接成功,函数返回指针LPSNMP_MGR_SESSION结构指针;如果失败,返回空指针。

2)SnmpMgrClose:这个函数关闭到SNMP代理的连接管套 BOOL SNMP_FUNC_TYPE SnmpMgrClose( IN LPSNMP_MGR_SESSION session // SNMP session pointer ); 如果连接关闭,该函数返回TRUE,否则返回FALSE.

3)SnmpMgrRequest:用这个函数可以发送Get,GetNext和Set请求报文。该函数是异步操作,在接收到响应或超时后才返回结果。 SNMPAPI SNMP_FUNC_TYPE SnmpMgrRequest( LPSNMP_MGR_SESSION session, // SNMP session pointer IN BYTE requestType, // Get, GetNext, or Set IN OUT RFC1157VarBindList *variableBindings, // Varible bindings AsnInteger *errorStatus, // Result error status AsnInteger *errorIndex // Result error index ); 如果请求成功,函数返回TRUE,并接受到响应报文;否则返回FALSE。 注意: P176 typedef AsnObjectIdentifier AsnObjectName; typedef AsnAny AsnObjectSyntax;

4)SnmpMgrStrToOid:该函数利用MIB 4)SnmpMgrStrToOid:该函数利用MIB.BIN中的数据把对象标识符转变成等价的AsnObjectIdentifier类型。函数的原型是: BOOL SNMP_FUNC_TYPE SnmpMgrStrToOid( LPSTR string, // OID string to be converted AsnObjectIdentifier *oid // OID internal epresentation ); 例如: 设:*pString=“system.sysdescr”,或“.1.3.6.1.2.1.1.1”,或“.1.3.6.1.2.1.system.sysDescr” 则snmpMgrStrToOid(pString,&oid),则结果是:iod.idlength=9;oid.ids=1 3 6 1 2 1 1 1 0

5)SnmpMgrOidToStr:该函数利用MIB 5)SnmpMgrOidToStr:该函数利用MIB.BIN中的数据把AsnObjectIdentifier类型转变成等价对象标识符类型。函数的原型是: SnmpMgrOidToStr( AsnObjectIdentifier *oid, // OID to be converted LPSTR string // OID string representation ); 例如: 设:iod.idlength=9;oid.ids=1 3 6 1 2 1 1 1 0 则snmpMgrOidToStr (&oid , pString),则结果是:*pString=“system.sysdescr”

6)SnmpMgrGetTrap:SNMP接收的陷入数据都交给该函数;它被陷入服务周期的调用,以便轮询需要接收的陷入报文。函数原型: BOOL SNMP_FUNC_TYPE SnmpMgrGetTrap( AsnObjectIdentifier *enterprise, // Generating enterprise AsnNetworkAddress *IPAddress, // Generating IP address AsnInteger *genericTrap, // Generic trap type AsnInteger *specificTrap, // Enterprise specific type AsnTimeticks *timeStamp, // Time stamp RFC1157VarBindList *variableBindings // Variable bindings );

7)SnmpMgrTrapListen:该函数的作用是在陷入服务和管理API之间建立命名管道,使得管理应用程序可以接收陷入报文。函数原型是: BOOL SNMP_FUNC_TYPE SnmpMgrTrapListen( HANDLE *phTrapAvailable // Event indicating trap available ); 例子见P203

6.6 网络管理应用程序设计 [1] 概念: 1)管理平台:通用的网络管理程序,它提供一组通用的网络管理功能,也提供实现专用管理程序的工具。 如:网络自动发现;拓扑生成;MIB编译器;MIB浏览器;陷入记录;管理轮询等 2)网络管理平台必备工作: 1)确定被管理结点的网络地址(IP地址, IPX地址, DNS主机名) 2)确定远程目标的端口号(UDP 161,专用端口号>1024) 3)确定接收陷入的端口号(UDP 162,专用端口号>1024) 4)确定团体名(通常为public,如果用两个团体名,则read-only团体名为public;read-write团体名为private) 5)确定响应定时器等待时间间隔 6)确定重复请求次数 7)确定轮询时间间隔。

6.6 网络管理应用程序设计 [2]管理应用的基本功能: 基本功能:辅助管理员监视网络,发现活动的网络设备,排除网络故障。 1)网络发现: 方法1:探测站点,向子网中所有站发送ICMP报文,把收到应答的标记活动点;标识SNMP网络结点,向活动站点发送GetRequest报文;根据收集的信息可以建立网络发现数据库。 方法2:读取ARP缓冲区以及本地路由器和管理主机接口表,发现可连接的设备,然后有选择的发送ICMP;标识SNMP网络结点,向活动站点发送GetRequest报文;根据收集的信息可以建立网络发现数据库。 (活动站点的基本信息:系统组的sysDescr和system;地址转换组等) 2)管理站轮询:定期轮询活动站点,可以利用ICMP报文检查站点活动状态,或利用SNMP收集管理信息。

3)MIB编译器和数据库:MIB模块以ASN.1编写,以ASCII文件存储,编译后转换成代理可利用的格式。MIB数据库是MIB模块的集合。 4)MIB浏览器:这个程序的功能是用搜索目录树的方法,定位和显示MIB库中的被管对象的值,可以通过向某个MIB对象发送GetNextRequest请求,接收和显示变量绑定表中的内容。 5)MIB搜索器(Walker):比较简单的MIB浏览器。 6)陷入信息记录:管理应用接收到一个陷入报文,根据信息进行处理。 [3]行为规则: 设计管理应用程序时要遵守一些行为规则,才能实现高效而有用的软件,要注意下面规则: 1)报文的大小:一般每个请求不超过16个变量绑定表,请求报文总长度不超过1000字节。 2)简单代理: 3)轮询间隔: 4)有目的的陷入: