ネットワーク内のすべての 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 で 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

関連情報