如何使用SNMP获取连接到交换机的设备的MAC或IP地址?

如何使用SNMP获取连接到交换机的设备的MAC或IP地址?,snmp,Snmp,使用SNMP,如何获取连接到交换机上每个端口的设备的MAC地址?我们正在使用HP ProCurve交换机 我尝试使用OID dot1dTpFdbPort,但这似乎给了我每个与交换机通信的设备的MAC地址,而不仅仅是连接到交换机的设备 我试图在列表中找到将为我提供端口1-48的OID,对于每个端口,连接到该端口的设备的MAC(或IP地址) 谢谢 你就快到了:)dot1dTpFdbPort正是你想要的,你唯一需要的是一个指向真实端口索引的链接 首先,获取dot1dTpFdbPort给定的值 现在,使

使用SNMP,如何获取连接到交换机上每个端口的设备的MAC地址?我们正在使用HP ProCurve交换机

我尝试使用OID dot1dTpFdbPort,但这似乎给了我每个与交换机通信的设备的MAC地址,而不仅仅是连接到交换机的设备

我试图在列表中找到将为我提供端口1-48的OID,对于每个端口,连接到该端口的设备的MAC(或IP地址)

谢谢

你就快到了:)dot1dTpFdbPort正是你想要的,你唯一需要的是一个指向真实端口索引的链接

首先,获取dot1dTpFdbPort给定的值

现在,使用之前获取的值查询dot1dBasePortIfIndex

让我们举个例子:

snmpwalk -v 2c -c xxx 192.168.x.x 1.3.6.1.2.1.17.4.3.1.1

SNMPv2-SMI::mib-2.17.4.3.1.1.0.2.253.255.213.15 = Hex-STRING: XX XX XX XX XX XX

snmpwalk -v 2c -c xxx 192.168.x.x 1.3.6.1.2.1.17.4.3.1.2

SNMPv2-SMI::mib-2.17.4.3.1.2.0.2.253.255.213.15 = INTEGER: 22

# Notice the 22 :)

snmpwalk -v 2c -c xxx 192.168.x.x 1.3.6.1.2.1.17.1.4.1.2.22

SNMPv2-SMI::mib-2.17.1.4.1.2.22 = INTEGER: 10122

非常感谢你的回答。 它就像一个符咒

从linux服务器:

$snmpwalk-v1-c public xxx.xxx.xxx.xxx 1.3.6.1.2.1.17.4.3.1.2 | grep “整数:11”

(端口号11)

将返回:

SNMPv2 SMI::mib-2.17.4.3.1.2.44.118.138.64.143.95=整数:11
SNMPv2 SMI::mib-2.17.4.3.1.2.56.170.60.108.174.57=整数:11
SNMPv2 SMI::mib-2.17.4.3.1.2.104.181.153.172.54.237=整数:11
SNMPv2 SMI::mib-2.17.4.3.1.2.120.172.192.143.226.236=整数:11
SNMPv2 SMI::mib-2.17.4.3.1.2.124.195.161.20.109.76=整数:11
SNMPv2 SMI::mib-2.17.4.3.1.2.152.75.225.59.127.180=整数:11

然后,您可以执行此操作以查找连接的Mac地址:

$snmpwalk-v1-c公共xxx.xxx.xxx.xxx 1.3.6.1.2.1.17.4.3.1.1| 格雷普“152.75.225.59.127.180”

返回mac地址:

SNMPv2 SMI::mib-2.17.4.3.1.1.152.75.225.59.127.180=十六进制字符串:98 4B E1 3B 7F B4


您可以制作一个script.sh来执行此操作…

尝试将MAC地址直接设置为十六进制:

snmpwalk -OX -v 2c -c public xxx.xxx.xxx.xxx 1.3.6.1.2.1.17.4.3.1.2 

Netsnmp的
snmptable
在这里可能更具可读性

示例
dot1dTpFdb
表格检索:

snmptable  -M +.  -m +ALL -v 2c -c public  -Ci  192.168.x.x    BRIDGE-MIB::dot1dTpFdbTable
   index dot1dTpFdbAddress dot1dTpFdbPort dot1dTpFdbStatus
'..?...'   98:4B:E1:3B:7F:B4           13          learned
// other rows snipped for brevity
snmptable  -M +.  -m +ALL -v 2c -c public  -Ci  192.168.x.x   BRIDGE-MIB::dot1dBasePortTable
 index dot1dBasePort dot1dBasePortIfIndex    dot1dBasePortCircuit dot1dBasePortDelayExceededDiscards dot1dBasePortMtuExceededDiscards
    13            13                10113 SNMPv2-SMI::zeroDotZero                                  0                                0
// other rows snipped for brevity
示例
dot1dBasePort
表格检索:

snmptable  -M +.  -m +ALL -v 2c -c public  -Ci  192.168.x.x    BRIDGE-MIB::dot1dTpFdbTable
   index dot1dTpFdbAddress dot1dTpFdbPort dot1dTpFdbStatus
'..?...'   98:4B:E1:3B:7F:B4           13          learned
// other rows snipped for brevity
snmptable  -M +.  -m +ALL -v 2c -c public  -Ci  192.168.x.x   BRIDGE-MIB::dot1dBasePortTable
 index dot1dBasePort dot1dBasePortIfIndex    dot1dBasePortCircuit dot1dBasePortDelayExceededDiscards dot1dBasePortMtuExceededDiscards
    13            13                10113 SNMPv2-SMI::zeroDotZero                                  0                                0
// other rows snipped for brevity

事实上,第一个查询已经包含MAC地址:“152.75.225.59.127.180”是“98 4B E1 3B 7F B4”的十进制表示形式。您不需要进行第二次snmpwalk,只需要转换它。让我们注意,这不是很有效,因为您需要查看整个表。不幸的是,似乎没有一个表允许直接执行端口->MAC查找。@Marki,我不认为会有这样的事情,因为每个端口可能有多个MAC。这是一个1:N的关系,而MAC:port是1:1。(我自己也经历过这种情况)因此我说可能有一个表(或多个表,每个端口一个)显示这种关系。