시스템의 MAC 주소를 가져옵니다: eth0 및 PredictableNetworkInterfaceNames

시스템의 MAC 주소를 가져옵니다: eth0 및 PredictableNetworkInterfaceNames

나는 기본 소프트웨어 라이센스 기능을 갖춘 일부 C 코드를 작성했습니다. 여기서 실행 파일은 C 코드에 화이트리스트에 추가한 시스템의 MAC 주소에서만 실행됩니다. 나는 단지 그것이 리눅스에서 작동하기를 바랄 뿐이다.

/sys/class/net/eth0/address한 줄에 a0:b1:c2:d3:e4:f5모두 소문자로 구성된 항목에 액세스하고 있으므로 MAC 주소를 매우 쉽게 얻을 수 있습니다. 이것은 내가 eth0하드코딩한 이후 에만 작동합니다.fopen( "/sys/class/net/eth0/address", "r" );

내가 깨달은 문제는이더넷 0부분. BiosDevName 및/또는 예측 가능한 네트워크 인터페이스 이름 지정이 이제 [RHEL/CentOS 7에서] 기본값이 되면서 MAC 주소가 있는 첫 번째 네트워크 장치 eno1대신 비슷한 것이 보입니다 . eth0상황은 시스템마다 크게 다를 수 있습니다. 그래서 나는 그것을 다루고 있습니다 /sys/class/net/<unknown>/address.

Linux 시스템의 MAC 주소를 얻는 가장 이식 가능하고 안정적이며 쉬운 방법은 무엇입니까? 제가 다루는 서버에는 일반적으로 4포트 Intel NIC가 있지만 실제로는 첫 번째 NIC만 필요합니다. 내 코드는 네트워크 인터페이스 이름이 무엇인지 상관하지 않으며 MAC 주소가 존재한다는 것만 알면 됩니다.

답변1

시스템의 MAC 주소를 추출하고 이를 인터페이스와 연결하기만 하면 이 Bash를 실행하여 C 프로그램에 제공할 수 있습니다. 을 보면 /sys/class/net/*/파일에 인터페이스 이름이 포함되어 있고 uevent파일에 MAC 주소가 포함되어 있음 을 알 수 있습니다 address. 따라서 인터페이스를 기반으로 두 파일을 결합할 수 있습니다. 참고: 내 bash는 가장 예쁘지는 않습니다. 아마도 이 작업을 수행하는 더 좋은 방법이 있을 것입니다.

[user@headdesk eth0]$ cat /sys/class/net/*/uevent /sys/class/net/*/address | grep -v IFINDEX | column | sed 's/INTERFACE=//'
eth0            fa:16:3e:ac:48:74
lo              00:00:00:00:00:00

관련 정보