远程唤醒
远程开机Wake onLAN(WOL),俗称远程唤醒,是现在很多网卡都支持的功能。而远程唤醒的实现,主要是向目标主机发送特殊格式的数据包,是AMD公司制作的MagicPacket这套软件以生成网络唤醒所需要的特殊数据包,俗称魔术包(Magic Packet)。MagicPacket格式虽然只是AMD公司开发推广的技术,并非世界公认的标准,但是仍然受到很多网卡制造商的支持,因此许多具有网络唤醒功能的网卡都能与之兼容。
原理上我们不用深入,实现上是发一个BroadCast包,包的内容包括以下数据就可以了。FF FF FF FF FF FF,6个FF是数据的开始,紧跟着16次MAC地址就可以了。
有了以上的基础知识,就要开始我们的项目了。用计算机(pc-A)唤醒局域网中的计算机(pc-B)
获取pc-B的Mac地址
win键+R键 输入CMD弹出命令行
通过命令行输入ipconfig/all可以得到pc-B的MAC地址
设置pc-B
首先需要进行BIOS和网卡设置,启动计算机,进入BIOS参数设置。选择电源管理设置“Power Management Setup”选项,将“Wake up on LAN”项和“Wake on PCI Card”项均设置为“Enable”,启用该计算机的远程唤醒功能。(一般电脑有的都是默认开启的)
设置网卡
打开设备管理器找到网络适配器
选择自己的网卡,右击->属性->高级
将唤醒魔包和魔术封包唤醒启用,并切换到电源管理选项中,如图选择。
win11电脑设置部分可能略有不同请根据实际情况更改。
远程开机代码
public void borad_Start()
{
byte[] mac = new byte[6];
//MAC地址分配到mac数组中
mac[0] = Convert.ToByte("00", 16);
mac[1] = Convert.ToByte("AC", 16);
mac[2] = Convert.ToByte("00", 16);
mac[3] = Convert.ToByte("B8", 16);
mac[4] = Convert.ToByte("85", 16);
mac[5] = Convert.ToByte("00", 16);
WakeUp(mac);
}
public static void WakeUp(byte[] mac)
{
try
{
UdpClient client = new UdpClient();
client.Connect(IPAddress.Broadcast, 9090);
byte[] packet = new byte[17 * 6];
for (int i = 0; i < 6; i++)
packet[i] = 0xFF;
for (int i = 1; i <= 16; i++)
for (int j = 0; j < 6; j++)
packet[i * 6 + j] = mac[j];
int result = client.Send(packet, packet.Length);
}
catch (Exception)
{
}
}
只需要更改borad_Start()函数中物理地址MAC ,然后调用borad_Start函数即可远程开机。
另需注意,研华工控机可能不适用于此方法(部分电脑不适用于),原因是电源设置问题可能稍有偏差,代码部分没问题!!!
以上及是我对远程开机的示例代码,欢迎大家交流学习!!!
本功能只适用于局域网,至于跨网段等未尝试,等后期测试过后,再做更新!!!!