以太网拓扑发现

上传人:ni****g 文档编号:543732137 上传时间:2023-01-08 格式:DOCX 页数:12 大小:233.44KB
返回 下载 相关 举报
以太网拓扑发现_第1页
第1页 / 共12页
以太网拓扑发现_第2页
第2页 / 共12页
以太网拓扑发现_第3页
第3页 / 共12页
以太网拓扑发现_第4页
第4页 / 共12页
以太网拓扑发现_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《以太网拓扑发现》由会员分享,可在线阅读,更多相关《以太网拓扑发现(12页珍藏版)》请在金锄头文库上搜索。

1、以太网络拓扑发现一. 原理概述简单网络管理协议(SNMP)首先是由Internet工程任务组织(Internet Engineering Task Force)(IETF)的研究小组为了解决Internet上的路由器管理问题而提出的。许多人认为 SNMP在IP上运行的原因是Internet运行的是TCP/IP协议,然而事实并不是这样。SNMP 被设计成与协议无关,所以它可以在 IP,IPX,AppleTalk,OSI 以及其他用到的传输 协议上被使用。SNMP是一系列协议组和规范(见下表),它们提供了一种从网络上的设备中收集网络管理信 息的方法。SNMP也为设备向网络管理工作站报告问题和错误提

2、供了一种方法。名字说明MIB管理信息库SMI管理信息的结构和标识SNMP简单网络管理协议从被管理设备中收集数据有两种方法:一种是只轮询(polling-only)的方法,另一种是基 于中断(interrupt-based)的方法。如果你只使用只轮询的方法,那么网络管理工作站总是在控制之下。而这种方法的缺陷在于 信息的实时性,尤其是错误的实时性。你多久轮询一次,并且在轮询时按照什么样的设备顺 序呢?如果轮询间隔太小,那么将产生太多不必要的通信量。如果轮询间隔太大,并且在轮 询时顺序不对,那么关于一些大的灾难性的事件的通知又会太馒。这就违背了积极主动的网 络管理目的。当有异常事件发生时,基于中断的

3、方法可以立即通知网络管理工作站(在这里假设该设备还 没有崩溃,并且在被管理设备和管理工作站之间仍有一条可用的通信途径)。然而,这种方 法也不是没有他的缺陷的,首先,产生错误或自陷需要系统资源。如果自陷必须转发大量的 信息,那么被管理设备可能不得不消耗更多的时间和系统资源来产生自陷,从而影响了它执 行主要的功能(违背了网络管理的原则2)。而且,如果几个同类型的自陷事件接连发生,那么大量网络带宽可能将被相同的信息所占用 (违背了网络管理的原则 1)。尤其是如果自陷是关于网络拥挤问题的时候,事情就会变得 特别糟糕。克服这一缺陷的一种方法就是对于被管理设备来说,应当设置关于什么时候报告 问题的阈值(t

4、hreshold)。但不幸的是这种方法可能再一次违背了网络管理的原则2,因为 设备必须消耗更多的时间和系统资源,来决定一个自陷是否应该被产生。结果,以上两种方法的结合:面向自陷的轮询方法(trap-directed polling)可能是执行 网络管理最为有效的方法了。一般来说,网络管理工作站轮询在被管理设备中的代理来收集 数据,并且在控制台上用数字或图形的表示方式来显示这些数据。这就允许网络管理员分析 和管理设备以及网络通信量了。被管理设备中的代理可以在任何时候向网络管理工作站报告错误情况,例如预制定阈值越界 程度等等。代理并不需要等到管理工作站为获得这些错误情况而轮询他的时候才会报告。这

5、些错误情况就是众所周知的 SNMP 自陷( trap)。在这种结合的方法中,当一个设备产生了一个自陷时,你可以使用网络管理工作站来查询该 设备(假设它仍然是可到达的),以获得更多的信息。系统概述因为这个作业比较特殊,由于没有相应的实验环境,所以最初的作业要求显得不切实际,和 助教老师商量过后,决定将该作业分为两块,一是实现 mib viewer 功能,即能够通过收发数 据包取得任何oid所对应的mib值,二是通过一个静态的数据结构来仿真top发现的算法, 因为这两者的结合加上相应的网络环境,就能够实现现实的网络top发现了,换句话说,实 现了这两部分的内容,也就基本上达到了作业的要求。下面分两

6、部分说明:1Mib viewer使用方法:选中 mib viewer 标签,在 target ip 栏中输入希望查询的设备 ip 地址,在 oid 栏中填入希望查 询 的 oid 值 (oid 值 的 输 入 与 选 择 的 查 询 方 法 有 关 ) , 选 择 想 要 的 查 询 方 法(Get,GetNext,GetBulk)Get: 次只读一条记录,而且对于目标oid肯定,例如,希望读取sysDescr的值,则oid 值必须输入 1.3.6.1.2.1.1.1.0。GetNext: 一次只读取一条记录,但是能读取不确定的oid所对应的信息,如输入 1.3.6.1.2.1.1.1,也能读

