#include
#include
#include
#include
#include
#include
#include
int main(int argc, char* argv[])
{
if (argc!=3||argc!=5) {
printf("\nUsage: %s -mac 00:10:20:30:40:50 -adr 192.168.1.255\n",argv[0]);
}
unsigned char mac[6]={0x00,0x10,0x20,0x30,0x40,0x50};//目的主机MAC地址,例如: 00:10:20:30:40:50
char adr[17]="";
unsigned char packet[102];
struct sockaddr_in addr;
int sockfd, i,j, on = 1;
for (int i=0 ;i
if (!strcmp(argv[i],"-mac")){
sscanf(argv[i+1], "%02x:%02x:%02x:%02x:%02x:%02x", &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]);
printf("Mac is %s,mac is %02x%02x%02x%02x%02x%02x\n",argv[i+1],mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);
}
if (!strcmp(argv[i],"-adr")){
strcpy(adr,argv[i+1]);
printf("广播地址 is %s\n",adr);
}
}
//构建magic packet
for(i=0;i<6;i++)
packet[i] = 0xFF;
for(i=1;i<17;i++)
for(j=0;j<6;j++)
packet[i*6+j] = mac[j];
//UDP
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
//广播
setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST,&on, sizeof(on));
if(sockfd < 0)
exit(0);
memset((void*)&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(10000);
addr.sin_addr.s_addr = inet_addr("192.168.1.255");//广播地址
sendto(sockfd, packet, sizeof(packet), 0, (struct sockaddr *)&addr, sizeof(addr));
close(sockfd);
return 0;
}