システムのMACアドレスを取得します。eth0およびPredictableNetworkInterfaceNames

システムのMACアドレスを取得します。eth0およびPredictableNetworkInterfaceNames

私は基本的なソフトウェアライセンス機能を持ついくつかのCコードを書いています。ここで実行ファイルは、Cコードにホワイトリストに追加したシステムのMACアドレスでのみ実行されます。私はそれがLinuxで動作することを願っています。

/sys/class/net/eth0/address1行に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

おすすめ記事