Skip to content

Instantly share code, notes, and snippets.

@AlexKorsakov
Created December 18, 2016 20:48
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save AlexKorsakov/53e1d9a224218b57e7fe280cab6c320e to your computer and use it in GitHub Desktop.
Save AlexKorsakov/53e1d9a224218b57e7fe280cab6c320e to your computer and use it in GitHub Desktop.
C# Wake On Lan Program
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Globalization;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
WakeFunction("AA:EE:CC:DD:FF"); //change me
}
//we derive our class from a standart one
public class WOLClass : UdpClient
{
public WOLClass() : base()
{ }
//this is needed to send broadcast packet
public void SetClientToBrodcastMode()
{
if (this.Active)
this.Client.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.Broadcast, 0);
}
}
//now use this class
//MAC_ADDRESS should look like '013FA049'
private void WakeFunction(string MAC_ADDRESS)
{
WOLClass client = new WOLClass();
client.Connect(new
IPAddress(0xffffffff), //255.255.255.255 i.e broadcast
0x2fff); // port=12287 let's use this one
client.SetClientToBrodcastMode();
//set sending bites
int counter = 0;
//buffer to be send
byte[] bytes = new byte[1024]; // more than enough :-)
//first 6 bytes should be 0xFF
for (int y = 0; y < 6; y++)
bytes[counter++] = 0xFF;
//now repeate MAC 16 times
for (int y = 0; y < 16; y++)
{
int i = 0;
for (int z = 0; z < 6; z++)
{
bytes[counter++] =
byte.Parse(MAC_ADDRESS.Substring(i, 2), NumberStyles.HexNumber);
i += 2;
}
}
//now send wake up packet
int reterned_value = client.Send(bytes, 1024);
}
}
}
@AlexKorsakov
Copy link
Author

@wilsonangga look here, i made a working project.

@wilsonangga
Copy link

@AlexKorsakov thankyou very much for your help, now its work. Is it possible if i also make for shutdown and restart?

@AlexKorsakov
Copy link
Author

You are welcome!
Yes, it's possible, check this project. WOL allow you only start device. If you want to control the power state of your computer, you need application with administrator permissions. In Power-Management-Service I use a Windows Service for this.

@wilsonangga
Copy link

Hello Alex, I want to ask you if i want to make program to shutdown remote PC using magic packet , is it possible use the code as same as the WakeOnLan? If it possible can you please help me to figured it out? Because I was stuck in my project to force shutdown the remote pc. Thankyouuu very much if you can help.

@AlexKorsakov
Copy link
Author

Hello! As far as I know, WOL is only used to wake up your PC. Shutting down the remote PC is a little more difficult. There is need to have an access to your operating system. First, you need to define:

  1. How remote access will be arranged
  2. How to shutting down PC
    As I talking earlier, you can check this project, which I've done in study time too. It used UDP protocol for remote connection, desktop application as server and windows service as client (which shutting down client PC).
    Where are you stuck in your project?

@wilsonangga
Copy link

In my project, I have client and server application. What I need to do is, if the user close the client application by end it in task manager (end task), I should make the server detect it and shutdown the client PC. Do you have any idea to simply solve this problem? Thanks for your answer before.

@AlexKorsakov
Copy link
Author

AlexKorsakov commented Aug 14, 2021

@wilsonangga you can use a Windows Service and client app together on a host. Service will detect a running client app and can shutdown host. Service works hiddenly for user, but for installation administration rights could be required.
Check this tutorial.

@wilsonangga
Copy link

I will try it. Thankyou very much for you suggestion. You have helped so much.

@satosCZ
Copy link

satosCZ commented Sep 7, 2021

Thank you, this will help me. I'll try it later. Remote shutdown and restart for me is allready solved. I used server-client, where user send request to shutdown in type of some message eg. "Shutdown-123". Other pc will receive the message and by request it will start command in cmd (all in background > "shutdown -s -f" / "shutdown -r -f"). It's lightway solution which didn't need admin permision. Once again thank you for WOL.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment