我创建了一个脚本来将一堆计算机主机名设置为 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