![有没有什么方法可以判断 Linux 机器是否被网络唤醒数据包唤醒?](https://linux22.com/image/1360404/%E6%9C%89%E6%B2%A1%E6%9C%89%E4%BB%80%E4%B9%88%E6%96%B9%E6%B3%95%E5%8F%AF%E4%BB%A5%E5%88%A4%E6%96%AD%20Linux%20%E6%9C%BA%E5%99%A8%E6%98%AF%E5%90%A6%E8%A2%AB%E7%BD%91%E7%BB%9C%E5%94%A4%E9%86%92%E6%95%B0%E6%8D%AE%E5%8C%85%E5%94%A4%E9%86%92%EF%BC%9F.png)
我正在寻找一种方法(以编程方式或其他方式)来确定我的机器是否被 WOL 唤醒(比如说,Ubuntu Server 盒)。
这是一个双重问题,我想知道我是否可以:
a)连接一个设备,当机器从睡眠状态唤醒时,该设备会听到被唤醒的消息,并且
b) 然后可以以某种方式确定唤醒是否是由于 WOL 造成的
我不太关心这是通过什么机制(如果有的话)实现的,但我真正感兴趣的是这是否可能。
也许如果有一些文件记录唤醒/睡眠时间,我可以编写一个小程序循环并偶尔检查文件是否有变化,但不知道我需要做什么才能弄清楚它是否是 WOL(或者是否存在这样的文件)。
谢谢
答案1
要确定你的机器是否已经唤醒,你可以测试是否可以访问它,就像访问其他机器一样,看看它是否在那里:
- 平
- telnet 绑定到机器启动的服务的某个端口
- 如果已配置,请使用 snmp
至于你是否能够知道你的机器是否已经通过 WOL 启动,这是不可能的,因为 WOL 中涉及的所有元素(即魔术包、以太网卡和 BIOS)之间的通信都发生在前操作系统甚至已经启动。
答案2
您需要另一个始终开启的设备来持续监控线路上的 WOL 数据包。这样的设备必须相对智能。理论上,另一台运行混杂模式工具的计算机应该能够捕获 WOL 数据包。
设备必须始终处于打开状态并扫描网络连接。传感器可能会漏掉它,但它应该可以工作。 简而言之,基本上就是另一台 PC。 虽然可能有一些网络设备可以做到这一点,但我对此并不了解。我从未使用过,但至少存在这样的可能性,即装有 Linux 固件的交换机可以做到这一点。