一、三层(网络层)发现

算法来源:王娟娟.基于SNMP的网络拓扑发现算法研究.武汉科技大学硕士学位论文,2008

数据结构:

待检路由设备网关链表:存放指定深度内待检路由设备的网关信息,处理后删除。

拓扑信息链表:存放从已检测路由设备的网关信息。

子网信息链表:存放网关信息对应的子网信息。

基本思想:

  类似于广度优先,在指定深度内运行算法,最后根据拓扑信息链表获得所有路由及其互联关系,根据子网信息链表各路由设备连接的子网及子网内所有活动主机的信息。

需要获得的信息:

  路由信息如下图所示。

点击可查看补充说明。

  

算法流程:

(1)初始化三个链表。

(2)向初始路由设备发送PDU征询数据包,从初始路由设备返回的应答数据包解析出每条记录中的路由相关信息:若当前记录的ipRouteType值为3,则将ipRouteNextHop值加进拓扑信息链表,将ipRouteNextHop、ipRouteDest、ipRouteMask、ipRoutelflndex、ifDescr值加进子网信息链表;若当前记录的ipRouteType值为4,则将ipRouteNextHop和ipAdEntAddr值加进拓扑信息链表,若待检设备网关链表中无节点的IP地址与此ipRouteNextHop相同,则将ipRouteNextHop加进待检设备网关链表,将该节点的跳数值赋为2,表示该路由设备距本地网关所在设备有一跳距离。

(3)在待检设备网关链表不为空且当前节点的深度不大于指定获取深度的情况下,继续进行下述处理:取出待检设备网关链表当前节点记录的ipRouteNextHop,封入PDU征询数据包发给相应路由设备,从设备返回的应答数据包解析出每条记录中的路由相关信息:若当前记录的ipRouteType值为3,则将ipRouteNextHop值加进拓扑信息链表,将ipRouteNextHop、ipRouteDest、ipRouteMask、ipRoutelflndex、ipDescr值加进子网信息链表;若当前记录的ipRouteType值为4,则将ipRouteNextHop和ipAdEntAddr值加进拓扑信息链表,若子网信息链表中无节点的IP地址与此ipRouteNextHop相同,则将ipRouteNextHop)JH进待检设备网关链表,将该节点的跳数加一。

(4)从待检设备网关链表中删除当前已被处理过的节点并判断是否继续处理。

以上算法会在搜索过程到达指定深度后停止,通过检索拓扑信息链表,便可得到该深度范围内所有路由设备的拓扑结构。

 
 
 
二、二层(链路层)发现
(各算法所依据的定理略.)
  算法一
算法来源:王娟娟.基于SNMP的网络拓扑发现算法研究.武汉科技大学硕士学位论文,2008
  (1)节点探测:根据本机IP地址和Mask确定探测的节点范围,然后向这些节点用异步的方式发送ICMP回应请求包来确定活动主机。
  (2)确定子网内各个交换机之间以及交换机与路由器之间的连接关系:首先,根据交换机地址转发表构造每台交换机的上下行端口;其次,从子网中的各交换机中选取其地址转发表中具有最多转发MAC地址数的交换机,将其设定为当前“生成树”的根交换机。然后遍历根交换机的所有下行端口(除与管理站连接的上行端口外),应用定理1(两台交换机中的各一个端口,分别穿过这两个端口可到的MAC地址集合的并集为空)确定与根交换机各端口具有简单连接关系的其它各交换机和相应端口,将其划分为各个子树;最后,在各端口对应的交换机子树中确定与根交换机的下行端口直接连接的交换机Sj后(根据定理2来判断),就将根交换机从生成树中删除,新生成的树是原来的生成树的子树,然后以Si作为新子树的根交换机,递归执行这个过程,直至每个交换机子树中只包含一个交换机,这个交换机即为叶结点。另外,交换机与路由器之间的连接可由定理3确定。
  (3)确定各个主机与交换机之间的连接关系:利用ICMP回应请求/响应报文,将从根交换机出发,按层次遍历生成树中的各个交换机,判定其叶端口,根据定理4,则该端口对应的地址转发表中所包含的所有主机均与该端口直接连接。
 
 
算法二
算法来源:王娟娟.基于SNMP的网络拓扑发现算法研究.武汉科技大学硕士学位论文,2008
     刘亚莉,孙亚民基于SNMP的网络拓扑结构自动发现研究.微型机与应用,2004,23(4)
  (1)利用子网所连接的出口路由器ARP缓存来确定节点探测范围,利用SNMP读取路由器的ipNetToMediaTable相应表项得到子网中可能的活动节点。
  (2)首先利用基于交换机生成树的拓扑发现算法检测支持生成树协议的交换机之间的连接关系,快速发现链路层的主干网络拓扑,对于不支持生成树协议的交换机,先视为主机,利用主机定位定理在已有的交换机拓扑上进行定位,缩小算法判定范围,然后利用交换机地址转发表的拓扑发现算法(具体参考算法1的定理2)补全链路层的交换机拓扑,从而得到完整的链路层网络拓扑结构。
  (3)在得到完整的交换机拓扑基础上,利用主机定位定理可以快速确定各个主机在交换机生成树中的位置。
 
 
算法三
算法来源:王娟娟.基于SNMP的网络拓扑发现算法研究.武汉科技大学硕士学位论文,2008
  (1)根据本机IP地址和Mask确定探测的节点范围,然后向这些节点用异步的方式发送ICMP回应请求包来确定活动主机。
  (2)确定交换机之间的连接:可以通过PING子网内所有的交换机,依次获取每个交换机的地址转发表及其本身的MAC地址,根据定义2判定每个交换机的上行端口、下行端口和本地端口,根据定理1找出交换机之间的连接关系。
  (3)确定交换机与主机的连接:对于本地端口集合,检查其每个端口的转发表,如果某个端口的地址转发表包含路由器的MAC地址,则此本地端口与对应的路由器相连;如果某个端口的地址转发表中包括某个主机的MAC地址,则此本地端口与对应的主机直接相连。
 
