C# Wake on Lan 实现

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,操作系统设置中对对应网卡开启唤醒

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据