在 FreeBSD 中,如果 IP 设备所在的接口恰好是物理 NIC,那么我可以使用 查找物理 NIC 的接口arp -a
。
但是,从已知设备的 IP 地址到所连接的接口的最简单方法是什么?如果它位于桥接或其他逻辑接口?我可以从 ARP 中获取它的逻辑接口,但是 ARP 中只显示桥接接口,而不是实际的外部接口。
我想要识别的是代表 IP 正在使用的真实外部 NIC 的接口,这样我就可以连接/断开正确的线路、对适当的网络交换机进行错误检查,或者其他操作。为简单起见,假设没有多路径、聚合/故障转移连接或防火墙问题,并且我可以将外部 NIC 与其驱动程序区分开来(em、re 等)
我怎样才能得到它?
例子:
- (最常见的情况)系统有
em0
、em1
、em2
,em3
它们通过 桥接,bridge0
具有指定的 IP 地址。我将笔记本电脑插入连接到emo
-之一的交换机em3
。当我使用时,arp -a
我得到了设备 - 但它列出了接口,bridge0
这在逻辑上是正确的,但在物理上却没有帮助。 - (不太常见情况)笔记本电脑通过 VPN 连接到与桥接 if 相连的交换机。列出的实际接口是 VPN 的接口,而不是桥接或交换机的 NIC。
- (目前为止不太常见的情况)设备配置错误,静态 IP 与接口子网不匹配。也许它正在发送和接收广播,如果是这样,我们会收到这些广播。它没有 ARP 条目,因为 ARP是在预期子网(而非实际子网)的接口上发送的。但它会通过正确的 NIC
who-has
用其静态 IP 或 ARP 响应数据包。who-has
注意 - 在其他情况下(VPN 等),可能存在多层堆叠逻辑接口,直到到达实际使用的物理接口。因此,问题通常是检测具有非物理接口的设备并递归到代表其所连接的物理 NIC 的底层接口。
答案1
桥接接口的作用类似于交换机,因此它使用所需的任何接口来与它想要的以太网地址通信。例如,如果em0
直接连接到 mac 地址aa.bb.cc.dd.ee.ff
和a1.bb.cc.dd.ee.ff
,而em1
直接连接到 mac 地址aa.cc.bb.dd.ee.ff
和a1.cc.bb.dd.ee.ff
,您已经知道要查找哪个接口。tcpdump
在这种情况下也非常有用,如果您将其传递给-e
交换机,它也会显示以太网地址。其他情况通常可以通过查看路由表并从那里推断出如果不是实际接口,至少是最可能的接口来解决。tcpdump
一次又一次地证明在这种情况下是最好的助手。