C Program to get MAC Address from Interface Name on Linux

By | August 10, 2020

MAC Address

The mac address (media access control address) or the hardware address or the ethernet address of an interface is a 48 bit number that looks like this : 00:1c:c0:f8:79:ee.

Every machine connected to a network has a unique mac address that is used to deliver network packets to the correct machine.

The mac address of an interface can be found given its name.

The function to use is ioctl. The following code will work on Linux systems.

Code

#include <stdio.h>	//printf
#include <string.h>	//strncpy
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>	//ifreq
#include <unistd.h>	//close

int main()
{
	int fd;
	struct ifreq ifr;
	char *iface = "eth0";
	unsigned char *mac;
	
	fd = socket(AF_INET, SOCK_DGRAM, 0);

	ifr.ifr_addr.sa_family = AF_INET;
	strncpy(ifr.ifr_name , iface , IFNAMSIZ-1);

	ioctl(fd, SIOCGIFHWADDR, &ifr);

	close(fd);
	
	mac = (unsigned char *)ifr.ifr_hwaddr.sa_data;
	
	//display mac address
	printf("Mac : %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n" , mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);

	return 0;
}

Note that the interface name "eth0" is stored in the variable iface. On your system the interface name may be different. The interface name can be found using the ifconfig command on linux.

Output

The output would look something like this:

$ gcc interface_mac.c && ./a.out
Mac : 00:10:0c:28:89:1e

Conclusion

If you need to get the ip address and netmask of a given interface, then check this post for code examples:
C Program to Get IP Address from Interface Name on Linux

About Silver Moon

A Tech Enthusiast, Blogger, Linux Fan and a Software Developer. Writes about Computer hardware, Linux and Open Source software and coding in Python, Php and Javascript. He can be reached at [email protected].

4 thoughts on “C Program to get MAC Address from Interface Name on Linux

Leave a Reply

Your email address will not be published. Required fields are marked *