linux 获取设置mac

来源:互联网 发布:1983星星知我心电视剧 编辑:程序博客网 时间:2024/06/06 12:21

int porting_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); //面向无连接  UDP
 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;
 }

 
 porting_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);
 porting_get_mac(socket_fd,mac);

 close(socket_fd);
 return 0;
}

0 0
原创粉丝点击