我正在尝试制作一个电路,在以太网电缆进入计算机之前对其进行“拦截”,这样我就可以发送一个“魔幻包“通过电缆手动连接——例如按下按钮。
据我所知,要实现网络唤醒,您必须发送 6 个字节255
(十六进制的 FF FF FF FF FF FF),然后发送目标计算机的 MAC 地址十六次重复 - 总共 102 个字节。(来源:维基百科)我只是很难弄清楚如何手动发送这个魔术包,而不是通过路由器(如果可能的话)。
下面的草图说明了我正在尝试做的事情。
以太网电缆有 8 根线,其中最有趣的可能是 1、2、3 和 6 号线 - TX+、RX-、RX+ 和 RX-(插图)。
我正在尝试确定这个特定的串行协议如何工作,以及如何在像 Arduino 这样的开发板上实际使用它。本网站表示它可以是“RS423”或“RS422”。
所以我的问题是:我是否可以做到我想做的事情?如果可以,我该如何正确发送 Magic Packet?
答案1
正如您所写,WoL 魔包(帧)包含序列任何地方在其数据流中。
通常,WoL 数据包使用更高层的协议发送,因为这样更容易。只需发送一个包含广播地址 255.255.255.255 序列的 UDP 数据包(任何端口都可以,通常为 0、7 或 9)。
不过,祝你编码以太网流顺利——它是不是和RS422/423一样简单。
在线路编码之前,您需要构建一个以太网帧,其前面是前导码/SOF 序列,然后是帧头(使用 Ethertype 0x0842),后面是魔法模式。根据 WoL 机制,您可能需要将帧填充到其最小大小(64,无前导码/SOF)并计算正确的帧校验序列 (FCS)。
然后需要对帧进行线路编码。10BASE-T 使用简单的曼彻斯特码(01=“1”和 10=“0”)。100BASE-TX 使用 4b/5b 线路码。1000BASE-T 使用更复杂的线路码,可能超出了您的项目范围。WoL 链路很可能是 10BASE-T,因此这是可行的。如果您无法接管现有的 WoL 链路,您还需要生成常规链路脉冲以使远端“链接”。
总而言之,这将是很多如果不需要通过网线唤醒硬件,则使用其他方法更容易。
如果您使用以太网节点生成 WoL 数据包,您可以将其连接到网络中的任何位置、任何交换机端口。只需广播数据包即可将其发送到所有链接节点,包括选定的 MAC。