Magic Packet
-
Through some standards an experience, I tried to put this Magic Packet application together. However it doesn't wake up the machine, nor does the Wake On LAN tutorial on CP succeed in accomplishing the same task.
#include
#includeusing std::cout;
using std::cin;
using std::endl;void main()
{
char MAC[13];
cout << "Enter MAC Address for Machine to wake up:" << endl;
cin >> MAC;cout << "Waking up..." << endl; char L = (char)255; cout << L << endl; WSADATA WS2Info; if (!WSAStartup(MAKEWORD(2,2), &WS2Info)) { SOCKET MagicPacket = socket(AF\_INET, SOCK\_DGRAM, IPPROTO\_UDP); if (MagicPacket != INVALID\_SOCKET) { hostent \*ResolveHost; char\* HostAddress = ""; // Target IP ResolveHost = gethostbyname(HostAddress); SOCKADDR\_IN Host; Host.sin\_family = AF\_INET; Host.sin\_port = 0; Host.sin\_addr.s\_addr = \*((unsigned long\*)ResolveHost->h\_addr); short MACconv\[6\]; memset(MACconv, '\\0', 6); bool FirstDigit = true; int Pos = 0; for ( int i = 0; i < 12; i++) { //cout << MAC\[i\] << Pos << endl; switch(MAC\[i\]) { case '0': if (FirstDigit) { MACconv\[Pos\] = 00000000 | MACconv\[Pos\]; FirstDigit = false; } else { MACconv\[Pos\] = 00000000 | MACconv\[Pos\]; FirstDigit = true; Pos += 1; } break; case '1': if (FirstDigit) { MACconv\[Pos\] = 00010000 | MACconv\[Pos\]; FirstDigit = false; } else { MACconv\[Pos\] = 00000001 | MACconv\[Pos\]; FirstDigit = true; Pos += 1; } break; case '2': if (FirstDigit) { MACconv\[Pos\] = 00100000 | MACconv\[Pos\]; FirstDigit = false; } else { MACconv\[Pos\] = 00000010 | MACconv\[Pos\]; FirstDigit = true; Pos += 1; } break; case '3': if (FirstDigit) { MACconv\[Pos\] = 00110000 | MACconv\[Pos\]; FirstDigit = false; } else { MACconv\[Pos\] = 00000011 | MACconv\[Pos\]; FirstDigit = true; Pos += 1; } break; case '4': if (FirstDigit) { MACconv\[Pos\] = 01000000 | MACconv\[Pos\]; FirstDigit = false; } else { MACconv\[Pos\] = 00000100 | MACconv\[Pos\]; FirstDigit = true; Pos += 1; } break; case '5': if (FirstDigit) { MACconv\[Pos\] = 00010000 | MACconv\[Pos\]; FirstDigit = false
-
Through some standards an experience, I tried to put this Magic Packet application together. However it doesn't wake up the machine, nor does the Wake On LAN tutorial on CP succeed in accomplishing the same task.
#include
#includeusing std::cout;
using std::cin;
using std::endl;void main()
{
char MAC[13];
cout << "Enter MAC Address for Machine to wake up:" << endl;
cin >> MAC;cout << "Waking up..." << endl; char L = (char)255; cout << L << endl; WSADATA WS2Info; if (!WSAStartup(MAKEWORD(2,2), &WS2Info)) { SOCKET MagicPacket = socket(AF\_INET, SOCK\_DGRAM, IPPROTO\_UDP); if (MagicPacket != INVALID\_SOCKET) { hostent \*ResolveHost; char\* HostAddress = ""; // Target IP ResolveHost = gethostbyname(HostAddress); SOCKADDR\_IN Host; Host.sin\_family = AF\_INET; Host.sin\_port = 0; Host.sin\_addr.s\_addr = \*((unsigned long\*)ResolveHost->h\_addr); short MACconv\[6\]; memset(MACconv, '\\0', 6); bool FirstDigit = true; int Pos = 0; for ( int i = 0; i < 12; i++) { //cout << MAC\[i\] << Pos << endl; switch(MAC\[i\]) { case '0': if (FirstDigit) { MACconv\[Pos\] = 00000000 | MACconv\[Pos\]; FirstDigit = false; } else { MACconv\[Pos\] = 00000000 | MACconv\[Pos\]; FirstDigit = true; Pos += 1; } break; case '1': if (FirstDigit) { MACconv\[Pos\] = 00010000 | MACconv\[Pos\]; FirstDigit = false; } else { MACconv\[Pos\] = 00000001 | MACconv\[Pos\]; FirstDigit = true; Pos += 1; } break; case '2': if (FirstDigit) { MACconv\[Pos\] = 00100000 | MACconv\[Pos\]; FirstDigit = false; } else { MACconv\[Pos\] = 00000010 | MACconv\[Pos\]; FirstDigit = true; Pos += 1; } break; case '3': if (FirstDigit) { MACconv\[Pos\] = 00110000 | MACconv\[Pos\]; FirstDigit = false; } else { MACconv\[Pos\] = 00000011 | MACconv\[Pos\]; FirstDigit = true; Pos += 1; } break; case '4': if (FirstDigit) { MACconv\[Pos\] = 01000000 | MACconv\[Pos\]; FirstDigit = false; } else { MACconv\[Pos\] = 00000100 | MACconv\[Pos\]; FirstDigit = true; Pos += 1; } break; case '5': if (FirstDigit) { MACconv\[Pos\] = 00010000 | MACconv\[Pos\]; FirstDigit = false
Fareed Rizkalla wrote:
memcpy(WakeUpMsg, MACconv, 6); memcpy(WakeUpMsg, MACconv, 6); memcpy(WakeUpMsg, MACconv, 6); memcpy(WakeUpMsg, MACconv, 6);
All these lines are repeatedly copying the first 6 bytes of
MACconv
to the first 6 bytes ofWakeUpMsg
; you need to use some form of index or offset to fill the packet correctly.It's time for a new signature.