**Wake-on-LAN (WoL)** 讓管理員遠程喚醒休眠/關機電腦,核心是發送 **Magic Packet**:6 字節 0xFF + 16 次重複目標 MAC 位址(共 102 字節)。本文提供完整 C# 實現,含 MAC 解析、封包組裝、UDP 廣播發送。
ipconfig /all 查看「實體位址」。using System;
using System.Net;
using System.Net.Sockets;
using System.Windows.Forms;
public class WakeOnLan {
private readonly UdpClient _udp = new UdpClient();
private IPEndPoint _ep;
///
/// 發送喚醒封包
///
/// 目標 MAC (格式: "00-11-22-33-44-55" 或 "001122334455")
/// UDP 埠 (通常 7 或 9)
/// 廣播位址 (預設 255.255.255.255)
public void WakeUp(string mac, int port = 7, string broadcastIp = "255.255.255.255") {
byte[] packet = BuildMagicPacket(mac);
_ep = new IPEndPoint(IPAddress.Parse(broadcastIp), port);
try {
_udp.Send(packet, packet.Length, _ep);
MessageBox.Show("Magic Packet 已發送", "完成");
} catch (SocketException ex) {
MessageBox.Show($"發送失敗: {ex.Message}", "錯誤");
}
}
///
/// 組裝 Magic Packet: 6xFF + 16xMAC
///
private static byte[] BuildMagicPacket(string mac) {
byte[] macBytes = ParseMac(mac);
byte[] packet = new byte[102];
// 前 6 字節 0xFF
for (int i = 0; i < 6; i++) packet[i] = 0xFF;
// 後 96 字節: 16 次 MAC
for (int i = 6; i < 102; i++) packet[i] = macBytes[i % 6];
return packet;
}
///
/// 解析 MAC 字串為 6 字節陣列
///
private static byte[] ParseMac(string mac) {
mac = mac.Replace("-", "").Replace(":", "").Replace(" ", "");
if (mac.Length != 12) throw new ArgumentException("MAC 格式錯誤");
byte[] bytes = new byte[6];
for (int i = 0; i < 6; i++)
bytes[i] = Convert.ToByte(mac.Substring(i * 2, 2), 16);
return bytes;
}
}
var wol = new WakeOnLan();
wol.WakeUp("00-11-22-33-44-55", 9); // 埠 9 (Discard) 或 7 (Echo)
UdpClient 預設不啟用廣播,**需設置** _udp.EnableBroadcast = true(或在建構子指定 new UdpClient { EnableBroadcast = true })。ip directed-broadcast 或 WoL 代理。

幾十行代碼即可賦予應用遠程喚醒能力,適合 IT 自動化運維、排程備份喚醒、智慧家居整合等場景。