web-dev-qa-db-ja.com

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

特定のホストに接続されているすべてのネットワークカード/インターフェイスの物理(別名MAC)アドレスを一覧表示する方法を見つけようとしています。問題は、Debianライブ(スクイーズ)USBイメージにこの機能が必要なことです。このUSBイメージは、さまざまなハードウェアを備えたさまざまなボックスに接続されています。そのため、たとえばワイヤレスドライバがUSBスティックで常に利用できるとは限らないため、ifconfigから物理アドレスを取得できません。

/sys/class/net/*/addressにクエリを実行することで、これを実現できるという印象を受けました。ここで、*は問題のインターフェイス名です。しかし、そうではありません。デバイスドライバがインストールされていなくても、ハードウェアに物理アドレスを問い合わせる方法があるはずだと思います。

だから私の質問は:

  1. デバイスドライバがインストールされていなくても、ネットワークデバイスの物理アドレスを照会することは実際に可能ですか?
  2. 可能であれば、どうやって?
2
Joseph R.

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

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

編集

技術的な詳細に興味がある人のために、Linuxカーネルが特定のインターフェースのMACアドレスをどのように知っているかを理解しました。構造体netdeviceには、各ネットワークドライバーが自分自身をドライバーに登録するために使用するフィールドがあります。このフィールドは、デバイスをカーネルに登録する前に、ドライバーが入力する必要があります。詳細については、linux/netdevice.hおよびLinuxデバイスドライバー、第3版、Jonathan Corbet、Greg Kroah-Hartman、およびAlessandroRubiniのセクションを参照してください。 17.3( http://makelinux.net/ldd3/ )。

3
lgeorget