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;
}