1. 场景:

因为新型肺炎的原因,交通受阻,无法去公司上班,只能在家远程工作,但是放假前服务器全关掉了,现在也没人去开,然后群里有人说服务器是支持远程唤醒的,可以远程启动,于是启动了部分服务器,但是对于不支持远程唤醒的服务器还是没办法。借此机会总结一下WOL技术的原理和操作方法。

2. 远程唤醒原理(WOL)

2.1 WOL原理

其实是网络唤醒,即Wake-on-LAN,通俗的讲成了远程唤醒。WOL可以实现通过网络启动的主要原因就是来自于网卡对WOL的支持。除此外,还有WOL的扩展Wake-on-Wireless-LAN(WoWLAN),即通过无线网卡来唤醒电脑,同样的也需要无线网卡的支持。不过目前来说,似乎大部分机器都无法直接通过无线网卡来唤醒。

WOL的原理是:通过向网卡发送一个特定格式的数据包,网卡识别到这个数据包之后,配合硬件等设备来启动电脑或者服务器。虽然电脑或服务器关机了,但是如果是支持WOL的网卡,则网卡仍然是通电的,所以仍然能够接受来自局域网络内的数据包。

特定的数据包称为唤醒魔包(Wake on Magic Packet),其数据格式如下:

FF FF FF FF FF FF MAC地址x16 密码段

前6个字节固定FF,后面跟网卡的物理地址重复16次,最后是4-6字节的密码段

将这个16进制的数据转换为二进制后,封装为UDP格式,然后发送到网络中,网卡接收到数据后进行处理,若为自己的MAC地址,则触发开机。

需要注意的是:发送数据包时最好采用UDP广播的形式,即例如192.168.0.255此类的地址,对192.168.0这个网段内的所有地址发送数据包。

2.2 python实现WOL唤醒

import socket
from binascii import a2b_hex

if __name__ == \'__main__\':
    addr = \'192.168.0.255\'
    port = 9
    udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    package = \'FFFFFFFFFFFF\'
    for i in range(0, 16, 1):
    	# 网卡地址
        package += \'B888E330D465\'
    package += \'000000000000\'
    udp.sendto(a2b_hex(package), (addr, port))

2.3 Java实现WOL唤醒

 public static void main(String[] args) {
        try {
            InetAddress inetAddress = InetAddress.getByName("192.168.0.255");
            int port = 9;
            StringBuilder data = new StringBuilder("FFFFFFFFFFFF");
            for (int i = 0; i < 16; i++) {
            	// 网卡地址
                data.append("B888E330D465");
            }
            data.append("000000000000");
            byte[] bytes = Hex.decodeHex(data.toString());
            DatagramSocket datagramSocket = new DatagramSocket();
            DatagramPacket packet = new DatagramPacket(bytes, bytes.length, inetAddress, port);
            datagramSocket.send(packet);
        } catch (DecoderException | IOException e) {
            e.printStackTrace();
        }

    }

3. 远程唤醒操作步骤

3.1 环境说明

身边没有服务器,而且只带了个华为的小本本回来,所以没办法用这个笔记本测试,于是就拿出了8年前买的联想的thinkpad来测试。它网卡是支持WOL的。

3.2 先说测试结果

关机状态无法唤醒,很可能是硬件问题导致的;
睡眠状态下可以成功唤醒。

3.3 操作流程

  • 在设备管理器中找到有线网卡,然后在“属性”中开启“魔术封包唤醒”以及“关机 网络唤醒”是否开启,然后在“电源管理”中打开“允许此设备唤醒计算机”。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 电源管理中关闭“快速启动”

    经过测试,“快速启动”对于休眠状态的唤醒无影响,但对于关机后唤醒是否有影响没测试到。

  • 记录下网卡地址

    找到对应网卡名称的物理地址记下来。

	ipconfig/all
  • 将待唤醒电脑休眠

  • 下载个WOL工具来发送数据包。发送工具手机上以及电脑上都有相应的工具。这里下载个电脑版的,例如AP WOL Tool:
    在这里插入图片描述
    填入IP、MAC地址、子网掩码、端口后,点击start(wow)进行发送魔术包。电脑将被重新唤醒

版权声明:本文为cnsec原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/cnsec/p/13286610.html