在网络准备好之前获取 MAC 地址

在网络准备好之前获取 MAC 地址

我创建了一个脚本来将一堆计算机主机名设置为 MAC 地址的最后 8 位数字。 MAC 地址是每台计算机中内置的唯一编号,因此效果良好。

我创建了一个 systemd 服务,它在网络启动之前设置启动时的主机名(因此网络使用这个新主机名):

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

然而,这样做的一个不幸的副作用是,在网络以我当前读取 MAC 地址的方式启动之前,MAC 地址为空。所以这是一个catch 22的情况,我需要在网络之前获取MAC地址,并且只能在网络启动后才能获取MAC地址。我想既然MAC地址是固定的,那么在网络通电之前就可以读取到它吗?

我正在使用Pythonfrom getmac import get_mac_address,但也可以使用 shell 脚本。有没有办法在网络建立之前读取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

相关内容