为什么在所有 arp 表 snmp oids 中的 ip 号之前都有一个接口索引?

网络工程 路由器 第 2 层 ARP 第 3 层 snmp
2022-02-21 14:41:48

当我想获取有关单个 ip 号或子网的 arp 信息时,我必须 snmpwalk 整个 arp 表,因为一些 oid 架构师有一个“好”的想法,即始终在 oid 中的 ip 号之前插入接口索引。.1.3.6.1.2.1.3.1.1.2.(接口).(ip) , .1.3.6.1.2.1.4.22.1.2.(接口).(ip) , .1.3.6.1.2.1.4.35.1.4.(接口).1.4.(IP)。还是我错过了什么?

3个回答

ARP 实际上是每个接口。一个路由器的每个接口都有不同的网络,ARP只与IP地址的网络(接口)有关。有些操作系统实际上有多个 ARP 表,在列出设备的 ARP 时,您似乎只将其视为一个表,但实际上每个接口都有不同的表。

例如,在 Cisco 路由器上,您可以使用show arp将列出所有 ARP 表的所有 ARP 条目的命令,或者您可以使用show arp <interface>orshow arp <network>命令显示其中一个接口的单个​​ ARP 表。

通过使用 SNMP 的接口索引,您可以看到接口的 ARP 表。

甚至可以通过命令获取特定ip的arp

Show ip arp | i 192.168.X.X在少数思科高端交换机中,例如 neXus 6k、9k 和 Catalyst 第 3 层交换机。

在 windows pcarp -a命令用于获取与连接网络的整个 arp 表关联

与此同时,我找到了解决方案。问题是,先验地只知道目标 IP,而不知道接口索引,因此无法为一个 arp 条目构造必要的 oid .1.3.6.1.2.1.4.22.1.2.interface.ip1.ip2.ip3.ip4,但是由于想要向网关询问此 arp 条目,无论如何都必须猜测网关 IP(可能类似于 ip1.ip2.ip3.1),因此可以通过 oid 找到接口索引 -1.3.6.1.2.1.4.20.1.2.ip1.ip2.ip3.1终于有了一点 bash 魔法 snmpbulkwalk -c public -v 2c -OnQx ip1.ip2.ip3.1 .1.3.6.1.2.1.4.22.1.2.$(snmpget -c public -v 2c -Oqv ip1.ip2.ip3.1 .1.3.6.1.2.1.4.20.1.2.ip1.ip2.ip3.1 | tr -d "\n").ip1.ip2.ip3.ip4