基于SNMP的cisco网络环境中设备定位

背景知识:
    1.三层设备的arp表存储IP和MAC的对应关系。
               2.二层设备的转发桥接表中存储MAC和转发端口对应关系。
               3.CDP(Cisco Discovery Protocol)是思科设备之间发现相邻设备的链路层协议。
               4.三层交换机的二层模块中的转发表以cam表实现,如 show cam dynamic
5.在划分VLAN 的情况下,思科设备上转发表内容要根据Community String Indexing 方法获取。
1.根据IP地址得到所对应的MAC地址:

通过查看系统的ARP缓存表可以找出某IP所对应的MAC,查找ipNetToMediaPhyAddress(OID: 1.3.6.1.2.1.4.22.1),可以得到如下结果,例:
OID: 1.3.6.1.2.1.4.22.1.2.8.127.0.0.2 type: snmp.SNMPOctetString value:   (hex: 00 06 28 67 05 00 )

OID: 1.3.6.1.2.1.4.22.1.2.10.10.1.3.1 type: snmp.SNMPOctetString value:   (hex: 00 02 b9 b2 4c 0a )

OID: 1.3.6.1.2.1.4.22.1.2.10.10.1.3.4 type: snmp.SNMPOctetString value:   (hex: 00 08 74 9c bd a7 )

OID: 1.3.6.1.2.1.4.22.1.2.10.10.1.3.5 type: snmp.SNMPOctetString value:   (hex: 00 e0 4c 10 3a d7 )

OID: 1.3.6.1.2.1.4.22.1.2.10.10.1.3.34 type: snmp.SNMPOctetString value:   (hex: 00 0a e6 64 10 4b )

OID: 1.3.6.1.2.1.4.22.1.2.10.10.1.3.38 type: snmp.SNMPOctetString value:   (hex: 00 e0 4c 3c 11 02 )

OID: 1.3.6.1.2.1.4.22.1.2.10.10.1.3.75 type: snmp.SNMPOctetString value:   (hex: 00 50 22 88 29 f2 )

OID: 1.3.6.1.2.1.4.22.1.2.10.10.1.3.82 type: snmp.SNMPOctetString value:   (hex: 00 d0 f8 0c bc b8 )

可以看到ipNetToMediaPhyAddress.10.10.1.3.4这样一个oid,这里紧跟在ipNetToMediaPhyAddress后面的10是指10.1.3.4的转发端口索引。这样就可以根据这一项得出10.1.3.4的MAC地址是00:08:9c:bd:a7。

 

2.查找该三层设备MIB表中的cdpCacheAddress(OID: 1.3.6.1.4.1.9.9.23.1.2.1.1.4),如下表示:

OID: 1.3.6.1.4.1.9.9.23.1.2.1.1.4.10.145 type: snmp.SNMPOctetString value: c_ (hex: c0 a8 63 02 )

这里c0 a8 63 02 是IP地址的16进制表示,转成十进制是192.168.99.2。三层设备的IP是192.168.99.1。这个IP地址的表示类型可以根据cdpCacheAddressType确定。CdpCacheAddress后面的10是指ifIndex。

3查找192.168.99.2上面的桥接表。先要得到该设备上的vlan列表,查找vtpVlanIfIndex(OID: 1.3.6.1.4.1.9.9.46.1.3.1.1.18),例如:

OID: 1.3.6.1.4.1.9.9.46.1.3.1.1.18.1.1 type: snmp.SNMPInteger value: 6

OID: 1.3.6.1.4.1.9.9.46.1.3.1.1.18.1.2 type: snmp.SNMPInteger value: 17

OID: 1.3.6.1.4.1.9.9.46.1.3.1.1.18.1.3 type: snmp.SNMPInteger value: 18

OID 部分最后一位是指vlan号,OID值是指IfIndex。可以从中得到该设备上的所有vlan号。

4.查找桥接转发表。查找dot1dTpFdbAddress(OID:1.3.6.1.2.1.17.4.3.1.1),在这里,需要用到Community String Indexing,思科设备的转发表对每个vlan是不一样的。这时候共同体名为community@vlank号,如:public@1,public@2,public@3等,默认情况下取来的是public@1地的转发表。此时需在对每个vlan的转发表进行查找,直到找到10.1.3.4的mac地址,例如:

OID: 1.3.6.1.2.1.17.4.3.1.1.0.2.253.21.123.10 type: snmp.SNMPOctetString value:   (hex: 00 02 fd 15 7b 0a )

OID: 1.3.6.1.2.1.17.4.3.1.1.0.5.59.18.64.136 type: snmp.SNMPOctetString value:   (hex: 00 05 3b 12 40 88 )

OID: 1.3.6.1.2.1.17.4.3.1.1.0.5.59.18.65.215 type: snmp.SNMPOctetString value:   (hex: 00 05 3b 12 41 d7 )

OID: 1.3.6.1.2.1.17.4.3.1.1.0.5.59.18.110.148 type: snmp.SNMPOctetString value:   (hex: 00 05 3b 12 6e 94 )

OID: 1.3.6.1.2.1.17.4.3.1.1.0.8.116.156.189.167 type: snmp.SNMPOctetString value:   (hex: 00 08 74 9c bd a7 )

跟在dot1dTpFdbAddress后面的是mac地址的十进制表示,查到mac地址所在行后,再查找dot1dTpFdbPort(OID: 1.3.6.1.2.1.17.4.3.1.2),例如:

OID: 1.3.6.1.2.1.17.4.3.1.2.0.2.185.178.76.10 type: snmp.SNMPInteger value: 833

OID: 1.3.6.1.2.1.17.4.3.1.2.0.2.253.21.123.10 type: snmp.SNMPInteger value: 2

OID: 1.3.6.1.2.1.17.4.3.1.2.0.5.59.18.64.136 type: snmp.SNMPInteger value: 2

OID: 1.3.6.1.2.1.17.4.3.1.2.0.8.116.156.189.167 type: SNMP.SNMPInteger value: 2

这里是dot1dTpFdbPort加上由上所得到的mac地址的十进制查找到桥接端口,再根据这个端口查到其端口索引,查找dot1dBasePortIfIndex(OID:1.3.6.1.2.1.17.4.1.2),例如:

OID: 1.3.6.1.2.1.17.1.4.1.2.1 type: snmp.SNMPInteger value: 4

OID: 1.3.6.1.2.1.17.1.4.1.2.2 type: snmp.SNMPInteger value: 5

OID: 1.3.6.1.2.1.17.1.4.1.2.65 type: snmp.SNMPInteger value: 11

OID: 1.3.6.1.2.1.17.1.4.1.2.66 type: snmp.SNMPInteger value: 12

OID: 1.3.6.1.2.1.17.1.4.1.2.67 type: snmp.SNMPInteger value: 13

从上面可以看出,桥接端口对应的端口索引IfIndex是5。根据这个端口可以很容易得到端口名,端口描述等。
5.根据CDP得到指定端口索引下连的交换机IP。

2中和方法,cdpCacheAddress加上端口索引可以得到下接的网络设备。如果没找到下端网络设备,那么下接的可能就已经是所要查的主机,也有可能是不支持CDP协议的设备,定位互此终止。如果能够得到下连设备的IP地址,那么可以根据此IP重复3以下的查找过程,直到找不到下连设备。这里还可以从cdpCacheDevicePort中得到下连设备连接该设备的端口。有利于形成完整的链接关系

posted on 2010-05-16 12:04  二地主  阅读(814)  评论(0编辑  收藏  举报