远程唤醒局域网主机技术Wake On LAN

news2024/11/18 3:39:31

WOL用途

如果你在开发一个计算机管理软件(利旧现有主机,实现统一运维管理),例如电脑课开课前老师一键开启电教室的电脑 。

魔法原理

Wake-on-LAN 的原理其实很简单。我们发送一个特殊的网络包(俗称"魔术包"),包含目标电脑网卡的 MAC 地址。网卡收到这个包后,就会像被一桶冰水泼醒一样,启动整个系统。

准备材料

  •  Node.js(我们的魔法棒)
  • 一台支持 WoL 的电脑
  • 目标电脑的 MAC 地址
  • BIOS配置

进入BIOS时注意,不同主机不一样,有的F1有的F2,有的需要按下Fn键

测试过四五台主机,发现BIOS默认就是开启的~然后需要注意的就是电池管理,台式机一般也是默认支持,但笔记本就需要检查是否开启省电模式,需要关掉省电模式

编写代码

首先,复制下面的代码,把它保存为 `wakeOnLAN.js`:

const dgram = require('dgram');

function wakeOnLAN(macAddress, options = {}) {
  const {
    ipAddress = '255.255.255.255',
    port = 9,
    attempts = 5,
    interval = 100,
  } = options;

  return new Promise((resolve, reject) => {
    const magicPacket = createMagicPacket(macAddress);
    const client = dgram.createSocket('udp4');
    let attemptsMade = 0;

    function sendPacket() {
      client.send(magicPacket, 0, magicPacket.length, port, ipAddress, (err) => {
        if (err) {
          client.close();
          reject(err);
          return;
        }

        attemptsMade++;
        console.log(`尝试 ${attemptsMade}: 魔术包已发送!`);

        if (attemptsMade >= attempts) {
          client.close();
          resolve(`完成 ${attempts} 次唤醒尝试,希望公主已经醒了!`);
        } else {
          setTimeout(sendPacket, interval);
        }
      });
    }

    sendPacket();
  });
}

function createMagicPacket(macAddress) {
  if (!/^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/.test(macAddress)) {
    throw new Error('MAC 地址格式不对哦,再检查一下呗!');
  }

  const cleanMac = macAddress.replace(/[:-]/g, '');
  const buffer = Buffer.alloc(102);
  
  buffer.fill(0xFF, 0, 6);
  
  for (let i = 1; i <= 16; i++) {
    cleanMac.match(/.{2}/g).forEach((hex, j) => {
      buffer.writeUInt8(parseInt(hex, 16), i * 6 + j);
    });
  }

  return buffer;
}

测试方法:

wakeOnLAN('00:11:22:33:44:55', { attempts: 5, interval: 100 })
  .then(result => console.log(result))
  .catch(error => console.error('哎呀,魔法失效了:', error));

使用函数

简单的测试

node wakeOnLAN.js

对外暴露api接口

 req.body.pcs.map((e) => wakeOnLAN(e.mac, {
          ipAddress: e.ip,
          port: e.port,
          interval: req.body.interval,
          attempts: req.body.attempts
}))

注意事项

  • 如果失效了,不要灰心。可能是网络阻塞了你的魔术包,多试几次(5+)。
    • UDP会丢包
    • 关机后的网卡接收包时并不是一直再监听的,可能是周期性唤醒接受一下
  • ip地址需要是域内的网关,例如ip 172.21.1.xxx的主机唤醒,ip需要填172.21.1.255
  • 记住,不要用于恶作剧。

结课!

恭喜你!你现在已经掌握了远程唤醒电脑的WOL技术,下次再面对有计算机利旧集群管理时,就不会手足无措啦~有些技术知道了便很简单呢

下次见,各位魔法师!祝你们魔力无边,代码无 bug!

这是新系列吧,好像我就是比较喜欢挖坑,内容主要是一些我觉得比较神奇小众的技术点,快速搞定业务顺便总结啦~

2cy

        YU.H 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2170371.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学生党头戴式蓝牙耳机怎么选?平价学生党头戴式蓝牙耳机排行推荐

在选择适合学生党的头戴式蓝牙耳机时&#xff0c;我们不仅要考虑价格因素&#xff0c;还要兼顾音质、舒适度、降噪效果、续航能力以及是否具备实用的功能等多个方面&#xff0c;那么学生党头戴式蓝牙耳机怎么选&#xff1f;作为学生群体&#xff0c;我们既追求性价比&#xff0…

微软推出GRIN-MoE:开创专家路由新范式

前沿科技速递&#x1f680; 在人工智能领域&#xff0c;模型的性能和可扩展性一直是研究的热点。微软最近推出的GRIN-MoE&#xff08;Gradient-Informed Mixture-of-Experts&#xff09;模型&#xff0c;以其独特的架构和显著的性能表现&#xff0c;正引领着AI技术的前沿&#…

南沙csp-j/s一对一家教 解一本通题: 1937:【06NOIP普及组】数列

【题目描述】 给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列&#xff0c;例如&#xff0c;当k3时&#xff0c;这个序列是&#xff1a; 1&#xff0c;3&#xff0c;4&#xff0c;9&#xff0c;10&#xff0c;12&#xff0c;13&a…

一文读懂Ingress-Nginx以及实践攻略

一文读懂Ingress-Nginx以及实践攻略 目录 1 概念 1.1 什么是Ingress&#xff1f; 1.1.1 主要功能&#xff1a; 1.2 Ingress的组件1.3 什么是ingress-nginx1.4 ingress-nginx优点和限制1.5 版本兼容性矩阵 2 实践&#xff1a; Ingress nginx部署 2.1 使用helm部署ingress-ngin…

cscode搭建vue项目

