linux mac设置获取

// shell里面执行

//ifconfig eth0 down

//ifconfig eth0 hw ether 98:2F:3C:0E:33:5B

//ifconfig eth0 up

 

int get_mac(int socket,char *arg)
{  
 char *mac = arg;
 u_char * ptr;
 struct ifreq ifr;
 
 if (NULL == arg)
 {
  printf("(out)arg is null\n");
  goto LAB_ERR;
 }
 
 bzero((char *)&ifr, sizeof(ifr));
 strcpy(ifr.ifr_name,"eth0");
 
 if (ioctl(socket,SIOCGIFHWADDR,&ifr) != 0)
 {
  printf("(out)SIOCGIFHWADDR failed: %s\n", strerror(errno));
  goto LAB_ERR;
 }
 
 ptr =(u_char *)&ifr.ifr_ifru.ifru_hwaddr.sa_data[0];
 sprintf(mac, "%02x%02x%02x%02x%02x%02x",*ptr,*(ptr+1),*(ptr+2),*(ptr+3),*(ptr+4),*(ptr+5));
 printf("mac=%s\n",mac);
 
 return 0;
LAB_ERR:
 return -1;
}


static int network_set_mac(int socket, char *mac)

 struct ifreq ifr;
 memset(&ifr, 0, sizeof(struct ifreq)); 
 ifr.ifr_addr.sa_family = ARPHRD_ETHER;
 strcpy(ifr.ifr_name, "eth0");
 memcpy((void *)ifr.ifr_hwaddr.sa_data, mac, 6);
 if (ioctl(socket, SIOCSIFHWADDR, &ifr)<0)
 {
  printf("CHMID_TCPIP_SetMAC SIOCSIFHWADDR failed;%s!\n",strerror(errno));
 }
 
 return 0;
LAB_ERR:
 return -1;
}

 

int main(int argc, char *argv[])
{
 //int ret=0,fd=-1;
 //char buf='1';

 int socket_fd;
 int bReuseaddr=1;
 char mac[20]={0};


 socket_fd = socket(AF_INET,SOCK_DGRAM,0);
 setsockopt(socket_fd, SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(int));
 if (socket_fd < 0)
 {
  printf("(out)socket failed: %s\n", strerror(errno));
  return -1;
 }

 
 get_mac(socket_fd,mac);
 memset(mac,0,20);
 //98:2F:3C:0E:33:5E
 mac[0]=0x98;
 mac[1]=0x2F;
 mac[2]=0x3C;
 mac[3]=0x0E;
 mac[4]=0x33;
 mac[5]=0x5E;
 network_set_mac(socket_fd,mac);
 get_mac(socket_fd,mac);

 close(socket_fd);
 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值