一、三层(网络层)发现

算法来源:王娟娟.基于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. Android坐标系统

     1 背景 去年有很多人私信告诉我让说说自定义控件,其实通观网络上的很多博客都在讲各种自定义控件,但是大多数都是授之以鱼,却很少有较为系统性授之于渔的文章,同时由于自己也迟迟没有时间规划这一系列文章, ...

  2. java代码和spring框架读取xml和properties文件

    1.java文件读取properties文件 Properties props = new Properties(); try { //资源文件存放在类文件的根目录下.即是放在src下面.则不需要写路 ...

  3. (原创)android中使用相机的两种方式

    在社交类应用或扫描二维码的场合都需要用到手机上的摄像头 在程序中启用这一硬件主要有两类方法 1.发送intent启动系统自带的摄像应用 此应用的AndroidManifest中的intent-filt ...

  4. SVN迁移到Git的过程(+ 一些技巧)

    SVN迁移到Git的过程(+ 一些技巧) 李顺利 Key Words SVN,Git,Clone,Conversion,Tips,VCS,Pro Git 关于在VCS中SVN和Git之间的迁移(Clo ...

  5. phpcms二层栏目下拉和当前栏目高亮

    这里需要嵌套loop标签,既双层循环 第一层loop的catid = 0代表顶级栏目 第二层loop的catid = "$r[catid]"代表上层循环的栏目id <ul c ...

  6. Android蓝牙连接以及数据接收发送

    1.加入权限 <uses-feature android:name="android.hardware.bluetooth_le" android:required=&quo ...

  7. HTML 返回顶部的样式

    .fhdb{ width:50px; height:50px; position:fixed;   //可以用来定义元素的固定定位. right:20px;      //距离右侧20像素 botto ...

  8. 【leetcode】Unique Binary Search Trees

    Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) that st ...

  9. 【leetcode】Reverse Linked List II

    Reverse Linked List II Reverse a linked list from position m to n. Do it in-place and in one-pass. F ...

  10. 关于fill_parent,match_parent和wrap_content (转载)

    fill_parent&match_parent: 在Android2.2及以上版本中,fill_parent与match_parent意思相同(其中fill_parent兼容低版本).都是尽 ...