物理ネットワークアドレスを確実に検出

物理ネットワークアドレスを確実に検出

特定のホストに接続されているすべてのネットワークカード/インターフェイスの物理(MACとも呼ばれる)アドレスを一覧表示する方法を見つけようとしています。問題は、私がこの機能を非常に異なるハードウェアを使用するさまざまなボックスに接続されているDebian Live(圧着)USBイメージに使用したいということです。したがって、たとえば、ワイヤレスドライバをUSBスティックに常に使用できるわけではありませんifconfig

私は問題のインターフェイス名がどこにあるかを問い合わせることで/sys/class/net/*/addressこれを達成できるという印象を受けました。*しかし、これは本当ではありません。デバイスドライバをインストールせずにハードウェアの物理アドレスを照会する方法があると思います。

だから私の質問は次のようになります

  1. デバイスドライバがインストールされていない場合でも、ネットワークデバイスの物理アドレスを問い合わせることは実際に可能ですか?
  2. できればどうですか?

答え1

これは信頼できる方法で達成することは不可能です。ネットワークカードには起動にドライバのサポートが必要な場合があり、注入されたファームウェアが必要なため、物理アドレスのクエリに応答できます。

ほとんどすべての有線インタフェースは標準のDebianカーネルでサポートされています(少なくともサポートされていない有線インタフェースはわかりません。非常にシンプルで標準的です)。ワイヤレスインターフェイスははるかに複雑で、すべてのインターフェイスがサポートされるわけではありません。時々、デフォルトではDebianインストールにパッケージされていない独自のファームウェアが必要です。

編集する

技術的な詳細に興味がある人のために、Linuxカーネルが特定のインターフェイスのMACアドレスをどのように知っているかを見つけました。各ネットワークドライバには、その構造にnetdeviceドライバに登録されるフィールドがあります。このフィールドは、デバイスをカーネルに登録する前にドライバによって入力されなければなりません。詳細については、以下を参照してくださいlinux/netdevice.hLinuxデバイスドライバ、第3版、Jonathan Corbet、Greg Kroah-HartmanおよびAlessandro Rubiniオーサリング、セクション17.3(http://makelinux.net/ldd3/)。

関連情報