Network

How to Check MAC Address on Mac (Terminal + Private Wi-Fi)

Published Nov 12, 2026
Tested on a real Mac. All Terminal commands (ifconfig, networksetup, system_profiler, arp) were run on macOS Tahoe 26.6.2 on a MacBook Air M3; every MAC and IP address in the output is replaced with an example value. The colon-stripping pipe was run without the final pbcopy (to leave the clipboard alone), System Settings steps were not checked on screen, and the sudo ifconfig spoofing command was not executed. Test machine: MacBook Air (M3, 16 GB), macOS Tahoe 26.6.2, zsh 5.9.
On this page
  1. The two MAC addresses on a modern Mac
  2. How to tell if an address is private
  3. List MAC addresses for every port
  4. system_profiler shows both (in different sections)
  5. Check it in System Settings
  6. MAC addresses of other devices on your network
  7. Copy it in uppercase or without colons
  8. Common questions

To check the real (hardware) MAC address of your Mac’s Wi-Fi, open Terminal and run:

networksetup -getmacaddress en0
Ethernet Address: a4:83:e7:1c:22:9f (Device: en0)

But there is a catch on recent macOS. The address your Mac actually sends on most Wi-Fi networks is a private Wi-Fi address, and that is what ifconfig en0 shows. On my test Mac the two commands printed different values. This guide shows which one you need and how to tell them apart.

The two MAC addresses on a modern Mac

Here is what I got on a MacBook Air M3 running macOS Tahoe 26.6.2, connected to home Wi-Fi:

ifconfig en0 ether
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=6460<TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
	ether 3a:1f:9c:52:7e:04
networksetup -getmacaddress en0
Ethernet Address: a4:83:e7:1c:22:9f (Device: en0)

Same interface, two different addresses:

CommandWhat it showsUse it when
ifconfig en0 etherThe address in use right now on this network (often the private one)Your router, Wi-Fi admin, or captive portal needs to recognize this Mac on this network
networksetup -getmacaddress en0The burned-in hardware addressA form asks for the “hardware” or “physical” address, or you need a value that never changes

If a school or office network admin asks for your MAC address to whitelist the Mac, ask which one they need. If they register the hardware address while private addressing is on for their network, the router will never see it.

How to tell if an address is private

You don’t need a website for this. Look at the second character of the address. If it is 2, 6, a or e, the address is “locally administered”, which means software made it up. Private Wi-Fi addresses always fall in this group. Real hardware addresses never do.

  • 3a:1f:... → second character a → private
  • a4:83:... → second character 4 → hardware

If you want Terminal to check it for you, this one-liner reads the first byte and tests that bit:

