私は基本的なソフトウェアライセンス機能を持ついくつかのCコードを書いています。ここで実行ファイルは、Cコードにホワイトリストに追加したシステムのMACアドレスでのみ実行されます。私はそれがLinuxで動作することを願っています。
/sys/class/net/eth0/address
1行にa0:b1:c2:d3:e4:f5
すべて小文字のエントリにアクセスしているので、MACアドレスを非常に簡単に取得できます。これは私がeth0
ハードコーディングした後にのみ機能します。fopen( "/sys/class/net/eth0/address", "r" );
私が気づいた問題はイーサネット0部分。 BiosDevNameおよび/または予測可能なネットワークインターフェイスの命名が[RHEL / CentOS 7で]デフォルトになり、MACアドレスを持つ最初のネットワークデバイスの代わりにeno1
似ています。eth0
状況はシステムによって大きく異なる場合があります。だから私はそれを扱っています/sys/class/net/<unknown>/address
。
LinuxシステムのMACアドレスを取得する最も移植可能で信頼性が高く簡単な方法は何ですか?私が扱うサーバーには通常4ポートのIntel NICがありますが、実際には最初のNICだけが必要です。私のコードは、ネットワークインターフェイス名が何であるかを問わず、MACアドレスが存在することを知っているだけです。
ベストアンサー1
システムのMACアドレスを抽出してインターフェースに関連付けるだけで、このBashを実行してCプログラムに提供できます。を見ると、/sys/class/net/*/
ファイルにインターフェイス名が含まれており、uevent
ファイルにMACアドレスが含まれていることがわかりますaddress
。したがって、インターフェイスに基づいて2つのファイルを結合できます。注:私のbashは最もきれいではありません。おそらくこれを行うより良い方法があります。
[user@headdesk eth0]$ cat /sys/class/net/*/uevent /sys/class/net/*/address | grep -v IFINDEX | column | sed 's/INTERFACE=//'
eth0 fa:16:3e:ac:48:74
lo 00:00:00:00:00:00