#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main( int argc, char **argv )
{
   int i,x,sockfd,an=1;
   long n;
   char buffer[201];
   char mac[102];
   char macpart[2];
   char test[103];
   struct sockaddr_in serverAddress;
   //(struct protoent *) protocol;

   //protocol=getprotobyname("udp");   
   
   if (argc<3) {printf("Zu wenige Argumente !\n");
                printf("Format   : wol IP MAC\n");
                printf("Beispiel : wol 192.168.1.1 00:05:45:12:3e:ab\n");
                exit(1);}
   if ( (sockfd = socket( AF_INET, SOCK_DGRAM,17)) < 0 ) {
      perror( "socket" );
      exit(1);
   }

   setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&an,sizeof(an));

   bzero( &serverAddress, sizeof(serverAddress) );
   serverAddress.sin_family = AF_INET;
   serverAddress.sin_port = htons( 9 );
   inet_pton( AF_INET, argv[1], &serverAddress.sin_addr );
   //printf("Eingabegroesse %d \n",sizeof(argv[2]));
   for (i=0;i<6;i++) mac[i]=255;
   for (i=1;i<17;i++) {
   macpart[0]=argv[2][0];
   macpart[1]=argv[2][1];
   mac[6*i]=strtol(macpart,&x,16);
   macpart[0]=argv[2][3];
   macpart[1]=argv[2][4];
   mac[6*i+1]=strtol(macpart,&x,16);
   macpart[0]=argv[2][6];
   macpart[1]=argv[2][7];
   mac[6*i+2]=strtol(macpart,&x,16);
   macpart[0]=argv[2][9];
   macpart[1]=argv[2][10];
   mac[6*i+3]=strtol(macpart,&x,16);
   macpart[0]=argv[2][12];
   macpart[1]=argv[2][13];
   mac[6*i+4]=strtol(macpart,&x,16);
   macpart[0]=argv[2][15];
   macpart[1]=argv[2][16];
   mac[6*i+5]=strtol(macpart,&x,16);
   }
   for (i=0;i<103;i++) test[i]=mac[i];
   test[102]=0;
   printf("Magic-Packet an IP : %s Port 9 udp \n",argv[1]);
   //printf("Packet : %s \n",test);
   
   sendto(sockfd,&mac,102,0,(struct sockaddr *)&serverAddress,sizeof(serverAddress));
   close(sockfd);


   return 0;
}

