web-dev-qa-db-ja.com

現在のホストをプログラムで検出するための最良の方法(ハードウェア機能による)

Linuxがインストールされたハードドライブがあり、さまざまな物理コンピューターから起動したいと思っています。私の質問は、ドライブがどのコンピューターに接続されているかをプログラムで検出できるかどうかです。たとえば、ワークステーションごとにハードウェア情報の一意のハッシュを作成するために、cat /proc/cpuinfoを呼び出し、それをsha256sumにパイプしようとしましたが、/ procのようなリストが常に維持しているとは限らないようです。その方法を使用したとき、ハッシュが変化し続けたため、再起動するたびに同じ情報が表示されます。

これを行う簡単な方法はありますか?

4
pepper

Tom Huntがコメントで示唆したように、ネットワークインターフェイスの1つのMACアドレスを使用します。 MACアドレスは一意です。 (これは、すべてのコンピューターに少なくとも1つのネットワークインターフェイスがあることを前提としていますが、それはもっともらしい前提です。)

複数のインターフェースが存在する可能性があることに注意してください。さまざまなシナリオでのトラブルを避けるために、それらすべてを同じマシンの有効な識別子として扱うことをお勧めします(インターフェイスが異なる順序で検出された場合、インターフェイスに異なる名前が割り当てられる場合があります。一部のインターフェイスは取り外し可能(USBドングルなど)または無効(例:wifiキルスイッチ))。

このコマンドを使用して、現在使用可能なすべてのネットワークインターフェイスのMACアドレスを一覧表示できます(使用されているかどうかは関係ありません)。

ip addr show | awk '$1 == "link/ether" {print $2}'