UniFi - BSSID 에서 MAC 매핑¶
download at 2017-03-29T10:57:56Z origin
Overview
아 문서는 기본 서비스 셋 식별자 (BSSID)와 radio MAC 주소 사이의 로직에 대하여 서술합니다.
Notes & Requirements
- 사용가능한 펌웨어 버전: UAP Firmware 3.7.37+
- 적용 가능한 장비 모델: Gen1, Gen2, Gen 3 UAPs (브로드컴 모델은 제외) UAP 세대가 궁금하다면 이 문서 를 참조하십시오
Table of Contents
Introduction
액세스 포인트는 레이어 2 통신에서 각기 다른 인터페이스와 하기 위해 다수의 MAC 주소를 사용합니다. 무선 인터페이스의 MAC 주소는 BSSID라고 정의합니다. 무선 액세스 포인트는 동적으로 BSSID를 생성하고 다른 SSID와 다른 숫자를 갖습니다. 일반적으로 각 radio와 네트워크 인터페이스는 공장에서 출하 될 당시 AP에 프로그램된 고유 MAC 주소를 가지고 있습니다. 소프트웨어는 기본 MAC 주소에서 BSSID를 다음 로직을 통해서 추출합니다:
- SSID를 기본 하드웨어 radio MAC 으로 사용
- 모든 하부 SSID(로컬 관리 MAC 주소)는 U/L 비트(첫번째 옥텟 비트 1)를 1로 세팅합니다. 부가적으로 첫번째 옥텟의 4bit를 증가합니다. (SSID index - 2)
예를 들어서 AP의 MAC 주소가 80:2a:a8:17:74:b5 이고 4 개의 SSID가 있다면 다음과 같이 매핑합니다.:
SSID1 -> 80:2a:a8:17:74:b5
SSID2 -> 82:2a:a8:17:74:b5
SSID3 -> 92:2a:a8:17:74:b5
SSID4 -> a2:2a:a8:17:74:b5
MAC 주소(80:2a:a8:17:74:b5)가 radio의 MAC으로 브로드 캐스팅 하지만 유선 이더넷 포트의 MAC 주소와는 대응되지않습니다. 이더넷 포트는 보통 가까이 존재하기에 수정한 옥텟으로 정의하지 않습니다.
샘플 코드
다음 파이썬 코드는 BSSID를 radio MAC 주소로 매핑하는 코드입니다:
def get_mac(_bssid):
macbytes = [int(i, 16) for i in _bssid.strip().split(":")]
UBNT_OUIs = [
[ 0x00, 0x15, 0x6d ]
,[ 0x00, 0x27, 0x22 ]
,[ 0x04, 0x18, 0xd6 ]
,[ 0x24, 0xa4, 0x3c ]
,[ 0x44, 0xd9, 0xe7 ]
,[ 0x68, 0x72, 0x51 ]
,[ 0x78, 0x8a, 0x20 ]
,[ 0x80, 0x2a, 0xa8 ]
,[ 0xb4, 0xfb, 0xe4 ]
,[ 0xdc, 0x9f, 0xdb ]
,[ 0xf0, 0x9f, 0xc2 ]
,[ 0xfc, 0xec, 0xda ]
]
for oui in UBNT_OUIs:
if (macbytes[1]==oui[1] and macbytes[2]==oui[2]):
macbytes[0] = oui[0]
return ":".join(["{:02x}".format(i) for i in macbytes])
관련 문서