
我知道這個問題被標記為“離題”和“非專業”,但是在創建網關或 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 上使用,或直接重新啟動。
- 現在可以使用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