C# WakeOnLan 唤醒局域网内电脑
首先需要开启被唤醒电脑的WOL功能
进入BIOS,寻找有关WOL相关项,我的电脑BIOS里面叫做network stack
打开网卡界面,选中网卡右键打开属性
然后点击配置
选择高级,启用唤醒幻数据包
选择电源管理,勾选以下2个选项
C#唤醒局域网内电脑代码
namespace WakeOnLan { internal class Program { public static void Main() { WakeComputer("60-E3-2B-D0-79-D3","192.168.189.138"); Thread.Sleep(1000); Console.WriteLine("ok"); Console.ReadKey(); } async static void WakeComputer(string mac,string ip) { await WOL.WakeOnLan(mac, ip); } } public static class WOL { public static async Task WakeOnLan(string macAddress,string ipAddress) { byte[] magicPacket = BuildMagicPacket(macAddress); foreach (NetworkInterface networkInterface in NetworkInterface.GetAllNetworkInterfaces().Where((n) => n.NetworkInterfaceType != NetworkInterfaceType.Loopback && n.OperationalStatus == OperationalStatus.Up)) { IPInterfaceProperties iPInterfaceProperties = networkInterface.GetIPProperties(); foreach (MulticastIPAddressInformation multicastIPAddressInformation in iPInterfaceProperties.MulticastAddresses) { IPAddress multicastIpAddress = multicastIPAddressInformation.Address; if (multicastIpAddress.ToString().StartsWith("ff02::1%", StringComparison.OrdinalIgnoreCase)) // Ipv6: All hosts on LAN (with zone index) { UnicastIPAddressInformation unicastIPAddressInformation = iPInterfaceProperties.UnicastAddresses.Where((u) => u.Address.AddressFamily == AddressFamily.InterNetworkV6 && !u.Address.IsIPv6LinkLocal).FirstOrDefault(); if (unicastIPAddressInformation != null) { await SendWakeOnLan(unicastIPAddressInformation.Address, multicastIpAddress, magicPacket); break; } } else if (multicastIpAddress.ToString().Equals(ipAddress)) // Ipv4: All hosts on LAN { UnicastIPAddressInformation unicastIPAddressInformation = iPInterfaceProperties.UnicastAddresses.Where((u) => u.Address.AddressFamily == AddressFamily.InterNetwork && !iPInterfaceProperties.GetIPv4Properties().IsAutomaticPrivateAddressingActive).FirstOrDefault(); if (unicastIPAddressInformation != null) { await SendWakeOnLan(unicastIPAddressInformation.Address, multicastIpAddress, magicPacket); break; } } } } } static byte[] BuildMagicPacket(string macAddress) // MacAddress in any standard HEX format { macAddress = Regex.Replace(macAddress, "[: -]", ""); byte[] macBytes = new byte[6]; for (int i = 0; i < 6; i++) { macBytes[i] = Convert.ToByte(macAddress.Substring(i * 2, 2), 16); } using (MemoryStream ms = new MemoryStream()) { using (BinaryWriter bw = new BinaryWriter(ms)) { for (int i = 0; i < 6; i++) //First 6 times 0xff { bw.Write((byte)0xff); } for (int i = 0; i < 16; i++) // then 16 times MacAddress { bw.Write(macBytes); } } return ms.ToArray(); // 102 bytes magic packet } } static async Task SendWakeOnLan(IPAddress localIpAddress, IPAddress multicastIpAddress, byte[] magicPacket) { using (UdpClient client = new UdpClient(new IPEndPoint(localIpAddress, 0))) { await client.SendAsync(magicPacket, magicPacket.Length, multicastIpAddress.ToString(), 9); } } } }