LINUX中获取MAC地址的方法

lurenfu 2006-12-29 01:28:58
看到经常有人问如何在linux中获取MAC地址,我干脆把代码贴出来,方法就是用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;
}

...全文
1378 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
无知者无谓 2006-12-30
  • 打赏
  • 举报
回复
我都发过好几次了,问的人还是在问
都不愿意自己动手搜索一下
zhaodm 2006-12-29
  • 打赏
  • 举报
回复
me too
sqs570408 2006-12-29
  • 打赏
  • 举报
回复
先占个位。
NC 2006-12-29
  • 打赏
  • 举报
回复
mark
spiderww 2006-12-29
  • 打赏
  • 举报
回复
先留个名,有空试试对不对。

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