实现逻辑
利用UDP协议发送特定格式的魔术包,以远程唤醒具有特定MAC地址的目标计算机。目标计算机的BIOS和网络配置需要支持Wake-on-LAN(WOL)功能,并且需要在目标计算机上配置正确的网络唤醒设置。
源码在最后
准备工作
- 进入Bios,找到高级设置----》然后找到类似的电源管理、或者设备唤醒的字眼,各个主板所在的位置也不同,然后找到PCI-E设备唤醒,把这个设置为启用,然后保存,等待几秒电脑启动。
- 打开电脑的设备管理器,按照图示操作
3.win+r打开cmd 输入ipconfig/all。找到物理地址,复制出来等会要用。
4.打开允许远程协助,位置:打开控制面板-----系统和安全
如图所示按照此设置就OK了
源代码
private bool SendWakeOnLanPacket(string macAddress, string ipAddress, int port){try{// 解析MAC地址byte[] macBytes = ParseMacAddress(macAddress);// 创建魔术包byte[] packet = new byte[102];for (int i = 0; i < 6; i++){packet[i] = 0xFF;}for (int i = 1; i <= 16; i++){Buffer.BlockCopy(macBytes, 0, packet, i * 6, 6);}// 创建UDP客户端UdpClient client = new UdpClient();client.Connect(IPAddress.Parse(ipAddress), port);client.Send(packet, packet.Length);client.Close();return true;}catch (Exception ex){MessageBox.Show("发送魔术包时出错: " + ex.Message);return false;}}private byte[] ParseMacAddress(string macAddress){string[] hex = macAddress.Split(':');if (hex.Length != 6){throw new ArgumentException("无效的MAC地址格式。");}byte[] bytes = new byte[6];for (int i = 0; i < 6; i++){bytes[i] = Convert.ToByte(hex[i], 16);}return bytes;}private void button1_Click(object sender, EventArgs e){string macAddress = txtMacAddress.Text;string ipAddress = "192.168.1.20";int port = 30000;if (SendWakeOnLanPacket(macAddress, ipAddress, port)){MessageBox.Show("魔术包发送成功,等待目标电脑唤醒。此过程需要1-2分钟,请查看你的向日葵或者todesk是否显示在线!");}else{MessageBox.Show("魔术包发送失败,请检查输入和网络配置。");}}
此时你就可以实现在局域网内部开启电脑。
广域网远程
假设你的A电脑要远程开机B电脑,B电脑在局域网内,此时需要设置B电脑的路由器的端口转发,
使用场景:晚上突然需要加班,我在家用家里的电脑远程开启公司内的电脑,那么此时就是广域网。符合上述概念。
路由器设置:进入到公司B电脑所在路由器的管理界面,找到高级设置,有个叫端口转发或者虚拟服务器的页签,千万记住、不是端口触发,端口触发设置不了局域网内部的ip地址。
我的路由器叫虚拟服务器,进去之后点击新增,应该会有外部端口、内部端口、ip地址等等,类似于这样
服务名称随便起一个,外部端口范围随便写,比如说4666-4666
内部端口4666-4666、再写入你的B电脑的ip地址,然后就可以实现在家远程自己的电脑啦。