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
It worked! Nice job!
That’s great! It also work with unplugged cable!
i am getting error while compiling.can anyone help me?
what error message are you getting ?