MAC address formats
The same six bytes get printed at least four different ways depending on who wrote the firmware. Here are the common forms found in real output, what actually differs between them, and what does not.
Six bytes, twelve hex digits
An Ethernet MAC address is 48 bits: six octets, written as twelve hexadecimal digits. That is the whole of it. Every format below is the same 48 bits with different punctuation, and any tool that tells you two of them are different addresses is wrong.
Globally unique 48-bit MAC identifiers are EUI-48 identifiers assigned under IEEE rules. You will also see MAC-48, an obsolete IEEE term that still turns up in older documentation; locally administered MAC addresses are not globally unique EUI-48 identifiers.
The four notations
Colon-separated 00:00:5e:00:53:01
Common in Linux and other Unix-like tooling. Lowercase is common but not required. This is the form most people picture when they think of a MAC address.
Hyphen-separated 00-00-5E-00-53-01
Common in IEEE documents and Windows tools such as getmac,
arp -a, and ipconfig /all. Case varies and carries no
meaning.
Dotted triplets 0000.5e00.5301
Four hex digits at a time, separated by dots. Cisco's house style, across IOS, IOS XE, and NX-OS. The grouping is purely visual. Each dot falls cleanly between two octets, but the traditional 24-bit vendor boundary falls inside the middle group, so this notation hides the one division that carries meaning.
Bare 00005e005301
No separators at all. Shows up in DHCP logs, RADIUS accounting, and some HPE and Aruba output.
Variants you will also meet
Beyond the four, a handful of real formats turn up often enough to recognize on sight. The same address in each:
| Form | Example | Where you see it |
|---|---|---|
| Hyphenated quads | 0000-5e00-5301 | Huawei, H3C, some HPE platforms |
| Split halves | 00005e-005301 | HPE and Aruba OS-Switch, inherited from ProCurve |
| Space-separated octets | 00 00 5e 00 53 01 | Hex dumps, packet decoders, documentation |
| Cisco DHCP client-ID | 0100.005e.0053.01 | show ip dhcp binding |
| Device-name embedding | SEP00005E005301 | Cisco IP phones; Yealink and others use their own prefixes |
The client-ID is not merely another MAC notation: its leading 01 is ARP hardware type 1, Ethernet,
followed by the six-byte MAC address. Strip that first byte before parsing the address.
The split-halves separator coincides with the 24-bit MA-L/OUI boundary, but it does not mark the assignment boundary for MA-M or MA-S addresses.
Case is never significant
00:00:5e:00:53:01 and 00:00:5E:00:53:01 are the same
address. Hexadecimal case carries no information here and never has.
It matters anyway, in one narrow place: string comparison. If you diff a Cisco inventory against a Windows export, or use a MAC as a dictionary key, or write a firewall rule generator that string-matches, the case difference will cost you an afternoon. Normalize before you compare, not after.
Leading zeros get dropped, and it breaks things
Some ARP implementations, notably macOS, the BSDs, and older Solaris, print each octet without its leading zero:
? (192.168.1.5) at 0:0:5e:0:53:1 on en0 ifscope [ethernet]
That is 00:00:5e:00:53:01. It is six octets, not a truncated address, and a regular expression
expecting pairs of hex digits will not see it at all. This is one of the most common reasons a MAC address in real captured output goes
unparsed.
The first octet carries two flag bits
The two least significant bits of the first octet are the individual/group bit and the universal/local bit. They do not by themselves determine whether the remaining bits have a registry assignment.
The least significant bit is the individual/group bit. When it is 0, the address identifies one
destination, normally called unicast. When it is 1, it identifies a group, normally called
multicast. The all-ones broadcast address, ff:ff:ff:ff:ff:ff, is the special case of a group
address delivered to every station on the segment.
The next bit up is the universal/local bit. When it is 0, the address claims to be universally
administered, which means its prefix is worth looking up. It does not promise the lookup will land: plenty of prefixes have never been
assigned to anyone. When it is 1, the address is locally administered. For individual addresses,
this commonly indicates random or manual assignment, so an apparent vendor-prefix match is not authoritative. Local group space also contains
standardized mappings such as 33:33 IPv6 multicast. A CID can identify an organization in local
address space, but a matching CID alone does not establish who generated a particular address.
That gives four combinations. The bits below are written most significant first, so 10 means the
universal/local bit is set and the individual/group bit is clear. Because both live in the first octet, the second hex digit of the address
tells you which row you are in at a glance. IEEE 802c divides the locally administered unicast combination into four Structured Local Address
Plan (SLAP) quadrants, so those four second-nibble patterns are shown separately:
| Low two bits | Second hex digit | Meaning | What it tells you |
|---|---|---|---|
| 00 | 0 4 8 C | Universally administered unicast | Worth a registry lookup, though not every prefix is assigned. |
| 01 | 1 5 9 D | Universally administered group | A protocol or vendor multicast address. |
| 10 | x2 | Local unicast: AAI | Administratively assigned; commonly randomized or manually configured. |
| 10 | x6 | Local unicast: reserved | Reserved by IEEE 802c; no registry attribution is implied. |
| 10 | xA | Local unicast: ELI | May use a registered 24-bit Company ID, but the bit pattern alone does not prove that it does. |
| 10 | xE | Local unicast: SAI | Standards-assigned quadrant; it does not identify a particular assigning standard. |
| 11 | 3 7 B F | Locally administered group | Includes the common 33:33:xx:xx:xx:xx IPv6 multicast mapping. |
So de:ad:be:ef:00:01 is not a vendor address. DE is
1101 1110: the universal/local bit is set and the individual/group bit is clear, which is the SAI
row. IEEE P802.1CQ proposed assignment protocols for SAI but expired without becoming a standard, so the pattern does not identify an
assigning protocol or organization.
That nibble explains many "unknown vendor" results. Randomized client addresses and many manually configured, virtual-interface, and container-bridge addresses use locally administered unicast space, but virtual or manually assigned addresses are not required to do so.
Where the vendor part ends is not always 24 bits
The habit of calling the first three octets "the OUI" is a useful approximation and an increasingly wrong one. The IEEE offers MAC address block assignments at three sizes, and the smaller two put many assignees inside one set of leading octets:
| Registry | Prefix length | Addresses per assignment | Maximum assignments sharing one 24-bit leading value |
|---|---|---|---|
| MA-L | 24 bits | 16,777,216 | 1 |
| MA-M | 28 bits | 1,048,576 | up to 16 |
| MA-S | 36 bits | 4,096 | up to 4,096 |
| IAB | 36 bits | 4,096 | up to 4,096 |
IAB assignments were retired in 2014 but remain in use, and MA-S is their replacement. A lookup keyed only on the first six hex digits cannot distinguish MA-M, MA-S, or IAB assignments; it may return an unrelated assignee, a generic IEEE entry, or no match. The registries guide covers how the sizes interact, where CID assignments fit, and why some addresses legitimately have no owner at all.
Bit order, and the one place it bites
Ethernet transmits each address octet least significant bit first, so the individual/group bit is the first address bit transmitted. Canonical notation still writes octet values normally.
Token Ring and some FDDI tooling historically exposed addresses in non-canonical, bit-reversed byte order. Reversing the bits within each octet converts between the two representations:
| Canonical octet | Bits | Reversed | Bit-reversed octet |
|---|---|---|---|
| 01 | 0000 0001 | 1000 0000 | 80 |
| 80 | 1000 0000 | 0000 0001 | 01 |
| C2 | 1100 0010 | 0100 0011 | 43 |
Spanning Tree's reserved address, canonically 01:80:C2:00:00:00, appears in non-canonical form as
80:01:43:00:00:00.
These technologies are obsolete in most deployments, but non-canonical addresses can still appear in legacy captures, Token Ring ARP fields, and old documentation. Bit-reverse only when the medium or producing tool is known to use non-canonical ordering; an implausible prefix alone is not evidence.
Modified EUI-64 and the IPv6 form
One legacy way to derive a 64-bit IPv6 interface identifier from a 48-bit IEEE 802 address is to insert
ff:fe between the third and fourth octets and invert the universal/local bit. This creates a
modified EUI-64 interface identifier; stateless address autoconfiguration itself does not require this method.
| Step | Result |
|---|---|
| The 48-bit address | 00:00:5e:00:53:01 |
Insert ff:fe in the middle |
00:00:5e:ff:fe:00:53:01 |
| Flip bit 1 of the first octet | 02:00:5e:ff:fe:00:53:01 |
| Group as an IPv6 interface identifier | 0200:5eff:fe00:5301 |
| With the link-local prefix | fe80::200:5eff:fe00:5301 |
The 02 is the inverted universal/local bit, and ff:fe
is characteristic, but not proof, of this construction. RFC 8064 recommends opaque stable interface identifiers instead of embedding stable
link-layer addresses; systems may also use temporary privacy addresses.
macs4days reads IPv6 addresses as context sitting beside a MAC, and deliberately does not treat hex inside an IPv6 address as an address of its own, since almost none of them carry one. Reverse this procedure only when the identifier is known to use this construction, and treat the result as the source 48-bit address, not necessarily the device's current hardware address.
What macs4days does with all of this
The parser accepts the colon-separated, hyphen-separated, dotted, bare, hyphenated-quad, split-half, DHCP-client-ID, and supported device-name forms above in mixed case, including dropped leading zeros. Space-separated octets are accepted only when the entire input line is the address. It normalizes each form for lookup and display.
It also reads the flag bits before it reads the registry. Every locally administered unicast address gets a
[special] badge and its SLAP quadrant classification. Only an
xA
ELI address is checked against the exact 24-bit prefixes proven to come from the CID registry. A match appears separately as a CID prefix
registrant, not as the device's hardware vendor, because a randomized address can land on a registered prefix by chance. Multicast and the
other local quadrants are classified without an organization lookup.