有没有办法查询networking中的所有MAC地址?

我知道这个问题被标记为“脱离主题”和“非专业”,但是在创build网关或IDS时,这可能是相当有意义的。 另外,谷歌发现没有用的…

在每个普通的交换机中都有一个叫MAC-table(或CAM-table)的东西(根据这篇文章: https : //en.wikipedia.org/wiki/CAM_Table )

如果交换机完全知道到MAC地址的路由,并在每个端口上广播它们(似乎是逻辑上的)…

  • 假设一个Linux机器,是否可以在指定的接口上查询networking中的每个 MAC地址?

为了这个目的,我通常在系统上安装arpalert 。 这是一个守护进程,使用libcap来观看stream量。 它保持每个接口的mac地址数据库。 它也可以观察一些不寻常的事件types并发送通知。 它跟踪最后一次使用情况,并将重新启动数据库(相比之下,build立一个桥接接口)。

公平的说,每个人都说“arp -a”,但是我不满意这个答案,因为它只显示已知的 MAC地址(及其对应的IP)。

要列出端口上的所有地址,您需要更改当前的networkingconfiguration。 我们将使用bridge-utils软件包,但是任何其他的桥接器实现(例如:OpenvSwitch)都可以做到这一点。 以下说明适用于基于Debian的系统:

  1. 首先你应该安装bridge-utils软件包。
  2. 使用ifdown设置所选的端口
  3. 在要列出MAC地址的端口上创build一个网桥

假设端口是eth0,IP地址是dynamic的。 在/ 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,或者直接重新启动。

  1. 现在可以使用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