在FreeBSD中,如果IP设备所在的接口恰好是物理网卡,那么我可以使用查找物理网卡的接口arp -a
。
但是,如果它是在桥接或其他逻辑接口上,那么从已知设备的IP地址到接口的最简单方法是什么?我可以从ARP获得其逻辑接口,但它只显示ARP中的桥接接口,而不是实际的外部接口。
我想要识别的是代表IP正在使用的真实外部NIC的接口,因此我可以连接/断开正确的线路,错误检查相应的网络交换机等等。为简单起见,假设没有多路径,聚合/失败转移连接或防火墙问题,并且我可以将外部NIC与其驱动程序(em,re等)区分开来
我怎么能得到它?
例子:
- (最常见的情况)系统有
em0
,em1
,em2
,em3
和他们进行桥接由bridge0
具有指定的IP地址。我将一台笔记本电脑插入一个连接到emo
- 中的一个的开关em3
。当我使用时,arp -a
我得到了设备 - 但它列出了接口bridge0
,这在逻辑上是正确的,但在物理上无益。 - (不常见的情况)笔记本电脑通过VPN连接到连接到桥接的交换机。列出的实际接口是VPN的接口,而不是网桥或交换机的NIC。
- (到目前为止不常见的情况)设备配置错误,静态IP与接口子网不匹配。也许它正在发送和接收广播,如果是这样我们就会收到广播。它没有ARP条目,因为ARP
who-has
是在接口上为预期的非实际子网发送的。但它会who-has
通过正确的NIC 响应具有静态IP或ARP的数据包。
注 - 还有其他情况(VPN等),其中可能存在多层堆叠的逻辑接口,直到一个层到达所使用的实际物理接口。所以问题通常是关于检测具有非物理接口的设备并递归到代表它所连接的物理NIC的底层接口。