It can sometimes be useful to obtain the MAC address of your Raspberry Pi’s network interfaces. The “Media Access Control” address is a unique identifier given to all networked devices. The address is different for all Pi’s and can be used to identify your device. Think of it as a digital fingerprint. There is a separate MAC address for Ethernet and WiFi interfaces.
There are a number of ways to identify them using the command line or using Python code. Below are some quick examples you can use to find the MAC address.
From the Command Line
To find the MAC address from the command line you need to know the name of the interface. The Ethernet interface used to be called “eth0” but in newer versions of Raspbian it may be “enx########” where ######## is the MAC address. This means the Ethernet interface name is unique for every Pi. The first WiFi interfaces is still named “wlan0”.
You can find the interface names by using :
The name will be one of the displayed sub-directories alongside “lo”.
You can then use the following command :
or you can type :
You should swap #### for the interface name.
This will result in output similar to :
eth0 Link encap:Ethernet HWaddr c7:35:ce:fd:8e:a1 inet addr:192.168.0.16 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::ba27:ebff:fefc:9fd2/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
enxc735cefd8ea1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.12 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::5280:6726:a47d:f38c prefixlen 64 scopeid 0x20<link> ether c7:35:ce:fd:8e:a1 txqueuelen 1000 (Ethernet)
The “HWaddr” or “ether” value is the MAC address. In this example “c7:35:ce:fd:8e:a1”
Finding the Ethernet Interface Name Using Python
The names used for the Ethernet and wireless interface on the current version of Raspbian are “eth0” and “wlan0”.
In some older iterations of Raspbian these names were based on the MAC address of the interface using what is known as “predictable interface names”. For this reason I created a function to determine the name regardless of the scheme being used :
def getEthName(): # Get name of the Ethernet interface try: for root,dirs,files in os.walk('/sys/class/net'): for dir in dirs: if dir[:3]=='enx' or dir[:3]=='eth': interface=dir except: interface="None" return interface
It looks at the sub-directories of /sys/class/net/ and finds either “eth0” or the name starting with “enx”.
In your script you could use this function to read the interface name into a variable :
Finding the MAC Address Using Python
The following Python function can be used to obtain the MAC address of your Raspberry Pi :
def getMAC(interface='eth0'): # Return the MAC address of the specified interface try: str = open('/sys/class/net/%s/address' %interface).read() except: str = "00:00:00:00:00:00" return str[0:17]
This function can be called using the following line :
Or if you have a WiFi connection :
Finally combining both functions would give you ability to find the Ethernet interface name and then retrieve the address without worrying about what version of Raspbian was being used: