我有两台使用 Arch Linux 的计算机,A 和 B,通过同一个路由器连接到互联网。我在两台计算机上都配置并测试了 WAN 唤醒功能。两台计算机大部分时间都处于关闭状态。
我想在不从外部发送魔术包的情况下连接到它们。计算机“A”的 NIC 支持通过单播活动唤醒,因此我已启用它。问题是,计算机“B”并非如此 - 它只能通过魔术包唤醒。
我可以让计算机“A”在尝试与计算机“B”建立 TCP/UDP 连接时自动唤醒计算机“B”吗?我正在考虑这样的解决方案:
- 配置路由器和计算机“B”,以便所有“B”流量(在特定端口上)都通过计算机“A”。
- 在“A”上设置一个脚本,该脚本以某种方式触发与“B”的连接,检查“B”状态并发送魔包。
也许有更简单的方法?
编辑:
如果可以重新路由所有内容,那么在前者唤醒后,没有“B”流量会通过“A”,从而使后者能够自动关闭,这样就很好了。
答案1
您可以在计算机上编写一个 bash 脚本,通过本地网络A
生成并发送一个魔术包到计算机。B
一旦您A
通过单播流量唤醒计算机,脚本就会自动触发,或者您可以通过 SSH 进入计算机A
并运行它。
这个答案StackOverflow 上描述了如何制作这样的脚本。
答案2
当尝试与计算机“B”建立 TCP/UDP 连接时,我可以让计算机“A”自动唤醒计算机“B”吗?
您需要在 B 处于睡眠状态时将 ARP 请求代理到 B,然后监听 B 的 IP 的连接尝试,并发送唤醒数据包。
这是可行的,但难度很大,我可以用封包套接字用于初始 ARP 代理和连接尝试监听。它还需要管理有关 B 的状态,表明 B 是否处于休眠状态,例如通过查看 B 是否发送任何内容,以及是否响应 ARP 请求。
要编写此程序,您需要对网络协议有相当多的了解(或者长时间盯着 wireshark 捕获,直到您了解发生了什么)。