翼度科技»论坛 编程开发 .net 查看内容

.NET 网络唤醒

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
本文介绍下电脑设备关机的情况下如何通过网络唤醒设备,之前电源S状态 计算机Power电源状态- 唐宋元明清2188 - 博客园 (cnblogs.com) 有介绍过远程唤醒设备,后面这俩天了解多了点所以单独加个随笔
设备关机的情况下,使用网络唤醒的前提条件:
1. 被唤醒设备需要支持这WakeOnLine
首先是有线网口要支持,比如我司大屏有俩个Lan口但只有Lan1支持远程唤醒。然后主板需要支持网络唤醒,要确认可以通过BIOS-电源管理页面查看,如下有Wake by Lan。并且是开启状态

2. 接有线网络(关机状态下有线网络接口是黄灯闪烁的),另一端启动唤醒的设备需要与被唤醒设备处于同一局域网。
不支持无线网卡,因为设备关机情况下无线网卡是断电的!
我测试验证,是将大屏设备有线连接至一个路由器,然后笔记本连接路由器的wifi。大屏设备的ip是192.168.2.9,笔记本的ip是192.168.2.6。
拿到目标设备的IP以及有线Mac地址(可以在设备连接网络的属性里查看):

然后就可以使用发包工具MAGPAC.exe(下载:MAGPAC)试试唤醒,在设备关机的情况下发包就可以自动开机配置如下,输入IP以及Mac地址:

也可以自己写.NET代码调用,发数据包来唤醒:
  1. 1     private void TestButton_OnClick(object sender, RoutedEventArgs e)
  2. 2     {
  3. 3         string ip = "192.168.2.9";
  4. 4         string macAddress = "EC:D6:8A:A6:4B:7B";
  5. 5         SendWakeOnLan(ip,macAddress);
  6. 6     }
  7. 7
  8. 8     private static void SendWakeOnLan(string ipAddress, string macAddress)
  9. 9     {
  10. 10         try
  11. 11         {
  12. 12             // 将MAC地址转换为字节数组
  13. 13             byte[] macBytes = macAddress.Split(':').Select(x => Convert.ToByte(x, 16)).ToArray();
  14. 14             // 创建魔术包
  15. 15             byte[] magicPacket = new byte[6 + 16 * macBytes.Length];
  16. 16             for (int i = 0; i < 6; i++)
  17. 17             {
  18. 18                 magicPacket[i] = 0xFF;
  19. 19             }
  20. 20             for (int i = 0; i < 16; i++)
  21. 21             {
  22. 22                 Array.Copy(macBytes, 0, magicPacket, 6 + i * macBytes.Length, macBytes.Length);
  23. 23             }
  24. 24             // 使用UDP发送魔术包
  25. 25             UdpClient client = new UdpClient();
  26. 26             client.Connect(ipAddress, 9); // 9是WoL的默认端口
  27. 27             client.Send(magicPacket, magicPacket.Length);
  28. 28             client.Close();
  29. 29
  30. 30             Debug.WriteLine($@"唤醒包已发送至: {ipAddress},{macAddress}");
  31. 31         }
  32. 32         catch (Exception ex)
  33. 33         {
  34. 34             Debug.WriteLine("发送唤醒包时发生错误: " + ex.Message);
  35. 35         }
  36. 36     }
复制代码
直接远程唤醒关机设备,亲测有效!
1. 删除MAC地址中的分隔符(“:”),魔术数据包由6个0xFF字节后跟16次目标MAC地址
2. 通过UDP协议将数据包发送到指定IP和目标端口9
注意,不是广播而是指定IP发送数据包,网上有些说是用广播地址(255.255.255.255),我验证了是不起作用的。
上方Demo代码见仓库 kybs00/WakeOnLanDemo (github.com) 
 
 关键字:电源状态、远程唤醒、发包工具MAGPAC.exe
出处:http://www.cnblogs.com/kybs0/本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
来源:https://www.cnblogs.com/kybs0/p/18389269
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具