我在本地网络上有一台 Linux 服务器,该服务器设置为使用局域网唤醒。我复制了这逐字逐句地执行脚本,只是替换了示例使用中的 MAC 地址。当我在 Mac 上运行此脚本时,服务器被唤醒。当我从 Windows 7(32 位 Ultimate)运行它时,它什么也没做(请注意,脚本确实运行了,我添加了一个调试 raw_input() 来确认)。
答案1
这可能是防火墙。
答案2
我很少发现 WOL 是可靠的,即使对于获得美国环保署能源启动认证的机器也是如此。
在某些情况下,根据设备驱动程序是否正在处理 WOL 或 BIOS 或介于两者之间的其他程序,MAC 地址区分大小写。尝试发送两个帧,一个全大写,一个全小写。WakeOnLan('0a:1b:f5...')
再次拨打电话。
MAC 是 PowerPC MAC 还是 Intel MAC?可能是 Big-Endian 与 Little-Endian 之间的错误,导致未完成转换为网络字节格式。因此,接收器无法识别 MAC 地址。因此,它接收的不是 0A:1B:F5:...,而是 A0:B1:5F:...
再次将第三和第四个 MAC 地址输入到脚本中:
WakeOnLan('0A:1B:F5:...')
WakeOnLan('A0:B1:5F:...')
是什么让我想到了这一点 - 我有一台配备 Intel vPro 的 HPdc7800。根据我用来查看 MAC 或 GUID 的内容,许多识别信息在每个字节中向后显示。在 vPro 控制台上,从 vPro 网页,使用 BIOS,使用操作系统 - 很难通过 GUID 预分配机器活动目录。
只需花一点时间来编辑此脚本并添加以下内容:
WakeOnLan('uppercase and big endian')
WakeOnLan('uppercase and little endian')
WakeOnLan('lowercase and big endian')
WakeOnLan('lowercase and little endian')
在脚本中,示例无视整个字节是否明确定义,忽略任何前导零字节。我会明确输入前导零。谁知道谁编写了 NIC 用来标识自身的代码,以及在管理固件、普通 BIOS 或设备驱动程序的哪个级别处理它。
WakeOnLan('0:3:93:81:68:b2')