Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. Magic Packet

Magic Packet

Scheduled Pinned Locked Moved C / C++ / MFC
tutorial
2 Posts 2 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • F Offline
    F Offline
    Fareed Rizkalla
    wrote on last edited by
    #1

    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
    #include

    using 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
    
    L 1 Reply Last reply
    0
    • F Fareed Rizkalla

      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
      #include

      using 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
      
      L Offline
      L Offline
      Lost User
      wrote on last edited by
      #2

      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 of WakeUpMsg; you need to use some form of index or offset to fill the packet correctly.

      It's time for a new signature.

      1 Reply Last reply
      0
      Reply
      • Reply as topic
      Log in to reply
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes


      • Login

      • Don't have an account? Register

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • World
      • Users
      • Groups