Wake On LAN em C#

De modo a evitar deslocações e poupar energia podemos utilizar a funcionalidade de Wake On LAN para "acordar" um computador. Resumidamente teremos que ter essa funcionalidade disponível e activa na BIOS de modo a poder ser recebido e processado o "pacote mágico" que irá acordar a máquina. O pacote mágico é constituído por 6 bytes com 0xFF seguido de 16 vezes o endereço MAC da placa de rede do computador. Este pacote será enviado por broadcast.


//Construct the packet
List<byte> packet = new List<byte>();

//Trailer of 6 FF packets
for (int i = 0; i < 6; i++)
packet.Add(0xFF);

//Repeat 16 time the MAC address (which is 6 bytes)
for (int i = 0; i < 16; i++)
packet.AddRange(macAddress);

//Send the packet to broadcast address
UdpClient client = new UdpClient();
client.Connect(IPAddress.Broadcast, 7); //Any UDP port will work, normally 0, 7 or 9
client.Send(packet.ToArray(), packet.Count);
client.Send(packet.ToArray(), packet.Count);
client.Send(packet.ToArray(), packet.Count);



Nos testes que fiz muitas vezes apenas um envio não resultava de modo a que optei por enviar o pacote 3 vezes.

Fonte do código:
http://blog.memos.cz/index.php/team/2008/06/12/wake-on-lan-in-csharp

0 comentários: