原:http://topic.csdn.net/t/20061229/13/5264223.html
看到經(jīng)常有人問(wèn)如何在linux中獲取MAC地址,我干脆把代碼貼出來(lái),方法就是用ioctl( SIOCGIFHWADDR );
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/socket.h>
int GetMac( const char *ifname, unsigned char *mac )
{
int sock, ret;
struct ifreq ifr;
sock = socket( AF_INET, SOCK_STREAM, 0 );
if ( sock < 0 ) {
perror( "socket " );
return -1;
}
memset( &ifr, 0, sizeof(ifr) );
strcpy( ifr.ifr_name, ifname );
ret = ioctl( sock, SIOCGIFHWADDR, &ifr, sizeof(ifr) );
if ( ret == 0 ) {
memcpy( mac, ifr.ifr_hwaddr.sa_data, 6 );
} else {
perror( "ioctl " );
}
close( sock );
return ret;
}
int main( int argc, char **argv )
{
int ret;
char ifname[IFNAMSIZ];
unsigned char mac[6];
if ( argc == 1 ) {
strcpy( ifname, "eth0 " );
} else {
strcpy( ifname, argv[1] );
}
memset( mac, 0, sizeof(mac) );
ret = GetMac( ifname, mac );
if ( ret == 0 ) {
printf(
"%s mac address is: [%02X:%02X:%02X:%02X:%02X:%02X]\n ",
ifname, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5] );
} else {
fprintf( stderr, "Can 't get %s 's mac address\n ", ifname );
}
return 0;
}
還有這里 http://www./problems/60540
-------------------------------------------------------------
博主注:官方的文檔可以看這里:http://linux./man/7/netdevice