基于网络远程开关机的原理与实践

计算机网络运维中,远程关闭和启动计算机是常见的任务。这可以通过开发专门的软件来实现,但实际上大多数系统都自身就原生地拥有这些功能,本文在分析原理的基础上,基于系统本身的功能详细说明了基于网络的远程开关机的步骤。

1 远程开机

1.1 原理

网络远程开机,也被称作Wake On Lan,其原理很简单,就是计算机处于关闭状态时,网卡仍然处于激活状态,可以接收来自网络的数据包,如果收到的数据包符合特定的格式,那么就启动机器。

这种数据包是具有特定格式的UDP数据报,被称为“魔术包”。UDP端口不限,但很多实现都使用2034这个端口号。报文的载荷部分共102个字节,每六个字节为一组,这样就分成了17个组。其中第1组为固定的0xFF 0xFF 0xFF 0xFF 0xFF 0xFF,第2-17组中的每个组都是远程机器网卡的MAC地址。

由于远程网卡虽然处于活动状态,但并没有网络协议栈的软件功能,所以也就不存在IP地址的概念,所以“魔术包”通常是UDP广播包,因为UDP广播包会使用对应的以太网广播包发送。

1.2 实践

由于“魔术包”具有非常简单的格式,所以编写远程开机的软件也就非常容易,网上也可以找到很多现成的软件,而且大多数是免费的。

需要注意的是,机器自身的主板和网卡必须支持远程开机才行,2006年以后的机器大多数都支持这个功能,只是为了安全起见默认可能并没有开启。这就需要在BIOS里启用这项功能。不同的BIOS系统,启用的方式也不相同,一般都处于电源和启动的配置项中。

2 远程关机

2.1 原理

远程关机的原理也非常简单,系统本身都具有关机功能,远程关机只不过是用户通过网络登录系统然后执行关机命令而已。

2.2 实践

不同的系统具有不同的关机命令。常用的系统可以分为两类,一类是微软的Windows系列,另一类就是庞大的类Unix系统,包括但不限于Unix,Linux,MacOS。下面分别对其进行说明。

2.1 Windows系统

Windows系统支持通过net use 命令来远程登录系统,登陆后也就可以执行关机命令了。我们这里介绍的是不需要登录直接执行关机命令的方法。

Windows系统提供了远程关机的命令shutdown。具体格式如下:

Shutdown  –s  –m  \\目标机器IP  -t  提示秒数

这个命令的功能是,使用Guest账户登录目标机器,执行关机命令,在目标机器弹出关机提示窗口,“提示秒数”变为0时关闭机器。

经过测试,在大多数系统上执行上述命令都不会成功,很多情况下报错:拒绝访问(5)。原因就是Guest账户问题。经过反复测试,采用如下三个步骤后大多数系统都可以正常远程关机了。(注:该步骤在WindowsXPSP3和Windows8系统上测试通过,这里步骤以XP说明)

(1)启用Guest账户

远程关机使用的是Guest账户,所以首先需要启用这个账户。启用步骤如下:

右键单击“我的电脑”,选择“管理”,进入“计算机管理”控制台。

确保“账户已停用”处于不选状态。

(2)允许Guest用户从网络访问这台计算机

这需要把Guest用户从“拒绝从网络访问这台计算机”的组中删除。详细步骤截图如下:

(3)允许Guest账户从远端系统强制关机

这需要把Guest用户加入“从远端系统强制关机”的组中。步骤截图如下:

2.2 Unix类系统

这类系统都支持ssh远程登录,登陆后执行poweroff命令就可以完成关机。我们需要做的就是启用远程登录功能。

标签