여러 컴퓨터 호스트 이름을 MAC 주소의 마지막 8자리로 설정하는 스크립트를 만들었습니다. MAC 주소는 모든 컴퓨터에 내장된 고유 번호이므로 잘 작동합니다.
네트워크가 시작되기 전에 시작 시 호스트 이름을 설정하는 systemd 서비스를 만들었습니다(따라서 네트워크는 이 새 호스트 이름을 사용합니다).
# .service file
Before=network.target NetworkManager.service dhcpcd.service
그러나 불행한 부작용은 현재 MAC 주소를 읽는 방식으로 네트워크가 작동할 때까지 MAC 주소가 비어 있다는 것입니다. 따라서 이것은 캐치 22 상황입니다. 네트워크가 시작되기 전에 MAC 주소를 얻어야 하고, 네트워크가 가동된 후에만 MAC 주소를 얻을 수 있습니다. MAC 주소가 고정되어 있어서 네트워크 전원을 켜기 전에도 읽을 수 있지 않을까요?
저는 파이썬을 사용하고 있어요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