使用 SNMP 检索直接连接到交换机的机器的 MAC 地址

网络工程 转变 snmp MAC地址
2021-07-08 06:12:01

我想获取使用 SNMP直接连接到交换机的机器的 MAC 地址我正在为此查询dot1qTpFdbPort但这会返回交换机学习的所有 MAC 地址,其中包括未物理连接到此交换机但由交换机学习的机器。

如何仅获取物理连接到交换机端口的那些机器的 MAC 地址?

我的目标是找出所有物理连接到交换机的机器。

我使用的是非 cisco 交换机。但我想为所有盒子实现一个通用方法。

 [root@dani ~]# snmpwalk  -c public -v 2c 192.168.48.1 **sysDescr**
 SNMPv2-MIB::sysDescr.0 = STRING: **3Com Baseline Switch 2928-SFP Plus**
 Software Version 5.20 Release 1101P10
3个回答

交换机无法确定插入特定端口的设备是“终端主机”还是具有许多终端主机的第二个交换机。您可以猜测,如果在单个端口上获知多个 MAC 地址,则该端口连接到另一个交换机。但这让您容易错误地识别与另一台交换机的连接,而该连接后面只有一个其他主机作为主机(而不是实际的交换机)。

您必须依赖交换机上的一些额外配置,以确定端口是否连接到终端主机,如果是,则提取该接口的 MAC 地址表。

例如,如果您拉出所有接口的列表,并确定其中哪些被标记为“Portfast”(或“边缘”端口,对于非 Cisco 设备)。几乎可以保证该特定接口连接到终端主机(差不多,请参阅 MikePennington 和其他人的以下评论),然后当您提取完整的 MAC 地址表时,对其进行过滤以仅将数据“存储”在portfast/边缘端口。

此信息非常过时。

https://supportforums.cisco.com/discussion/10356006/lldp-info-snmp

快速搜索在 Cisco SNMP Object Navigator 中发现了一个 LLDP-MIB。上面的链接让我怀疑哪些开关(如果有的话)实际上支持这个对象。也许值得一看...它可能只获取您的本地交换机信息,而不是邻居信息。您可以通过使用 SNMP 确定端口是否处于中继模式并将其与每个接口学习到的 MAC 地址的数量相结合来提高您的几率,从而像上述其他海报一样进行猜测。

http://tools.cisco.com/Support/SNMP/do/BrowseMIB.do?local=en&step=2&mibName=LLDP-MIB

交换机只知道 MAC 地址在哪个端口后面。不是它与具有该 MAC 地址的主机之间是否还有其他交换机。

您可以将收集到的端口/mac 数据过滤到 MAC 地址计数低于阈值的端口。这种方法的缺点是某些 MAC 可能根本不会出现在您的数据中(例如某人桌面上的非托管交换机,导致一台主机具有多个 MAC 的 VM 设置)或可能出现不止一次(如果交换机后面的所有设备小于您的阈值)。

一种更微妙的方法是从所有交换机收集 MAC/端口数据,以生成每个交换机端口后面的 MAC 地址列表。然后查找包含每个 MAC 地址的最短列表。这将代表离设备最近的交换机端口(有时,如果交换机只有一个端口在使用,您可能会得到重复,但手动解决这些问题应该不会太难)。如果您发现许多 MAC 具有相同的最近交换机端口,您可能需要找人调查其末尾的内容。