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



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

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

我试图在列表中找到将给我端口1-48的OID,以及每个端口连接到该端口的设备的MAC(或IP地址)。

谢谢!

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

从您的linux服务器:

$snmpwalk-v 1-c public xxx.xxx.xxx.xxx 1.3.6.1.2.1.17.4.3.1.2 | grep"INTEGER:11"

(端口号11)

将返回:

SNMPv2 SMI::mib-2.117.4.3.1.2.44.118.138.64.143.95=整数:11
SNMPv2 SMI::mib-2.117.4.3.1.2.56.170.60.108.174.57=整数:11
SNMPv2 SMI::mib-2.117.4.3.1.2.104.181.153.172.54.237=整数:11
SNMPv2 SMI::mib-2.117.4.3.1.2.120.172.192.143.226.236=整数:11
SNMPv2 SMI::mib-2.117.4.3.1.2.124.195.161.20.109.76=整数:11
SNMPv2 SMI::mib-2.117.4.3.1.2.152.7525.59.127.180=整数:11

然后你可以这样做来找到连接的Mac地址:

$snmpwalk-v 1-c公共xxx.xxx.xxx.xxx 1.3.6.1.2.1.17.4.3.1.1|grep"152.75.259.127.180"

返回mac地址:

SNMPv2 SMI::mib-2.117.4.3.1.1.152.75.225.59.127.180=十六进制字符串:984B E1 3B 7F B4

你可以做一个脚本.sh来做这个。。。

您几乎做到了:)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

尝试将MAC地址直接用HEX:表示

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

示例dot1dBasePort表检索:

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
#!/bin/bash
# This should iterate thru each active port. 
HOST=xxx.xxx.xxx.xxx ## Change this to the ip address of the switch
echo
snmpwalk -v 1 -c public "$HOST" 1.3.6.1.2.1.17.4.3.1.1 | grep "$" |awk -- '{print $4":"$5":"$6":"$7":"$8":"$9}'

最新更新