接続されているが、ラベルが付いていない、構成されていない、構成できないイーサネット デバイスの MAC アドレスを取得しますか?

接続されているが、ラベルが付いていない、構成されていない、構成できないイーサネット デバイスの MAC アドレスを取得しますか?

ノートパソコンのイーサネット ポートにイーサネットが接続された組み込みボードがあるとします。そのネットワーク構成については (まだ) 何も知りません。起動することはわかっていますが、ヘッドレスで、イーサネット ポートしかありません。IP アドレスはまだありません。

デバイスの MAC アドレスをどのように検出しますか?

arp、arping、arp-scan、arpwatch を調べました。私が見つけた唯一の方法は、tshark を使用して、吐き出されたものを手動で調べることです。

答え1

プレーンtsharkまたはを実行するとtcpdump、マシンから発信されるすべてのトラフィックもログに記録されるため、乱雑な出力が生成されます。

試す

tcpdump -i eth0 -lenq 'ether src not <your_mac>'
  • -eイーサネットフレームもキャプチャする
  • -lstdout バッファを直ちにフラッシュします。
  • -nホスト名を解決しない
  • -qもっと静かにしてください。
  • <your_mac>たとえば、次のようにして見つかったローカル インターフェイスの MAC アドレスに置き換えますip addr show
  • 当然、eth0正しいインターフェースに置き換えてください。Windows の場合は、 を使用してtshark -Dすべてのインターフェースを一覧表示します。
  • (編集)Linux では、パッケージ全体のインストールが必要な のtcpdumpインストールの代わりに を使用できます。は Ubuntu にプリインストールされているはずです (メタパッケージ内にあります)。tsharkwiresharktcpdumpubuntu-standard

代替:送信元MACアドレスを出力のみにしたい場合は、(以下のOPのコメントに触発され、恥ずかしげもなく改変しました)

ETH=eth0;MAC=$(cat /sys/class/net/$ETH/address); tcpdump -lenq -i $ETH "ether src not $MAC" | awk '{print $2}'

リンクなしでキャプチャを開始し、その後ケーブルを接続するのが最適です。

トラフィックをスニッフィングする方法はないと思います。ARP が失敗する理由は、デバイスに IP アドレスがなく、ARP 要求に応答しないからです。

別の解決策としては、デバイスを管理対象スイッチに接続し、MAC アドレス テーブルを読み取ることが考えられますが、これは選択肢ではないと思います。

いずれにせよ、検出可能にするには、デバイスは送信する必要がありますいくつかのイーサネット トラフィックの一種です。運が良ければ、スニッフィング可能な DHCP/Bootp 検出が送信されます。

(編集)ホストはなぜスイッチのように MAC テーブルを保持しないのでしょうか? ホストはスイッチではないので、その必要はありません。スイッチとは異なり、どのインターフェイスがイーサネット フレームを送信するかは、ルーティング テーブルに従って事前に決定されます。IP パケットは、ARP ルックアップ後に適切なフレームにラップされます。

もちろん、マシンを適切な L2 スイッチに変えることができます。複数の物理インターフェイス間にブリッジを作成することもできます。私はこれを少しいじってみましたが、その方法で優れた MAC テーブルを取得できることが分かりました。

  1. bridge-utilsリポジトリからインストールします。

  2. 新しいイーサネットブリッジを作成する/etc/network/interfaces

     auto br0
     iface br0 inet static # dhcp goes as well
      address ...
      network ...
      bridge_ports eth0
      up /sbin/brctl setageing br0 300
      up /sbin/brctl stp br0 0
    

これは、スパニングツリーのない「ブリッジ」を定義します (実際にはブリッジはなく、インターフェイスは 1 つだけです) stp br0 off。アドレスは 300 秒後に期限切れになります。好みに合わせて設定しますが、あまり低くしすぎないようにしてください。

  1. ブリッジを上げます:ifup br0

  2. 稼働しているかどうかを確認しbrctl show、MAC テーブルを表示します。

     brctl showmacs br0
    
  3. 利益 (?)

答え2

Wireshark を使用してすべてのトラフィックをキャプチャし、bootp でフィルタリングするか、-eオプションを使用して tcpdump でリンク層情報と bootp フィルタを印刷することができます。

http://www.tcpdump.org/tcpdump_man.html

sudo tcpdump -i any port bootps -e

関連情報