维基百科说:
局域网上的唤醒(WoL)是一种以太网或令牌环计算机网络标准,允许计算机被网络消息打开或唤醒。
但是,在另一节中:
对魔法包的响应 ...大多数WoL硬件通常在默认情况下被阻塞,需要在使用系统BIOS时启用。在某些情况下,需要从操作系统进一步配置,例如通过Windows操作系统上的设备管理器网卡属性进行配置。
为什么?为什么我们还需要在操作系统中启用WOL?
问题是:
当我实现WOL程序从本地服务器打开网络(由局域网连接)中的其他PC时,我的实际问题就出现了。但是失败了,因为它需要PC中的一些额外配置:
ethtool -s eno1 wol g)。是否有任何方法可以绕过OS配置,只允许BIOS设置中的WOL?还是密码问题?
例如:
#include <QByteArray>
#include <QDebug>
#include <QUdpSocket>
#include <thread>
auto sendMagicPacket(QString const& ip, QString const& mac)
{
std::pair<bool, QString> result = {true, ""};
///
/// \note Constants are from
/// https://en.wikipedia.org/wiki/Wake-on-LAN#Magic_packet
///
constexpr auto magicPacketLength = 102;
constexpr auto payloadLength = 6;
constexpr auto payloadValue = static_cast<char>(0xFF);
constexpr auto defaultPort = 9; // Could be 0, 7, 9
char toSend[magicPacketLength];
for (int i = 0; i < payloadLength; ++i)
{
toSend[i] = payloadValue;
}
auto const macSplited = mac.split(':');
auto const macLength = macSplited.size();
for (int j = payloadLength; j < magicPacketLength; j += macLength)
{
for (int i = 0; i < macLength; ++i)
{
toSend[i + j] = static_cast<char>(macSplited[i].toUInt(nullptr, 16));
}
}
QUdpSocket socket;
auto const writtenSize =
socket.writeDatagram(toSend, magicPacketLength, QHostAddress(ip), defaultPort);
if (writtenSize != magicPacketLength)
{
result = {false, "writtenSize(" + QString::number(writtenSize) +
") != magicPacketLength(" +
QString::number(magicPacketLength) +
"): " + socket.errorString()
};
}
return result;
}
int main()
{
for (int i = 0; i < 5; ++i)
{
auto const result = sendMagicPacket("192.168.11.31", "1c:1c:1e:1f:19:15");
if (not result.first)
{
qDebug() << result.second;
}
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}发布于 2021-09-11 07:06:51
只有在没有标准化的方法为所有硬件启用WoL的情况下,操作系统才会涉及到。因此,通常需要特定硬件的设备驱动程序才能启用硬件的功能。加载操作系统通常会为您提供这样的设备驱动程序。
运行每个启动程序都应该相当简单,特别是因为(如果内存正常的话)运行两次(或更多)应该是无害的,所以您可以将它添加到.bashrc中(举个例子)。如果您需要确保它只在启动时发生一次,而不是每次登录时,您可以添加一个init脚本来这样做。man init-d-script应该能让你走得很容易。
您必须启用它,因为大多数BIOSes默认将其禁用,因此除非启用它,否则它将无法工作。
为什么在默认情况下禁用它:不太确定,但我的猜测是,这只是因为大多数人不使用它。
https://stackoverflow.com/questions/69140443
复制相似问题