Sunday, April 02, 2006 3:25 PM
bart
Wake on LAN in C#
Some years ago I created a WOL client for Visual Basic 6 using WinSock stuff which was a pretty nice project that wasn't so straightforward to do. Today, I'm creating a little lightweight management tool to apply configuration changes to computers in a network over night, even when the machines are asleep. Shutting down a machine after maintenance is pretty simple to do using the ExitWindowsEx API, but waking a machine up requires some WOL functionality. So I decided to recreate the application (which I couldn't find anymore in my messy non-existing archive ;-)) in managed code (.NET Framework 2.0). More information about WOL can be found on
Wikipedia.
Here's the code:
using System;
using System.Net;
using System.Net.Sockets;
namespace
WakeOnLan
{
class
Program
{
static
void Main(string[] args)
{
byte[] mac = new
byte[] {0x00, 0x0F, 0x1F, 0x20, 0x2D, 0x35};
WakeUp(mac);
}
///
<summary>
///
Sends a Wake-On-Lan packet to the specified MAC address.
/// </summary>
/// <param
name="mac">Physical MAC address to send WOL
packet to.</param>
private static
void WakeUp(byte[] mac)
{
//
// WOL packet is
sent over UDP 255.255.255.0:40000.
//
UdpClient
client = new UdpClient();
client.Connect(IPAddress.Broadcast,
40000);
//
// WOL packet contains a 6-bytes trailer and 16 times a 6-bytes
sequence containing the MAC address.
//
byte[]
packet = new byte[17 *
6];
//
// Trailer of 6 times 0xFF.
//
for (int
i = 0; i < 6; i++)
packet[i] = 0xFF;
//
// Body of magic
packet contains 16 times the MAC address.
//
for (int
i = 1; i <= 16; i++)
for (int
j = 0; j < 6; j++)
packet[i * 6 + j] = mac[j];
//
// Submit WOL
packet.
//
client.Send(packet,
packet.Length);
}
}
}
Del.icio.us |
Digg It |
Technorati |
Blinklist |
Furl |
reddit |
DotNetKicks
Filed under: Personal