Key word : switch IP IP地址 对应端口 snmp cisco 交换机

 

前言

日常维护中经常需要查找某一IP地址对应的交换机端口。能够提供该功能的软件有限,而且针对性不强。而通过telnet或ssh登录交换机,然后查询端口的方式,存在安全问题和权限分配问题。本文提供一种思路,使用snmp获取IP地址对应的交换机端口,并使用php实现自动化及一些附加功能。

 

通过telnet或ssh终端查询IP地址对应交换机端口的方法

      日常工作中,网管人员有时需要查询IP地址对应的交换机端口,以两层网络结构为例(核心三层,桌面二层),一般的方法是:

1、telnet或ssh登录三层交换机或防火墙。

2、通过查询arp表,找到对应IP的mac地址->通过mac地址找到该mac是从哪个三层交换机端口学到的->然后查看该端口的cdp信息->查到二层交换机管理IP->登录该二层交换机->通过mac地址查到该mac是从哪个二层交换机端口学到的->获得目的端口

      该方法在使用交换机控制台命令查询时相对简单,只需几条命令即可获得所需信息。但其他们有权限的维护人员就无法操作了。

 

通过snmp获取IP地址对应的二层交换机端口的过程。

环境描述:

核心交换机:两台Cisco 6509 + FWSM 通过HSRP热备,核心交换机IP分别为192.168.8.1和192.168.8.2

二层交换机:Cisco 3560 PoE 每台3560通过两条光纤分别上联到两台6509,交换机管理IP为192.168.8.214

命令行操作系统:Linux AS4

snmp工具:net-snmp

查询条件:设要查询的IP地址为192.168.100.8/32

1、首先要获得目的IP地址对应的MAC地址,该步骤分为以下子步骤:

