#include <stdio.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <memory.h>
#include <netinet/ether.h>
#include <net/if.h>
/**
* @param szMAC[out] - mac address value.
* @param nLen[out] - size of mac address
* @return 0 ok, otherwise failure.
*
* @author Ji-hoon Kang(luvflo@gmail.com)
* @date 2008-11-07
*/
int GetMacAddr(char* szMac, int* nLen)
{
const char* default_eth = "eth0";
char* mac_addr = NULL;
struct ifreq ifrq;
int fd = socket(AF_INET, SOCK_DGRAM, 0);
memset(&ifrq, 0, sizeof(ifrq));
strcpy(ifrq.ifr_name , default_eth);
if(ioctl(fd, SIOCGIFHWADDR, &ifrq)<0)
{
close(fd);
fprintf(stderr, "%s:%d> ERROR getMacAddr", __FILE__, __LINE__);
return 1;
}
struct sockaddr *sa = &(ifrq.ifr_hwaddr);
mac_addr = (char*)ether_ntoa((struct ether_addr*)sa->sa_data );
if(mac_addr == NULL) return 1;
memset(szMac, 0, sizeof(szMac));
sprintf(szMac, "%s", mac_addr);
*nLen = strlen(szMac);
close(fd);
return 0;
}
int main(int argc, char** argv)
{
char sMacAddr[64] = {0,};
int nLength = 0;
if( GetMacAddr(sMacAddr, &nLength) )
{
return 1;
}
printf("MacAddr : %s\nString length : %d\n", sMacAddr, nLength);
return 0;
}