#include <WinSock2.h>
#include <WS2tcpip.h>
#pragma comment(lib, "ws2_32.lib")
#include <stdio.h>
const char* info = "wow.exe ipaddress/hostname port macaddress(xx-xx-xx-xx-xx-xx)\n";
int wmain(int argc,wchar_t** argv)
{
if(argc<4)
{
printf(info);
return -1;
}
WORD wVersionRequested = MAKEWORD(2,2);
WSADATA wsaData;
int err;
err = WSAStartup(wVersionRequested,&wsaData);
ADDRINFOW* addr;
err = GetAddrInfo(argv[1],NULL,NULL,&addr);
if(addr==NULL)
{
printf("get address %S error %d",argv[1],err);
return -1;
}
SOCKET s = socket(addr->ai_family,SOCK_DGRAM,IPPROTO_UDP);//SOCK_STREAM,IPPROTO_TCP);
* (unsigned short*)addr->ai_addr->sa_data = htons(_wtoi(argv[2]));
err = connect(s, addr->ai_addr, addr->ai_addrlen);
char buf[16*6+6];
memset(buf,-1,6);
char mac[6] = {0};
wchar_t* m = argv[3];
for(int i=0; i<12; i++ , m++)
{
if(*m==L'-')m++;
int tmp = *m;
tmp &= 0x4f;
int high,low;
high = (tmp) >> 4;
low = (tmp) & 0x0f;
tmp = ((high * 10) >> 2) + low;
tmp -= low==tmp?0:1;
if tmp > 0x0f error
mac[i/2] |= ((tmp & 0xf) << (((i+1)%2)*4));
}
for(int i=1; i<17; i++)
memcpy(buf+i*6,mac,6);
err = send(s,buf,6*16+6,NULL);
shutdown(s,SD_BOTH);
closesocket(s);
FreeAddrInfo(addr);
WSACleanup();
return 0;
}