m=$(ifconfig en0 ether | awk '/ether/{print $2}')
b=$((16#${m:0:2}))
echo "local bit: $(( (b>>1)&1 ))"
local bit: 1

1 means private (randomized), 0 means the real hardware address. Running the same test on the networksetup value printed local bit: 0 on my Mac.

List MAC addresses for every port

To see all network ports at once (Wi-Fi, Thunderbolt, USB Ethernet adapters), use:

networksetup -listallhardwareports
Hardware Port: Ethernet Adapter (en3)
Device: en3
Ethernet Address: b6:2c:11:8d:40:01

Hardware Port: Ethernet Adapter (en4)
Device: en4
Ethernet Address: b6:2c:11:8d:40:02

Hardware Port: Thunderbolt Bridge
Device: bridge0
Ethernet Address: 36:5a:0e:91:c3:80

Hardware Port: Wi-Fi
Device: en0
Ethernet Address: a4:83:e7:1c:22:9f

Hardware Port: Thunderbolt 1
Device: en1
Ethernet Address: 36:5a:0e:91:c3:80

Hardware Port: Thunderbolt 2
Device: en2
Ethernet Address: 36:5a:0e:91:c3:84

Two things surprised me here. First, this MacBook Air has no Ethernet port and nothing was plugged in, yet it lists “Ethernet Adapter (en3)” and “(en4)”. Their addresses start with b6, so the local bit is set. These are not a physical network card, so don’t give them to anyone who asks for “the Ethernet MAC”. Second, Wi-Fi is not always en0 on every Mac. On Macs with a built-in Ethernet port, Wi-Fi is often en1. Check the “Device:” line next to “Hardware Port: Wi-Fi” before you copy a command from the internet.

You can also ask by port name instead of device name, which avoids the en0/en1 guessing:

networksetup -getmacaddress Wi-Fi
Ethernet Address: a4:83:e7:1c:22:9f (Hardware Port: Wi-Fi)

system_profiler shows both (in different sections)

system_profiler gives the longer report that System Information uses. The two data types don’t agree, which is easy to miss:

system_profiler SPNetworkDataType | grep -E "^    [A-Z]|MAC Address"
    Ethernet Adapter (en3):
          MAC Address: b6:2c:11:8d:40:01
    Ethernet Adapter (en4):
          MAC Address: b6:2c:11:8d:40:02
    USB 10/100/1000 LAN:
    Thunderbolt Bridge:
    Wi-Fi:
          MAC Address: a4:83:e7:1c:22:9f
    iPhone:
system_profiler SPAirPortDataType | grep -E "Card Type|MAC Address|Status" | head -3
          Card Type: Wi-Fi  (0x14E4, 0x4388)
          MAC Address: 3a:1f:9c:52:7e:04
          Status: Connected

SPNetworkDataType reports the hardware address. SPAirPortDataType (the Wi-Fi section) reports the private address currently in use. So if you open System Information → Network → Wi-Fi and then System Information → Wi-Fi, you will see two different “MAC Address” values, and both are correct.

system_profiler is also slower. On my Mac SPNetworkDataType took about 0.19 seconds, networksetup 0.01 seconds, and ifconfig 0.002 seconds. That only matters in scripts, but it’s a reason to prefer networksetup or ifconfig there.

Check it in System Settings

If you prefer clicking, open System Settings → Wi-Fi, click Details… next to the network you’re connected to, and look for Private Wi-Fi address. The address listed there is the one this network sees. That menu also lets you set it to Off, Fixed or Rotating for that network. If you turn it off, ifconfig en0 ether will show the hardware address again after the Mac rejoins the network. (I didn’t change this setting on the test Mac, so I’m not showing output for it.)

MAC addresses of other devices on your network

To see the MAC addresses of your router and other devices your Mac has talked to recently, use the ARP table:

arp -a
? (192.168.1.1) at 8:f1:b3:2:7a:10 on en0 ifscope [ethernet]
mdns.mcast.net (224.0.0.251) at 1:0:5e:0:0:fb on en0 ifscope permanent [ethernet]

Notice that arp drops leading zeros: 8:f1:b3:2:7a:10 is really 08:f1:b3:02:7a:10. If you paste that into a router’s MAC filter or a vendor lookup site, add the zeros back or it may be rejected. If you need your Mac’s IP address too, see how to find your IP address in Terminal.

Copy it in uppercase or without colons

Some forms want AA:BB:CC... or AABBCC.... Pipe the address through tr:

networksetup -getmacaddress en0 | awk '{print $3}' | tr a-f A-F
A4:83:E7:1C:22:9F
networksetup -getmacaddress en0 | awk '{print $3}' | tr -d : | pbcopy

The second one copies the address with no colons (a483e71c229f) straight to the clipboard, ready to paste.

Common questions

Why does my Mac show a different MAC address every time I check?

Because the private address can change. With Rotating set for a network, macOS picks a new address over time, and each network gets its own address. The hardware address from networksetup -getmacaddress stays the same.

Which MAC address does my router see?

The one from ifconfig en0 ether (or System Settings → Wi-Fi → Details). That’s the address your Mac is actually using on that network right now.

Can I change my MAC address from Terminal?

The traditional command is sudo ifconfig en0 ether 02:11:22:33:44:55, but I did not run it on the test Mac, and on recent macOS it often fails or is reset when Wi-Fi reconnects. For most people, the Private Wi-Fi address setting in System Settings is the supported way to stop exposing the hardware address.

Is the MAC address the same as the serial number or IP address?

No. The serial number identifies the Mac itself, the IP address is assigned by the network, and the MAC address identifies one network interface. To find other details about your Mac, see how to check your macOS version in Terminal. If a network change leaves name lookups broken afterwards, flushing the DNS cache is a quick next step.