我知道这个问题被标记为“离题”和“非专业”,但在创建网关或 IDS 时,这可能相当相关。此外,Google 找不到任何可用的东西……
每个常见的交换机中都有一个称为 MAC 表 (或 CAM 表) 的东西(根据这篇文章:https://en.wikipedia.org/wiki/CAM_Table)
如果交换机确切知道到 MAC 地址的路由,并在每个端口上通告它们(似乎合乎逻辑)...
- 假设有一台 Linux 机器,是否可以查询每一个网络中指定接口的 MAC 地址?
答案1
我一般安装阿帕勒特为此目的,在系统上安装一个。它是一个守护进程,使用 libcap 来监视流量。它保存每个接口的 mac 地址数据库。它还可以监视一些异常类型的事件并发送通知。它会跟踪上次使用情况,并在重新启动后保留数据库(与仅设置桥接接口相比)。
答案2
公平地说,每个人都说“arp -a”,但我对这个答案并不满意,因为它只显示了已知MAC 地址(及其对应的 IP)。
列表全部端口上的地址,您需要更改当前的网络配置。我们将使用 bridge-utils 包,但任何其他桥接实现(例如:OpenvSwitch)都可以做到这一点。以下描述适用于基于 Debian 的系统:
- 首先,您应该安装 bridge-utils 包。
- 使用 ifdown 将选定的端口关闭
- 在要列出 MAC 地址的端口上创建网桥
假设端口为 eth0,IP 地址是动态的。在 /etc/network/interfaces 中应出现以下内容
allow-hotplug eth0
iface eth0 inet manual
auto br0
iface br0 inet dhcp
bridge-ports eth0
bridge_fd 0
bridge_stp off
要应用这些更改,您可以在 eth0 上使用 ifup,然后在 br0 上使用 ifup,或者简单地重新启动。
- 现在你可以使用 brctl 来查询端口
它将列出完整的 MAC 表:
root@debian:~# brctl showmacs br0
输出应如下所示:
port no mac addr is local? ageing timer
1 ab:cd:ef:01:02:03 no 1.72
1 ab:cd:ef:01:02:04 no 25.52
1 ab:cd:ef:01:02:05 no 2.64
1 ab:cd:ef:01:02:06 no 10.67
1 ab:cd:ef:01:02:07 yes 0.00