Skip to content

Instantly share code, notes, and snippets.

@atr000
Created December 18, 2010 08:23
Show Gist options
  • Select an option

  • Save atr000/746309 to your computer and use it in GitHub Desktop.

Select an option

Save atr000/746309 to your computer and use it in GitHub Desktop.

Revisions

  1. atr000 created this gist Dec 18, 2010.
    65 changes: 65 additions & 0 deletions wol.c
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,65 @@
    #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;
    }