ネットワークが準備される前にMACアドレスを取得してください

ネットワークが準備される前にMACアドレスを取得してください

複数のコンピュータのホスト名をMACアドレスの最後の8桁に設定するスクリプトを作成しました。 MACアドレスはすべてのコンピュータに組み込まれている一意の番号なので、うまく機能します。

ネットワークが起動する前に、起動時にホスト名を設定するsystemdサービスを作成しました(したがって、ネットワークはこの新しいホスト名を使用します)。

# .service file
Before=network.target NetworkManager.service dhcpcd.service

しかし、残念な副作用は、現在のMACアドレスを読み取るようにネットワークが機能するまで、MACアドレスが空であることです。したがって、これはキャッチ22の状況です。ネットワークが起動する前にMACアドレスを取得する必要があり、ネットワークが起動した後にのみMACアドレスを取得できます。 MACアドレスが固定されているため、ネットワークの電源を入れる前でも読み取れませんか?

私はPythonを使用しています。from getmac import get_mac_addressしかし、シェルスクリプトも使用できます。ネットワークが確立される前にMACアドレスを読み取る方法はありますか?

ベストアンサー1

まあ、私はこれを書き、ネットワークが表示される前に動作するようです(少し荒いですが動作します):

from pathlib import Path

interfaces = ['eth0', 'enp3s0', 'eno1']
for interface in interfaces:
    file = f'/sys/class/net/{interface}/address'
    if not Path(file).exists():
        continue
    with open(file, 'r') as f:
        contents = f.read()
    mac = contents.strip().upper()
    return mac

おすすめ記事