サブネットワークインターフェイスのMACアドレスの変更

サブネットワークインターフェイスのMACアドレスの変更

ifconfig eth0 hw ether 00:11:22:33:44:55or etc.コマンドを使用してインターフェイスをオフにして再びオンにすると、ip link set eth0 address 00:11:22:33:44:55ネットワークインターフェイスのMACアドレスを変更できることがわかります。このようなコマンドは、ip link show eth0変更が成功したことを確認します。

しかし、最近このファイルを見つけました/sys/class/net(元のソースは次のとおりです)。これ回答):各ディレクトリは、ドキュメントのインターフェイスに関する情報を含むファイルを含むシンボリックリンクです。ここたとえば、私のコンピュータでは、イーサネットインターフェイスはenp3s0(なぜそれほど奇妙な名前を持っているのかわからない)/sys/class/net/enp3s0に接続されています/sys/devices/pci0000:00/0000:00:1c.2/0000:03:00.0/net/enp3s0

addressこのディレクトリで、インターフェイスのMACアドレスを含むテキストファイルであるファイルが見つかりました。ただし、上記のいずれかのコマンドを使用してアドレスを変更しようとすると、ファイルは変更されていないため、addressこのコマンドは最低レベルのMACアドレスを変更しないようです。また、このファイルを何らかの方法で変更することはできません。スーパーユーザーもこれを行う権限がありません。

今気になります。このレベルでネットワークインターフェイスのMACアドレスを変更できますか?

ベストアンサー1

背景

/procファイル/sysシステムはカーネル構造のビューに過ぎず、両方のファイルシステムがメモリに常駐します。どちらのファイルシステムも書き込み可能ですが、その中にあるファイルの一部は書き込み可能ですが、実際のファイルシステムと同じように機能すると仮定するのは賢明ではありません。

ファイル内に書き込んだり、フックで終わってから関数で呼び出すことが/procできる操作です。/sysたとえば、

# echo 3 > /proc/sys/vm/drop_caches

実際にファイルに書き込むのではなく、ユーザー空間のカーネル関数を呼び出します。

特定の書き込みに対して定義された関数がない場合は、次のようになります。

write error: Input/output error

ファイルに書き込むことは意味がないからです。これは、関連するドライバがないUSBデバイスの文字デバイスに書き込むことと変わりません。カーネルは何をすべきかわかりません。

への書き込みに定義された機能がないため、/sys/class/net/enp3s0/addressこれはこのインターフェイスのMACアドレスを変更する実行可能な方法ではありません。

ifconfig電話なしでMACアドレスを変更できますかip link set

そうそうできます。

コードを見ると、iproute2多くのパラメータ解析と呼ぶrtnl_talk。次のようになります(文書を参照ip/iplink.c)。

/* lot of argument parsing and `req` setting */

if (rtnl_talk(&rth, &req.n, 0, 0, NULL, NULL, NULL) < 0)
        exit(2);

return 0;

req.nここで、MACアドレスがrnetlink関数に渡されますrtnl_talkman rnetlinkここで関連)。このコールを実行するプログラムを作成すると、システムコールが発生し、MACアドレスが更新されます。しかし、その時も同じことをするでしょうip link set

おすすめ記事