1.1 获得目标IP网段的ipAdEntIfIndex值(参考:http://tools.cisco.com/Support/SNMP/do/BrowseOID.do?objectInput=.1.3.6.1.2.1.4.20.1.2&translate=Translate&submitValue=SUBMIT&submitClicked=true)

snmpwalk -c public -v 2c 192.168.8.1 .1.3.6.1.2.1.4.20.1.2 -On

 

在输出中有:

.1.3.6.1.2.1.4.20.1.2.192.168.100.229 = INTEGER: 166

表示192.168.100网段对应的ipAdEntIfIndex值为166

 

1.2 根据ipAdEntIfIndex查询目标IP所属的ifName即VLan ID(参考:http://tools.cisco.com/Support/SNMP/do/BrowseOID.do?objectInput=.1.3.6.1.2.1.31.1.1.1.1+&translate=Translate&submitValue=SUBMIT&submitClicked=true)

 

snmpwalk -c public -v 2c 192.168.8.1 .1.3.6.1.2.1.31.1.1.1.1 -On

 

在输出中有:

.1.3.6.1.2.1.31.1.1.1.1.166 = STRING: Vl11

表示ipAdEntIfIndex值为166的端口的ifName为Vl11,即VLan ID为11

 

 

 

1.3 根据ipAdEntIfIndex和目的IP地址查询获得目的IP地址的MAC(参考:http://tools.cisco.com/Support/SNMP/do/BrowseOID.do?objectInput=1.3.6.1.2.1.3.1.1.2&translate=Translate&submitValue=SUBMIT&submitClicked=true)

 

snmpwalk -c public -v 2c 192.168.8.1 .1.3.6.1.2.1.3.1.1.2.166.1.192.168.100.8

在输出中有:

.1.3.6.1.2.1.3.1.1.2.166.1.192.168.100.8 = Hex-STRING: 00 11 BC 69 94 00

由此,获得目的IP地址的MAC地址:192.168.100.8 -> 00 11 BC 69 94 00

 

2、根据MAC地址获得三层交换机的物理端口号

2.1 根据MAC查询dot1dTpFdbPort(参考:http://tools.cisco.com/Support/SNMP/do/BrowseOID.do?objectInput=.1.3.6.1.2.1.17.4.3.1.2&translate=Translate&submitValue=SUBMIT&submitClicked=true)

 

snmpwalk -c public@11 -v 2c 192.168.8.1 .1.3.6.1.2.1.17.4.3.1.2.0.21.96.180.229.94

 

在输出中有:

.1.3.6.1.2.1.17.4.3.1.2.0.21.96.180.229.94 = INTEGER: 407

即dot1dTpFdbPort值为407

命令行中的参数@11表示要查询的VLan ID为11,0.21.96.180.229.94 为目标IP的MAC地址各段转换为十进制的值

如果此步查出的值大于1000(本例环境中为1000),则表明该MAC地址是由PO从接口由另一台6509学到,需要修改查询参数再次查询

例如:

.1.3.6.1.2.1.17.4.3.1.2.0.21.96.180.229.94 = INTEGER: 1666

则修改查询为

snmpwalk -c public@11 -v 2c 192.168.8.2 .1.3.6.1.2.1.17.4.3.1.2.0.21.96.180.229.94

本命令行查询结果影响到后边的查询,务必查询正确

 

 

2.2 根据dot1dTpFdbPort的值查询dot1dBasePortIfIndex的值(参考:http://tools.cisco.com/Support/SNMP/do/BrowseOID.do?objectInput=.1.3.6.1.2.1.17.1.4.1.2&translate=Translate&submitValue=SUBMIT&submitClicked=true)

 

snmpwalk -c public@11 -v 2c 192.168.8.1 .1.3.6.1.2.1.17.1.4.1.2.407

 

在输出中有:

.1.3.6.1.2.1.17.1.4.1.2.407 = INTEGER: 85

即dot1dBasePortIfIndex的值为85

 

 

 

 

 

2.3 根据dot1dBasePortIfIndex查询ifName的值(参考:http://tools.cisco.com/Support/SNMP/do/BrowseOID.do?objectInput=.1.3.6.1.2.1.31.1.1.1.1&translate=Translate&submitValue=SUBMIT&submitClicked=true)

 

snmpwalk -c public@11

 

 

在输出中有:

.1.3.6.1.2.1.31.1.1.1.1.85 = STRING: Gi4/23

即ifName的值为Gi4/23,也就是三层交换机上的Gi4/23口

 

 

 

 

 

3、根据三层交换机的接口信息查询与之互连的二层交换机的IP

3.1 根据dot1dBasePortIfIndex查询cdpCacheAddress的值(参考:http://tools.cisco.com/Support/SNMP/do/BrowseOID.do?objectInput=.1.3.6.1.4.1.9.9.23.1.2.1.1.4&translate=Translate&submitValue=SUBMIT&submitClicked=true)

 

snmpwalk -c public -v 2c 192.168.8.1 .1.3.6.1.4.1.9.9.23.1.2.1.1.4.85 -On

 

在输出中有:

.1.3.6.1.4.1.9.9.23.1.2.1.1.4.85.366 = Hex-STRING: C0 A8 08 D6

即cdpCacheAddress的值为C0 A8 08 D6,转换为十进制就是192.168.8.214,此即为二层交换机的管理IP地址

 

 

3.2 根据目的IP的MAC地址查询对应的二层交换机物理接口号

snmpwalk -c public@11 -v 2c  192.168.8.214 .1.3.6.1.2.1.17.4.3.1.2.0.21.96.180.229.94
 
.1.3.6.1.2.1.17.4.3.1.2.0.21.96.180.229.94 = INTEGER: 16
 
snmpwalk -c public@11 -v 2c 192.168.8.214.1.3.6.1.2.1.17.1.4.1.2.16
.1.3.6.1.2.1.17.1.4.1.2.16 = INTEGER: 10014
snmpwalk -c public@11 -v 2c  192.168.8.214 .1.3.6.1.2.1.31.1.1.1.1.10014
 
.1.3.6.1.2.1.31.1.1.1.1.10014 = STRING: Fa0/14

 

由此可得目的IP对应的二层交换机物理端口号为Fa0/14

最终,根据目的IP地址,获得了其所在的二层交换机管理IP为192.168.8.214,端口号为Fa0/14

根据上面的snmp命令及返回结果,编写php,能够在页面中实时查询IP地址所对应的二层交换机及物理端口,下图为一个简单的查询页面及查询结果。请各位同学给提些建议或点评吧,谢谢!