Linux

有沒有辦法查詢網路中的所有mac地址?

  • March 3, 2015

我知道這個問題被標記為“離題”和“非專業”,但是在創建網關或 IDS 時,這可能非常相關。此外,Google發現沒有任何可用的……

每個普通交換機中都有一個叫做 MAC-table(或 CAM-table)的東西(根據這篇文章:https ://en.wikipedia.org/wiki/CAM_Table )

如果交換機確切地知道到 MAC 地址的路由,並在每個埠上通告它們(似乎合乎邏輯)……

  • 假設一個 Linux 機器,是否可以在指定介面上查詢網路中的每個MAC 地址?

公平地說,每個人都說“arp -a”,但我對這個答案並不滿意,因為它只顯示已知的MAC 地址(及其相應的 IP)。

要列出埠上的所有地址,您需要更改目前的網路配置。我們將使用 bridge-utils 包,但任何其他網橋實現(例如:OpenvSwitch)都可以做到這一點。以下描述適用於基於 Debian 的系統:

  1. 首先你應該安裝 bridge-utils 包。
  2. 使用 ifdown 設置選定的埠
  3. 在要列出 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 上使用,或者只是重新啟動。

  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

為此,我通常在系統上安裝arpalert。它是一個守護程序,使用 libcap 監視流量。它為每個介面保留一個 MAC 地址數據庫。它還可以監視一些不尋常類型的事件並發送通知。它會跟踪上次使用情況,並且會在重新啟動後保留數據庫(與僅設置網橋介面相比)。

引用自:https://serverfault.com/questions/672812