DELL交换机6248端口和使用SNMP的mac映射

我有一个戴尔6248交换机。 我连接了一些我的服务器,并想知道哪个服务器NIC连接到哪个交换机端口。 我尝试使用snmpwalk来获取这些信息,但是我只能从交换机获取我的服务器nic的mac / ip映射,我仍然无法获得它连接的交换机端口。

我尝试了一个名为托pipe交换机端口映射工具的工具,它可以显示哪个交换机端口连接到哪个nic / ip。 我使用WireShare获取所有的snmp数据包,但仍然无法find什么是snmp的oid来获取这些信息。

任何人都知道如何得到这个?

您必须通过BRIDGE-MIB和IF-MIB进行一些跟踪。

(注意:我没有特定的交换机型号进行testing,但是这些都是标准的MIB,所以这应该可以工作。)

使用来自BRIDGE-MIB的dot1dTpFdbAddress (.1.3.6.1.2.1.17.4.3.1.1)来查找MAC地址(为清楚起见,示例显示了一行snmpwalk输出,可能会返回几行):

>snmpwalk -v 2c -c public myswitch .1.3.6.1.2.1.17.4.3.1.1 SNMPv2-SMI::mib-2.17.4.3.1.1.0.20.124.62.198.161 = Hex-STRING: 00 14 7C 3E C6 A1 

拿这些数字跟在基本的OID之后(看例子,我正在谈论0.20.124.62.198.161)。 使用它们来查找也来自BRIDGE-MIB的dot1dTpFdbPort (.1.3.6.1.2.1.17.4.3.1.2)的值:

 >snmpwalk -v 2c -c public myswitch .1.3.6.1.2.1.17.4.3.1.2 SNMPv2-SMI::mib-2.17.4.3.1.2.0.20.124.62.198.161 = INTEGER: 794 

从dot1dTpFdbPort(示例中的794)中取整数值,并使用它们再次从BRIDGE-MIB中查找dot1dBasePortIfIndex (.1.3.6.1.2.1.17.1.4.1.2)的值:

 >snmpwalk -v 2c -c public myswitch .1.3.6.1.2.1.17.1.4.1.2 SNMPv2-SMI::mib-2.17.1.4.1.2.794 = INTEGER: 200 

这个值是你的ifIndex(在这个例子中是200)。 使用它从IF-MIB中取出ifName (.1.3.6.1.2.1.31.1.1.1.1) 以外的人性化的值:

 >snmpwalk -v 2c -c public myswitch .1.3.6.1.2.1.31.1.1.1.1 IF-MIB::ifName.200 = STRING: 4/20 

如果您的目标是找出哪些主机连接到哪个端口,为什么不login交换机pipe理界面(web或cli)并查看地址表,这将显示哪些MAC地址连接到哪个端口。

PHP代码,会给你你想要的:

 <?php $_snmp_ip = <ip>; $_snmp_com = <community>; $_dot1dTpFdbAddress = snmp2_real_walk($_snmp_ip, $_snmp_com, ".1.3.6.1.2.1.17.4.3.1.1.0"); foreach($_dot1dTpFdbAddress as $_dot1dTpFdbAddress_key => $_dot1dTpFdbAddress_value) { preg_match("/(\.[\d]*){6}$/i", $_dot1dTpFdbAddress_key, $_dot1dTpFdbAddress_key_unique); preg_match("/([0-9A-F ]*){6}$/i", $_dot1dTpFdbAddress_value, $_dot1dTpFdbAddress_value_unique); $_dot1dTpFdbPort = snmp2_get($_snmp_ip, $_snmp_com, ".1.3.6.1.2.1.17.4.3.1.2".$_dot1dTpFdbAddress_key_unique['0']); preg_match("/[\d]*$/i", $_dot1dTpFdbPort, $_dot1dTpFdbPort); $_dot1dBasePortIfIndex = snmp2_get($_snmp_ip, $_snmp_com, ".1.3.6.1.2.1.17.1.4.1.2.".$_dot1dTpFdbPort['0']); preg_match("/[\d]*$/i", $_dot1dBasePortIfIndex, $_dot1dBasePortIfIndex); $_ifName = snmp2_get($_snmp_ip, $_snmp_com, ".1.3.6.1.2.1.31.1.1.1.1.".$_dot1dBasePortIfIndex['0']); preg_match("/\"([^\"]*)\"$/i", $_ifName, $_ifName); $mac = str_replace(" ", ":", strtolower($_dot1dTpFdbAddress_value_unique['0'])); $mac = ereg_replace("(^:|:$)","", $mac); $_mac[$mac] = $_ifName['1']; } print_r($_mac); ?>