ifconfig eth0 hw ether 00:11:22:33:44:55
or 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_talk
(man rnetlink
ここで関連)。このコールを実行するプログラムを作成すると、システムコールが発生し、MACアドレスが更新されます。しかし、その時も同じことをするでしょうip link set
。