Wake on Lan 的 UDP 包(Magic Packet)一共 107 个字节
前 6 个字节是 6 个 255(0xFF),后面是重复了 16 次的目标网卡 MAC 地址,一共 17 * 6 = 107 Byte
C# 中可以使用 UdpClient 发送 UDP 包,代码如下
using System.Globalization; using System.Net; using System.Net.Sockets; namespace WoLTest { internal class Program { static void Main() { var ipAddr = "192.168.xxx.xxx"; var macAddr = "12:34:56:78:9A:BC"; Wake(ipAddr, macAddr); } static void Wake(string ipAddress, string macAddress) { var udpClient = new UdpClient() { EnableBroadcast = true }; udpClient.Connect(IPAddress.Parse(ipAddress), new Random().Next(0, 65535)); var magicPacket = Enumerable.Repeat(Convert.ToByte(255), 17 * 6).ToArray(); byte[] macAddrBytes = macAddress.Split(new char[] { ':', '-' }).Select(str => byte.Parse(str, NumberStyles.HexNumber)).ToArray(); for (int i = 1; i <= 16; i++) for (int j = 0; j < 6; j++) magicPacket[i * 6 + j] = macAddrBytes[j]; udpClient.Send(magicPacket, magicPacket.Length); udpClient.Close(); } } }
需要网卡支持并开启 WoL(唤醒,有些驱动本地化名称为 “唤醒魔包”)功能,BIOS 开启 WoL,操作系统设置中对对应网卡开启唤醒