我有一台带有dynamicIP地址的路由器,我想configurationLAN唤醒function。
我如何发送神奇的数据包到PC? 我是否configuration路由器将UDP端口6转发到PC? 我将如何从networking上的另一台PC发送数据包? networking外的PC如何?
这甚至有可能吗?
更新:这是从我的路由器相关的configuration屏幕。 有希望吗?
http://files.quickmediasolutions.com/router.png
静态ARP是完全不必要的
你的第一部分是正确的。 要将WOL数据包发送到networking,请将来自特定端口的数据包转发到本地networking的广播地址(255.255.255.255),或者要启用WOL访问的任何子网范围。
数据包的目标MAC地址应设置为以太网广播或FF:FF:FF:FF:FF:FF。 数据包的以太网types应该是0x0842(Wake On Lan)。
那么,电脑的MAC被唤醒的地方呢?
魔术包本身。 WOL数据包只是真的打算通过本地networking发送。 他们对链路层以上的任何协议都是盲目的。 为了避开这个限制,他们将广播(以太网广播而不是IP广播)给networking上的所有计算机,每台计算机都会读取这个魔法数据包,看看它们是否被调用。
魔术包的内容包含被唤醒的计算机的MAC地址的16个副本。
框架结构如下:
DA -> SA -> Type -> Magic Packet
哪里:
DA = FF:FF:FF:FF:FF:FF SA = [whatever the source MAC is] Type = 0x0842 Magic = [The actual destination MAC repeated 16x]
如果要testing传入的数据包格式是否正确,请在Wireshark中使用以下filter:
ether dst FF:FF:FF:FF:FF:FF and ether proto 0x0842
基本上,WOL应用程序需要能够创build欺骗以太网目标地址的数据包。 网上有工具可以做这样的事情,但是我不熟悉它们。
注意:我知道这个的原因是因为我是SharpPcap的WOLparsing器(C#中的pcap包装器)的作者。 如果有足够的需求,我可以扩展我的控制台应用程序,使其包含数据包发送(目前只能嗅探)并将其作为OSS项目提供。
更新:@Evan安德森提出了一个很好的观点,我忘了提及。 在局域网上广播传入的数据包通常是一个坏主意。 这个解决scheme可以工作,但这只是一个解决Wake On Lan协议限制的方法。
我所概述的技术将适用于WOLdevise的局域网上的任何计算机,但如果有人发送特制的数据包,则可能会打开networking,将其用作攻击(Smurf / Fraggle / Papasmurf)放大器到WOL端口。
Evan Anderson的方法在技术上更安全,但仅限于单播。
这听起来像WOL的一些阅读大概是为了第一。 关于以太网,ARP和UDP / IP的一些额外的阅读也可能是有序的。
客户端的WOL行为是由“魔术包”触发的。 神奇的数据包可以被封装在任何types的传输中(UDP over IP,IPX等)。 神奇的数据包字节序列只需要在被唤醒的NIC的数据包的有效负载中。
在局域网上发送WOL请求很容易。 获取一个实用程序来制作魔术包(如Windows的mc-wol )并开火。
从Internet发送WOL请求更成问题。 您正处于正确的轨道上,将从互联网到局域网的UDP端口端口转发,但还有其他一些问题。
您有一个来自Internet的单播WOL请求的问题,如下所示:WOL客户端计算机的MAC地址不会位于路由器的ARP表中,因为在WOL客户端断电的情况下,这样的ARP条目将会老化。 当您的路由器收到一个IP数据包端口 – 在WOL客户端断电时,将其转发到WOL客户端的IP地址,并且其MAC地址超出ARP表,则路由器将无法将数据包传送到客户端。 你将需要一个具有静态ARPfunction的路由器来完成这项工作。
广播路线更不可能。 由于您的路由器后面可能没有公共子网,而是使用NAT在局域网上共享一个公共IP地址,因此无法将数据包远程定位到您的局域网子网的子网广播地址,路由器(如果它可以转发定向广播)将产生一个带有WOL包的二层广播,以允许WOL客户端“看到”它。
你的局域网上的WOL将很容易。 WOL在互联网上并不那么简单。
我不会重复你为什么会遇到问题,而只是简单地描述一下我如何克服埃文已经解释过的那些问题。
我的防火墙/路由器是基于Linux的,这意味着我可以在其上运行命令。 为了唤醒局域网中的机器,我首先SSH进入防火墙,然后运行一个Perl脚本创build魔术数据包并将其发送到局域网。 目标的MAC地址可以作为命令行parameter passing,也可以根据需要硬编码。
当然,如果你不能在你的路由器上执行命令,你将需要find另一种方法。
正如Evan和John已经报道的那样,互联网上的WoL不太可能奏效。
您需要防火墙内的某种设备,可以代表您发送数据包。 我们使用托pipe在我们Intranet上的Web应用程序。 听起来像这不是一个选项,所以真的只有三个其他选项,想到:
我最近发现端口转发到xxx255 UDP端口工作在一个路由器,但不是另一个。
我通过telnet arp add xxxy FF:FF:FF:FF:FF:FF为路由器添加了一个静态ARP条目,用于未使用的内部IP xxxy至FF:FF:FF:FF:FF:FF (广播MAC) 这里和端口转发的WOL UDP端口,而不是使用的IP,这从我的WOL从互联网工作。