ネットワークアダプタの永続(内蔵)MACアドレスを読み取る必要があります。 MACアドレスは簡単になりすます可能性があるため、EEPROMに書き込まれた物理アドレスを読み取る必要があります。 LinuxではC ++を使用して実行する必要があります。
使ってみようイーサネットツールこれは非常に素晴らしいとうまく動作します。ただし、一部のシステムでは期待どおりに動作しません。
ethtool -P eth0
次を返します。
Permanent address: 00:00:00:00:00:00
そして
ethtool -e eth0
次を返します。
Cannot get EEPROM data: Operation not supported
ネットワークアダプタには次の情報があります。
- ドライバー:ucc_geth
- バージョン: 1.1
- ファームウェアバージョン:該当なし
- バス情報:QUICCエンジン
Linuxカーネルのバージョンは2.6.32.13です。
問題は、アップデート(ドライバ、カーネルなど)でこの問題を解決できるかどうかです。
ioctl
また、C ++の関数を使用して同じethtool呼び出しを実行します。コードでこの問題を解決する方法はありますか?それともEEPROMから永続MACアドレスを取得する別の方法はありますか?
ベストアンサー1
ローカルコンピュータがなりすましできないと信頼する場合ifconfig
と両方のip addr
ハードウェアのMACアドレスを提供します。
ローカルシステムを信頼しない場合、ethtool、ifconfig、またはipのいずれも必要な情報を提供しません。 MACスプーフィングには非常に正当な理由(Ethernetカードの熱障害など)があるため、すべてのドライバは現在「仮想」MACアドレスのみを報告します。一部のツールでは、そのアドレスをなりすましが必要な場合は機能しないためです。悪い報告ファームウェアアドレス、他の人はソフトアドレスを報告します。いかなる ioctl もハードアドレスを提供できない、または提供しないでください。
ハードアドレスを取得するにはデバイスレジスタを直接読み取る必要があるため、デバイスごとに異なります。
早く見てくださいucc_geth.cドライバこれは、チップ自体がMACアドレスの再割り当てをサポートしていることを示しているようです(イーサネットからソフトアドレスに送信されたパケットを抽出できる必要があるため意味があります)。これは、ドライバーが寛大に言ったハードアドレスを得るために非常に注意する必要があることを意味します。
/* For more details see the hardware spec. */