局域网唤醒脚本适用于 Mac,但不适用于 Windows 7

局域网唤醒脚本适用于 Mac,但不适用于 Windows 7

我在本地网络上有一台 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') 

相关内容