7、出对应的 sysDescr 值。GetBulk:一次能读取多条数据,需要在对应的edit框中输入所需读取的信息数目,例如在oid 中输入1.3.6.1.2.1.1,在edit栏中输入7,就能读出System组的所有7条信息。效果图:程序设计说明:目前流行的snmp工具包主要有net-snmp,agent+,snmp+,和winsnmp,我用的是由微软 提供的winsnmp开发包,因为其它的工具包要么不是免费的(如 hp公司的snmp+和 agent+),要么是针对linux系统开发的,对VC的支持不好,所以被迫选择了 winsnmp, 使用之后发现这个开发包很不好用,集成度太低,而且宏定意相当

8、凌乱,总之,花了相当功 夫才上手的。我自己将 winsnmp.h 提供的 api 封装成一个 CSnmp 类,方便后面程序的开发,期中主 要的函数有:/构造函数CSnmp();主要封装了三个api:启动Snmp服务 SnmpStartup(nMajorVersion,nMinorVersion,nLevel,nTranslateMode,nRetransmitMode) /设置传输模式 *注意,这里必须为 V2 以上版本,否则对很多功能不支持。SnmpSetTranslateMode(SNMPAPI_UNTRANSLATED_V2) /设置重传模式SnmpSetRetransmitMode(S

9、NMPAPI_ON)/建立会话bool CreateSession(HWND hWnd, UINT wMsg, CString& errorinfo);/绑定变量列表bool CreateVBL(LPCSTR string, smiLPVALUE pvalue,CString& errorinfo);/追加绑定变量列表bool SetVBL(LPCSTR string, CString& errorinfo);/创建协议数据单元 for get or get nextbool CreatePDU(smiINT PDU_type, CString& errorinfo);/创建协议数据单元 fo

10、r getbulkbool CreatePDU(smiINT PDU_type, CString& errorinfo, int a);/发送数据包bool Send(LPCSTR address,const char* password, CString& errorinfo);/接收数据包并解析bool Receive(LPTSTR name30,smiLPVALUE value30, CString& errorinfo); 期中主要包括:/接受消息 SnmpRecvMsg(m_hSession,&srcEntity,&dstEntity,&context,&pPDU) /获取数据包内的

11、信息SnmpGetPduData(pPDU,PDU_type,request_id,error_status, error_index,&varbindlist)/获取变量数目m_nCount = SnmpCountVbl(varbindlist)/获取变量的值for(int i=1;i=m_nCount;i+)SnmpGetVb(varbindlist,i,pOidi-1,valuei-1)获取变量相对应的oid值for(i=0;im_nCount;i+) if(SnmpOidToStr(pOidi,100,namei) = SNMPAPI_FAILURE)/错误映射表便于调试void Er

12、rorToString(unsigned long errorindex, CString &str);实际使用时,主要是两个函数:send(CString AgentIP, CString a,int b)/三个参数分别为目标ip,待查oid值,查找类型 按以下顺序调用 CSnmp 中的函数:CreateSession(CNetView:m_hWnd,wMsg,errorinfo)/wMsg是自己定义的消息,用来联动 receive ()函数CreateVBL(LPCSTR)m_strOid0.GetBuffer(0),NULL,errorinfo) m_Snmp.CreatePDU(SNM

13、P_PDU_GET,errorinfo)/共有三种查找方式,这里以 get 为例 m_Snmp.Send(LPCSTR)AgentIP,public, errorinfo)receive()在成功调用 CSnmp 中的 Receive(pOid,pValue,errorinfo函数之后 用switch-case语句分析返回的信息内容,并加以记录和输出。二静态算法演示:效果图:说明:主要是用自己定义的一个静态的数据结构来仿真网络top的发现算法。算法描述:在每次找到交换机的时候,对该交换机进行如下操作:主要涉及 oid:Generated from OBJECT-TYPE definition

14、found inrfcl213-mib2.asnlOID value: 1.3.6.1.2.1.4.21.1.7OID description:ipRouteNextHop OBJECT-TYPESYNTAX IpAddress ACCESS read-writeSTATUS mandatory DESCRIPTIONThe IP address of the next hop of this route. (In the case of a route bound to an interface which is realized via a broadcast media, the val

15、ue of this field is the agents IP address on that interface.):= ipRouteEntry 7 OID value: 1.3.6.1.2.1.4.21.1.8OID description:ipRouteType OBJECT-TYPE SYNTAX INTEGER other(1),invalid(2),direct(3), indirect(4)ACCESS read-write STATUS mandatory DESCRIPTIONThe type of route. Note that the values direct(3) and indirect(4) refer to the notion of direct and indirect routing in the IP architecture.Setting this object to the value invalid(2) has the effect of invalidating the corresponding entry in the ipRouteTable object. That is, i

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号