如何让局域网唤醒工作?

Nat*_*man 6 networking wake-on-lan

我在路由器后面有一台 PC,我想为 LAN 唤醒配置一个动态 IP 地址。

如何将魔术包发送到PC?我是否将路由器配置为将 UDP 端口 6 转发到 PC?我将如何从网络上的另一台 PC 发送数据包?网络外的PC怎么样?

这甚至可能吗?

更新:这是我的路由器的相关配置屏幕。有希望吗?

http://files.quickmediasolutions.com/router.png

Eva*_*son 6

听起来可能首先要阅读有关 WOL 的一些资料。一些关于以太网、ARP 和 UDP/IP 的额外阅读也可能是有序的。

客户端中的 WOL 行为由“魔术数据包”触发。魔术数据包可以封装在任何类型的传输中(UDP over IP、IPX 等)。魔术数据包字节序列只需要位于要唤醒的 NIC 将接收的数据包的有效负载中。

在 LAN 上发送 WOL 请求很容易。获取一个实用程序来制作魔法数据包(如Windows 的mc-wol)并开火。

从 Internet 发送 WOL 请求更成问题。您在正确的轨道上使用端口将 UDP 端口从 Internet 转发到 LAN,但还有其他问题。

您遇到了来自 Internet 的单播 WOL 请求的问题,如下所示:您的 WOL 客户端计算机的 MAC 地址不会出现在路由器的 ARP 表中,因为当 WOL 客户端关闭时,这样的 ARP 条目会过期. 当您的路由器接收到端口转发到 WOL 客户端 IP 地址的 IP 数据包时,而 WOL 客户端已关闭且其 MAC 地址已超出 ARP 表,路由器将无法将数据包传送到客户端。您将需要一个具有静态 ARP 功能的路由器来完成这项工作。

广播路由就更不可能了。由于您的路由器后面可能没有公共子网,而是使用 NAT 来共享 LAN 上的单个公共 IP 地址,因此无法将数据包远程寻址到 LAN 子网的子网广播地址,例如路由器(如果它可以转发定向广播)将生成带有 WOL 数据包的第 2 层广播,以允许 WOL 客户端“看到”它。

LAN 上的 WOL 将很容易。互联网上的 WOL 并非如此简单。


Eva*_*ice 3

静态ARP完全没有必要

你的第一部分是对的。要将 WOL 数据包放入网络,请将来自特定端口的数据包转发到本地网络的广播地址 (255.255.255.255) 或您希望启用 WOL 访问的任何子网范围。

数据包的目标 MAC 地址应设置为以太网广播或 FF:FF:FF:FF:FF:FF。数据包的以太网类型应为 0x0842(Wake On Lan)。

那么,被唤醒的计算机的MAC去了哪里呢?

在魔法包本身。WOL 数据包实际上只是为了通过本地网络发送。他们对链路层之上的任何协议都视而不见。为了解决这个限制,它们向网络上的所有计算机进行广播(以太网广播而不是 IP 广播),每台计算机都会读取魔术数据包以查看它们是否是被调用的计算机。

魔术数据包的内容包含被唤醒计算机的 MAC 地址的 16 个副本。

框架结构如下:

DA -> SA -> Type -> Magic Packet
Run Code Online (Sandbox Code Playgroud)

在哪里:

DA = FF:FF:FF:FF:FF:FF
SA = [whatever the source MAC is]
Type = 0x0842
Magic = [The actual destination MAC repeated 16x]
Run Code Online (Sandbox Code Playgroud)

如果您想测试传入的数据包格式是否正确,请在 Wireshark 中使用以下过滤器:

ether dst FF:FF:FF:FF:FF:FF and ether proto 0x0842
Run Code Online (Sandbox Code Playgroud)

基本上,WOL 应用程序需要能够创建欺骗以太网目标地址的数据包。网上有一些工具可以做这样的事情,但我不熟悉它们。

注意:我对此了解这么多的原因是因为我是SharpPcap(C# 中的 pcap 包装器)的 WOL 解析器的作者。如果有足够的需求,我可以扩展我的控制台应用程序以包括数据包发送(目前仅嗅探)并将其作为 OSS 项目提供。

更新:@Evan Anderson 提出了一个很好的观点,我忘了提及。在 LAN 上广播传入数据包通常是一个坏主意。该解决方案可以工作,但它只是一种规避 LAN 唤醒协议限制的黑客手段。

我概述的技术适用于 LAN 上的任何计算机(按照 WOL 的设计方式),但如果有人发送特制数据包,则可能会打开您的网络,将其用作攻击 (Smurf/Fraggle/Papasmurf) 放大器到 WOL 端口。

Evan Anderson 的方法在技术上更安全,但仅限于单播。