Wake-on-LAN (WoL) 利用網卡在關機狀態下仍監聽特定「魔術封包」:6 字節 `0xFF` + 16 次重複目標 MAC 地址(共 102 字節),以 UDP 廣播發送至目標子網。
public static byte[] GetMagicPacket(string mac) {
// 1. 解析 MAC "00-11-22-33-44-55" -> byte[6]
byte[] macBytes = mac.Split('-', ':').Select(s => Convert.ToByte(s, 16)).ToArray();
// 2. 組裝 102 字節封包
byte[] packet = new byte[102];
for (int i = 0; i < 6; i++) packet[i] = 0xFF; // 同步流
for (int i = 6; i < 102; i++) packet[i] = macBytes[(i - 6) % 6]; // 16 遍 MAC
return packet;
}
public void WakeUp(string mac, string broadcastIp, int port = 9) {
byte[] packet = GetMagicPacket(mac);
using (UdpClient client = new UdpClient()) {
client.EnableBroadcast = true; // 關鍵:允許廣播
IPEndPoint ep = new IPEndPoint(IPAddress.Parse(broadcastIp), port);
client.Send(packet, packet.Length, ep);
}
}
| 參數 | 含義 | 典型值 |
|---|---|---|
| MAC | 目標機器網卡物理地址 | `00:11:22:33:44:55` |
| Broadcast IP | 目標子網廣播地址 | 192.168.1.255(/24 網段) |
| Port | UDP 端口,IANA 保留 9 (Discard) 或 7 (Echo),常用 9 | 9 |
掌握上述細節,即可構建穩定可靠的遠程喚醒工具。