Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 MAC 주소 추출하기: uuid 모듈 활용법 총정리

MAC 주소는 하드웨어 주소로, PC에 설치된 네트워크 카드에 고유하게 할당되는 식별자입니다. MAC 주소는 항상 유일하며, 따라서 동일한 로컬 네트워크 내에서 두 대의 장치가 같은 MAC 주소를 가질 수 없습니다.

MAC 주소의 핵심 목적은 로컬 영역 네트워크(LAN) 또는 기타 네트워크상의 모든 노드에 고유한 하드웨어 주소, 즉 물리적 주소를 부여하는 것입니다. 여기서 노드(node)란 컴퓨터나 프린터, 라우터 같은 장치가 네트워크에 연결되어 있는 지점을 의미합니다.

이 글에서는 Python을 이용해 MAC 주소를 추출하는 세 가지 방법을 소개합니다.

방법 1: uuid.getnode() 사용

가장 간단한 방법은 uuid 모듈에 정의된 getnode() 함수를 사용하는 것입니다. 이 함수는 컴퓨터의 MAC 주소를 추출하여 반환합니다.

예제 코드

import uuid
print(hex(uuid.getnode()))

실행 결과

0x242ac110002L

hex() 함수를 함께 사용하면 MAC 주소가 16진수 형태로 출력됩니다.

방법 2: getnode() + format() 조합 (가독성 향상)

16진수 값만으로는 MAC 주소의 표준 형식을 파악하기 어렵습니다. format() 함수를 활용하면 일반적으로 사용되는 콜론(:)으로 구분된 형식으로 깔끔하게 출력할 수 있습니다.

예제 코드

import uuid

# getnode() 값을 2자리씩 나누어 콜론으로 연결
print("포맷팅된 MAC 주소 : ", end="")
print(':'.join(['{:02x}'.format((uuid.getnode() >> elements) & 0xff)
for elements in range(0, 2*6, 2)][::-1]))

실행 결과

포맷팅된 MAC 주소 : 3e:f8:e2:8b:2c:b3

이 코드는 비트 시프트와 비트 마스킹( 0xff)을 통해 48비트 MAC 주소를 2자리씩 분리하고, 역순으로 정렬한 뒤 콜론으로 연결합니다.

방법 3: getnode() + findall() + re() 조합 (복잡도 감소)

정규표현식(regex)을 사용하면 코드를 더욱 간결하게 작성할 수 있습니다. re 모듈의 findall() 함수를 활용하면 복잡한 비트 연산 없이도 동일한 결과를 얻을 수 있습니다.

예제 코드

import re, uuid

# 정규표현식으로 2자리씩 잘라내어 콜론으로 연결
print("간결하게 포맷팅된 MAC 주소 : ", end="")
print(':'.join(re.findall('..', '%012x' % uuid.getnode())))

실행 결과

간결하게 포맷팅된 MAC 주소 : 18:5e:0f:d4:f8:b3

'%012x'는 값을 12자리 16진수 문자열로 변환하며, findall('..', ...)은 해당 문자열을 2글자 단위로 잘라 리스트로 반환합니다. 이후 join()으로 콜론을 사이에 두고 연결하면 표준 MAC 주소 형식이 완성됩니다.

마무리

세 가지 방법 모두 uuid.getnode()를 기반으로 하지만, 출력 형식과 코드 복잡도에서 차이가 있습니다. 빠른 확인에는 방법 1을, 가독성이 중요한 경우 방법 2나 3을 선택하는 것이 좋습니다. 실무에서는 정규표현식을 활용한 방법 3이 가장 간결하고 유지보수하기 쉬운 코드로 평가됩니다.