创建前安装环境 ctrlj弹出终端 window需要管理员运行并且授权 node -v #显示版本号&#xff0c;说明 node 已经装好 npm -v #显示版本号&#xff0c;说明 npm 可以使用 # 安装cnpm npm install -g cnpm --registryhttps://registry.npm.taobao.org cnpm -v #显示版本号&…

10分钟制作一个简易的word模版

简易word模板制作。 简言 自用的一个word模版&#xff0c;平常套用其他格式的模板&#xff0c;常常将注意力转移到寻找word模版上&#xff0c;这里提供一个简易的word模版制作教程。 格式要求 &#xff08;1&#xff09;正文格式字体小四&#xff0c;中文宋体&#xff0c;西…

SpringCloud 2023 Gateway的Predicate配置详解、自定义Route Predicate Factory

目录 1. Predicate Factories介绍2. 常用的内置Route Predicate使用2.1 配置语法说明2.2 配置使用 3. 自定义Route Predicate Factory3.1 实现步骤&#xff1a;3.2 实现代码如下&#xff1a;3.3 application.yml配置3.4 测试 1. Predicate Factories介绍 Spring Cloud Gateway…

数字货币交易所开发与智能合约交易系统

数字货币交易所作为加密经济的重要组成部分&#xff0c;为用户提供了一个安全、便捷的平台来买卖各种数字资产。随着区块链技术的发展&#xff0c;智能合约在交易所的应用日益普及&#xff0c;使得交易过程更加高效和透明。本文将探讨数字货币交易所的开发过程以及智能合约在交…

Spring源码学习:SpringMVC(2)DispatcherServlet初始化【子容器9大组件】

目录 DispatcherServlet类图HttpServletBean#initnew ServletConfigPropertyValues() FrameworkServlet#initServletBeaninitWebApplicationContextcreateWebApplicationContextconfigureAndRefreshWebApplicationContext DispatcherServlet内部9大组件初始化初识9大组件Dispat…

大模型还能产生幻觉?一文讲清楚原理和解决方法

“像我们这样相信物理学的人都知道&#xff0c;过去、现在和未来之间的区别只是一种顽固执着的幻觉。换句话说&#xff0c;时间是一种幻觉。” ——波尔 幻觉&#xff0c;即一种看似真&#xff0c;实为假的感受。最近接触到了一个概念&#xff1a;大模型幻觉。有点好奇&#…

【Qt | QList 】QList<T> 容器详细介绍和例子代码

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 2024-09-26 …

python面向对象三大特性

面向对象 面向对象编程&#xff0c;是许多编程语言都支持的一种编程思想。 基于模板(类)去创建实体(对象)&#xff0c;使用对象去完成功能开发 面向对象的三大特性 封装继承多态 封装 封装表示&#xff1a;将现实世界事物的属性和行为&#xff0c;封装到类中&#xff0c;描…

打造高质量软件架构 - 9大质量属性

关注TechLead&#xff0c;复旦博士&#xff0c;分享云服务领域全维度开发技术。拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;复旦机器人智能实验室成员&#xff0c;国家级大学生赛事评审专家&#xff0c;发表多篇SCI核心期刊学术论文&#xff0c;阿里云认…

球体RCS计算 - 金属球的单站RCS【CST软件分析】

用金属球算RCS雷达散射截面可谓RCS的入门案例&#xff0c;本期用T和I两个求解器算单站RCS进行比较。 Step 1. RCS模板&#xff0c;T-solver&#xff0c; 频率0-5GHz&#xff0c;然后建模&#xff0c;半径10.16cm&#xff0c;可以算出来电尺寸在5GHz大概为三个波长&#xff0c;…

ROS理论与实践学习笔记——2 ROS通信机制之常用的命令

4.1 rosnode操作节点 rosnode&#xff1a;是用于获取节点信息的命令。 rosnode ping 测试到节点的连接状态 rosnode list 列出活动节点 rosnode info 打印节点信息 rosnode machine 列出指定设备上节点 rosnode kill 杀死某个节点 rosnode cleanup 清除不…

Python中的数据处理与分析:从基础到高级

在数据科学和数据分析领域&#xff0c;Python凭借其丰富的库和强大的生态系统&#xff0c;成为了最受欢迎的语言之一。本文将从基础到高级&#xff0c;详细介绍如何使用Python进行数据处理和分析&#xff0c;涵盖数据清洗、数据转换、数据可视化等多个方面。 1. 数据导入与导出…

华为 HCIP-Datacom H12-821 题库 (27)

&#x1f423;博客最下方微信公众号回复题库,领取题库和教学资源 &#x1f424;诚挚欢迎IT交流有兴趣的公众号回复交流群 &#x1f998;公众号会持续更新网络小知识&#x1f63c; 1. 如图&#xff0c;BGP 下有如下配置&#xff0c;下面哪些描述是错误的&#xff1f; A、Time…

Minderbinder:一款基于eBPF的进程安全测试工具

关于Minderbinder Minderbinder是一款基于eBPF的进程安全测试工具&#xff0c;在该工具的帮助下&#xff0c;广大研究人员可以通过注入噪声来测试目标进程的安全性。 Minderbinder 是一款使用 eBPF 将故障注入正在运行的进程的工具。当前版本的Minderbinder 可以通过将 kprobe…

动手学LLM(ch2)

2.1 理解词嵌入 深度神经网络模型&#xff0c;包括大型语言模型&#xff08;LLMs&#xff09;&#xff0c;无法直接处理原始文本&#xff0c;因为文本是分类数据&#xff0c;与神经网络的数学运算不兼容。为了达到这个目的&#xff0c;需要将单词转换为连续值向量。记住一句话…