【发布时间】:2020-12-04 03:15:37
【问题描述】:
使用 SNMP,如何获取连接到交换机上每个端口的设备的 MAC 地址?我们正在使用 HP ProCurve 开关。
我尝试使用 OID dot1dTpFdbPort,但这似乎给了我与交换机通信的每个设备的 MAC 地址,而不仅仅是连接到它。
我正在尝试在列表中找到可以为我提供端口 1-48 的 OID,以及每个端口连接到该端口的设备的 MAC(或 IP 地址)。
谢谢!
【问题讨论】:
标签: snmp
使用 SNMP,如何获取连接到交换机上每个端口的设备的 MAC 地址?我们正在使用 HP ProCurve 开关。
我尝试使用 OID dot1dTpFdbPort,但这似乎给了我与交换机通信的每个设备的 MAC 地址,而不仅仅是连接到它。
我正在尝试在列表中找到可以为我提供端口 1-48 的 OID,以及每个端口连接到该端口的设备的 MAC(或 IP 地址)。
谢谢!
【问题讨论】:
标签: snmp
非常感谢 raz3r 的回答。 它就像一个魅力!
从你的 linux 服务器:
$ snmpwalk -v 1 -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 -v 1 -c public xxx.xxx.xxx.xxx 1.3.6.1.2.1.17.4.3.1.1 | grep "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 来执行此操作...
【讨论】:
您几乎就在那里 :) 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
【讨论】:
尝试使用 HEX 直接获取 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
示例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}'
【讨论】: