获取VLAN分配端口的SNMP OID及VLAN接口关联物理接口方法咨询
嘿,我来帮你梳理一下这两个问题的具体解决办法:
一、获取已分配给VLAN的端口的SNMP OID
最常用的是Q-BRIDGE-MIB里的两个标准OID,几乎所有支持SNMP的交换机都兼容:
dot1qVlanCurrentEgressPorts(OID:1.3.6.1.2.1.17.7.1.4.2.1.4):返回该VLAN下所有Tagged端口的位图数据dot1qVlanCurrentUntaggedPorts(OID:1.3.6.1.2.1.17.7.1.4.2.1.5):返回该VLAN下所有Untagged端口的位图数据
如果设备不支持Q-BRIDGE-MIB,也可以尝试BRIDGE-MIB的dot1dBasePortIfIndex(OID:1.3.6.1.2.1.17.1.4.1.2),不过这个需要结合VLAN转发数据库做关联,步骤更繁琐,优先推荐Q-BRIDGE方案。
二、根据VLAN接口索引查询对应的物理接口
你给出的例子IF-MIB::ifDescr.952 = STRING: Vlan-interface310里,VLAN接口的ifIndex是952,对应的VLAN ID是310,按照以下步骤操作即可:
确认VLAN ID:
从接口描述Vlan-interface310能直接提取出VLAN ID是310;如果不确定,也可以用Q-BRIDGE-MIB::dot1qVlanStaticName(OID:1.3.6.1.2.1.17.7.1.4.3.1.1),遍历这个OID找到名称匹配的条目,对应的索引就是VLAN ID。查询该VLAN的端口位图:
调用前面提到的Q-BRIDGE-MIB的OID,查询dot1qVlanCurrentEgressPorts.310和dot1qVlanCurrentUntaggedPorts.310,会得到类似0x00000030这样的十六进制位图结果。位图转物理接口:
把十六进制转换成二进制,每一位对应一个dot1dBasePort(从0开始计数),比如0x00000030转二进制是110000,第4、5位为1,对应的dot1dBasePort就是4和5。
再用dot1dBasePortIfIndex(OID:1.3.6.1.2.1.17.1.4.1.2)把dot1dBasePort转换成IF-MIB的ifIndex,最后通过IF-MIB::ifDescr就能拿到对应的物理接口名称了。
补充:部分厂商有私有MIB可以直接关联VLAN和端口(比如华为的HUAWEI-VLAN-MIB::hwVlanPortTable),但标准Q-BRIDGE-MIB是跨厂商通用的稳妥方案。
内容的提问来源于stack exchange,提问作者敬荣翟

