有沒有辦法查詢一個網路中所有的mac位址?

有沒有辦法查詢一個網路中所有的mac位址?

我知道這個問題被標記為“離題”和“非專業”,但是在創建網關或 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 的系統:

  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

相關內容