我想检测一下 Wake On Lan 是否可行。
在我的路由器(Tomato 固件)上有一张包含信息的表格 - 当显示设备“活动(在 ARP 中)”时 - 可以通过 WOL(离线 linux pc)打开此设备。
我想知道它是通过仅路由器功能实现的,还是我可以在 C# 或 C 中实现?函数 SendArp 可以检测 MAC 地址并执行“arping”,但这不是我想做的。
我想检测一下 Wake On Lan 是否可行。
在我的路由器(Tomato 固件)上有一张包含信息的表格 - 当显示设备“活动(在 ARP 中)”时 - 可以通过 WOL(离线 linux pc)打开此设备。
我想知道它是通过仅路由器功能实现的,还是我可以在 C# 或 C 中实现?函数 SendArp 可以检测 MAC 地址并执行“arping”,但这不是我想做的。
您的路由器无法检测您的计算机(或任何其他网络设备)是否支持局域网唤醒。您的路由器所能做的就是发送一个 WOL 包并希望它会唤醒。
如果调用设备尊重数据包并唤醒必须在设备本身进行配置,并且 OSI 层 4 到 1 中没有任何内容可以告诉您设备是否支持 WOL。
如果您想使用 C# 从您的 PC 发送 WOL 数据包,您可以使用您最喜欢的搜索引擎找到大量示例。这是Bart de Smet 的一个例子。
消息“Active (In ARP)”并不意味着您的路由器检测到可以发送 WOL 数据包。它只是告诉您,在路由器 ARP 缓存中,当前是该 IP 或 MAC 地址的匹配条目。这样的缓存具有每个网络设备(也包括您的 PC)。在 Windows 中,只需打开命令行并输入arp -a
即可查看 Windows 机器的缓存。在这里,您将获得用于发送到 IP 地址的已存储 mac 地址的列表。黑帽可以尝试操纵此缓存以重定向您的 ip 通信。有关这方面的更多信息,请参见wikipedia。
因此,此消息只是告诉您,您的路由器最近与该设备建立了 ip 连接。而已。但它无法告诉您您的设备当前是否能够处理 WOL 数据包(因为它是否已连接电源)。
您可以从 BIOS 获得有关机器是否支持 WOL 的信息。
如果它受支持,请确保它已打开。许多机器默认禁用该功能。
要通过网络路由 WOL 数据包,您需要将路由器上的端口 9 转发到 255.255.255.255(广播到所有)IP 地址。
您最好查看http://msdn.microsoft.com/en-us/library/ff566341(VS.85).aspx
这将让您查询布尔值以获取电源管理和设备特定的“启用唤醒”状态。
鉴于它是 WMI,您应该能够远程访问它,但它确实需要设置几个注册表项来公开 WMI 类。