基于SNMP的网络拓扑发现技术研究(2)
作者:佚名; 更新时间:2016-01-20
该组包含两个对象护umber和Viable。其中,ifNumber对象表示该设备所具有的接口数量。该组的另一个元素ifT'able是一张表,表内的每一个字段都是某一个接口的一个属性,包括接口索引(ifindex),接口类型(ifType),接口速度(peed)和接口物理地址(ifPhysAddress)等。
(3) IP组
该组的元素较多,其中有三个表对拓扑发现来说比较重要,分别是ipAddrTable ,ipRouteTable和ipNetToMediaTable。
通过表ipAddrTable,可以找到被管设备所有的IP地址,同时结合interfaces组的ifTable表,可以把接口和其IP地址一一对应起来。
网络层的拓扑发现算法主要就是利用表ipRouteTable来判断网络层的拓扑结构的。子网与路由器以及路由器和路由器的关系都能从路由表中得出来。该表中对应拓扑发现的对象列举如下:
IpRouteDest:路由的目的地址。如为0.0.0.0,说明该路由为缺省路由。通往同一个目的地的路由可能有多个,路由的选择依赖于所使用的路由协议。
IpRouteNextHop:路由的下一跳路由器地址。
ipRouteMask:路由目的地的子网掩码。提取1P数据包中的目的地地址,与ipRouteMask进行按位“与”运算,得到的结果与ipRouteDest比较,如相同则应选择该路由。如果ipRouteDest为0.0.0.0,则规定ipRouteMask也为0.0.0.0 。
ipRouteType:路由的类型,为整型类型。其意义如表1所示:
表1 ipRouteType值机其意义
ipRouteType值 | 意义 |
Other(1) | 其他 |
Invalid(2) | 非法 |
Direct(3) | 该路由目的地址为路由器直接连接的子网 |
Indirect(4) | 远程路由,目的地址为远程的主机、网络或子网 |
2.2基于SNMP的网络层对象发现
(1)默认网关的发现
首先,访问拓扑发现程序所在计算机的SNMP MIBII中的ipRouteTable,如果发现有ipRouteDest值为0.0.0.0的记录,则说明程序所在的计算机设置了默认网关,该记录的ipRouteNextHop值即为默认网关的地址。
检查默认网关的ipForwarding值。如果为1,则表明该默认网关确实是路由设备,否则不是。
(2)子网的发现
遍历路由器MIBII的IP管理组中管理对象ipRouteDest下的所有对象,以每个路由目的网络号为索引,查询ipRouteType字段的值。若该值为3 (direct),则表明这条路由为直接路由,若该值为4 (indirect),则为间接路由。间接路由表明在通往目的网络或目的主机的路径上还要经过其它路由器,而直接路由表明目的网络或目的主机与该路由设备直接相连,这样就得到了与路由器直接相连的网络号。
再以这组网络号中的每个为索引,查询其路由掩码(ipRouteMask )。根据路由掩码,就可以确定这组网络中每一个的IP地址范围【4】。
例如,已知路由器的IP地址为192. 168. 4. 1,且路由器支持SNMP协议。利用SNMP协议可以得到以下与路由器直接相连的子网,如表2所示。
表2 与路由器相连的子网
网络号 | 网络掩码 | 地址范围 |
159.226.204.128 | 255.255.255.192 | 159.226.204.129~192 |
192.168.0.0 | 255.255.255.0 | 192.168.0.1~255 |
192.168.4.0 | 255.255.254.0 | 192.168.4.1~192.168.5.255 |
192.168..6.0 | 255.255.255.0 | 192.168.6.1~255 |
192.168.7.0 | 255.255.255.0 | 192.168.7.1~255 |
(3)其他路由设备的发现
对于除了默认网关之外的路由设备,查询默认网关MIBII的IP管理组路由表中类型为间接路由的路由表项,得到路由的下一跳地址(ipRouteNextHop )。下一跳地址给出了与该网关相连的路由设备,仍可以利用上面的方法搜索这个设备的路由表。这样,该方法可以搜索出多个路由设备,并要求将它们所存储的路由表信息进行整合,得到更大的网络拓扑。
(4)网络层的连接对象
网络层拓扑主要反映子网和路由器之间的连接关系。子网和路由器的连接关系可以在发现与路由器直接相连的子网时得到,路由器和路由器的连接关系可以通过路由表中的ipRouteNextHop得到。
2.3 基于SNMP的网络层拓扑友现算法描述
网络层拓扑发现算法用伪代码描述如下:
CGateway gw=GetDefaultGateway();//得到默认网关
热门论文