注:最初完成此文时,表中有误,下一跳网关IP和路由类型两项OID错位。这一点已于10月20日修复。

作者:五岳 
出处:http://www.cnblogs.com/wuyuegb2312 
对于标题未标注为“转载”的文章均为原创,其版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

基于SNMP的路由拓扑发现算法收集的更多相关文章

  1. 基于大规模语料的新词发现算法【转自matix67】

    最近需要对商品中的特有的词识别,因此需新词发现算法,matrix的这篇算法很好. 对中文资料进行自然语言处理时,我们会遇到很多其他语言不会有的困难,例如分词——汉语的词与词之间没有空格,那计算机怎么才 ...

  2. 模块度与Louvain社区发现算法

    Louvain算法是基于模块度的社区发现算法,该算法在效率和效果上都表现较好,并且能够发现层次性的社区结构,其优化目标是最大化整个社区网络的模块度. 模块度(Modularity) 模块度是评估一个社 ...

  3. 社区发现算法 - Fast Unfolding(Louvian)算法初探

    1. 社团划分 0x1:社区是什么 在社交网络中,用户相当于每一个点,用户之间通过互相的关注关系构成了整个网络的结构. 在这样的网络中,有的用户之间的连接较为紧密,有的用户之间的连接关系较为稀疏.其中 ...

  4. 基于RYU的拓扑发现

    基于RYU的拓扑发现 前言 本次实验是一个基于RYU的拓扑发现功能.参考了呈神的实现方式,并加了一些自己实现方式,做了一些数据结构的改动. 数据结构 link_to_port 字典 有两种关系: 一是 ...

  5. 基于DFA敏感词查询的算法简析

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中需要对敏感词做一个过滤,首先有几个方案可以选择: a.直 ...

  6. SNMP 原理及配置简述 net-snmp-utils net-snmp 第2版基于SNMP 群体名(community name) 第3版引入了安全性更高的访问控制方法 SNMP协议操作只有4种 Apache的php_snmp 模块

    SNMP 原理及配置简述  net-snmp-utils  net-snmp 第2版基于SNMP 群体名(community name) 第3版引入了安全性更高的访问控制方法 SNMP协议操作只有4种 ...

  7. 基于SNMP的交换机入侵的内网渗透

    前言:局域网在管理中常常使用SNMP协议来进行设备的管理和监控,而SNMP的弱点也成为了我们此次渗透的关键. 使用SNMP管理设备只需要一个community string,而这个所谓的密码经常采用默 ...

  8. SVD++:推荐系统的基于矩阵分解的协同过滤算法的提高

    1.背景知识 在讲SVD++之前,我还是想先回到基于物品相似的协同过滤算法.这个算法基本思想是找出一个用户有过正反馈的物品的相似的物品来给其作为推荐.其公式为:

  9. 社区发现算法问题&&NetworkX&&Gephi

    在做东西的时候用到了社区发现,因此了解了一下有关社区发现的一些问题 1,社区发现算法 (1)SCAN:一种基于密度的社团发现算法 Paper: <SCAN: A Structural Clust ...

随机推荐

  1. 顺序栈的c++实现及利用其实现括号的匹配

    #include<iostream>#include<cassert>#include<cstring>#include<string>using na ...

  2. php 简单说明IoC (php 实例+注释)

    简单说明IoC <?php //Ioc ———— 设计方式 //控制反转 Inversion of Control //依赖关系的转移 //依赖抽象而非实践 //用于解决高层应用依赖 底层组件, ...

  3. BZOJ 1014: [JSOI2008]火星人prefix

    Sol Splay+Hash+二分答案. 用Splay维护Hash,二分答案判断. 复杂度 \(O(nlog^2n)\) PS:这题调了两个晚上因为没开long long.许久不写数据结构题感觉写完整 ...

  4. Python读取中文txt文件错误:UnicodeEncodeError: 'gbk' codec can't encode character

    with open(file,'r') as f: line=f.readline() i=1 while line: line=line.decode('utf-8') line=f.readlin ...

  5. java servlet的工作原理

    servlet本质上就是java类嘛.不过是有特殊规范的java类而已.下面就说一说为什么servlet要有特殊规范. 首先,考虑一下什么地方用servlet,WEB应用,而且是需要servlet容器 ...

  6. C++拷贝构造函数(深拷贝,浅拷贝)

    对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.下面看一个类对象拷贝的简单例子. #i ...

  7. 《oracle每天一练》触发器不能调用或间接调用COMMIT,ROLLBACK等DCL语句

    触发器不能调用或间接调用COMMIT,ROLLBACK等DCL语句 在触发器中不能运行 ddl语句和commit,rollback语句 ddl语句:DDL语句用语定义和管理数据库中的对象,如Creat ...

  8. 一步步教你Hadoop多节点集群安装配置

    1.集群部署介绍 1.1 Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台.以Hadoop分布式文件系统HDFS(Hadoop Distributed Filesys ...

  9. appium + python 环境搭建

    所需:JDK.Android SDK.Appium服务程序.Appium客户端程序 1. 安装最新的JDK,并配置环境变量. JAVA_HOME=C:\Program Files (x86)\Java ...

  10. java web 学习 --第四天(Java三级考试)

    第三天的学习内容:http://www.cnblogs.com/tobecrazy/p/3453041.html jsp内置对象 out out 属性类型:JspWriter 作用域:page 作用: ...