C#使用MAC地址通过网络唤醒局域网计算机
C#使用MAC地址通过网络唤醒局域网计算机,目标机器需要设置过主板允许网络唤醒,要不无法启动。以下为控制台引用程序,测试有效。功能和MAGPAC软件唤醒语句网电脑效果一样。
using System; using System.Linq; using System.Net; using System.Net.NetworkInformation; using System.Net.Sockets; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.IO; namespace ConsoleApp1 { class Demo { public static void Main() { WakeComputer("90-E6-BA-40-A7-95"); Console.ReadKey(); } async static void WakeComputer(string mac) { await WOL.WakeOnLan(mac); } } public static class WOL { public static async Task WakeOnLan(string macAddress) { 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("224.0.0.1")) // 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); } } } }
代码来源:https://stackoverflow.com/questions/861873/wake-on-lan-using-c-sharp
加支付宝好友偷能量挖...