While troubleshooting a wireless issue, I mentioned offhand to another engineer that a particular MAC address was private. They immediately asked me “How did you know just by looking at it?”
I said “Look at the second least significant bit of the most significant byte,” but quickly realized that needed a bit more explanation.
“Private” MAC addresses, at least as implemented by Apple and Android, sets the locally-administered bit for their randomized addresses. RFC7042 section 2.1 specifies the “Local bit”:
The Local bit is zero for globally unique EUI-48 identifiers assigned by the owner of an OUI or owner of a longer prefix. If the Local bit is a one, the identifier has been considered by IEEE 802 to be a local identifier under the control of the local network administrator […]
This is the 02
bit of the first octet in the MAC. If it is set, this
is a locally-administered address. Essentially, if the second hex digit
is 2
, 6
, A
, or E
, it is a private MAC.
- x2:xx:xx:xx:xx:xx
- x6:xx:xx:xx:xx:xx
- xA:xx:xx:xx:xx:xx
- xE:xx:xx:xx:xx:xx
What about MAC addresses with the next bit set, such as when the first
octet is 03
or 07
? Those still have the local bit set. Yes,
but the 01
bit is the unicast/multicast bit (individual/group, I/G
bit). We seldom see use of locally-administered multicast
layer 2 addresses, so can be ignored for the purposes of “private MAC
addresses”.