远程开关机原理

一、远程开机

1.局域网唤醒

硬件需求:

a.首先要有主板支持。现在,新一代的主板大都支持网络唤醒功能,而且在主板上都有一个三脚插座,它一般在PCI插槽附近,旁边标注“WOL”。

b.其次必须要有网卡支持。这类网卡在主板上比一般的网卡多了一个三脚插座,并且通常还附带一条专用的三芯连接线,该线是用来连接主板和网卡之间的三脚插座。

c.最后还必须要使用ATX电源,而且其+5V Standby电流必须比较大,根据Intel的建议,它需要在600mA以上。该电流的大小可以从电源外部标识中的+5VSB栏里查到。

需要说明的是,某些主板上已经集成了具有网络唤醒功能的网卡,所以也就没有什么三脚插座,更不需要专用的三芯连线。

如果电脑支持这些硬件需求,需要在BIOS里将wake on lan选项打开。

唤醒原理:

在基于TCP/IP协议的网络中,计算机处于关机状态时 我们不可能有计算机的IP地址,唯一能识别计算机身份的只有其所带网卡的物理地址(mac),每块网卡的mac地址都是唯一的。要远程唤醒某台计算机,必须事先知道其mac地址,然后通过magic picket(AMD公司开发的)标准生成对应的远程唤醒数据包,再利用UDP协议进行广播,向网络发送该数据包。

控制机通过发送一个幻数据包(magic packet),幻数据包是一个广播帧,包含目标计算机的mac地址。由于mac地址的唯一性,使数据包可以在网络中被唯一的识别。

幻数据包通常使用无连接协议,例如UDP,发送端口通常为7或9,没有限制。

大多数网卡都支持在超低功耗下监听特定报文。如果设备网卡接收到一个与自己 MAC 地址相同的幻数据包,则网卡会向计算机的电源或主板发出信号以唤醒计算机。MAC地址通过命令ifconfig查看。大部分的幻数据包在数据链路层(OSI模型第2层)上发送,当发送时,使用广播地址广播到给定的网络上,不使用IP地址(OSI模型第3层)。当然这是绝大部分情况,幻数据包也可以使用特定的 IP 地址进行发送。

幻数据包最简单的构成是6字节的255(FF FF FF FF FF FF FF),紧接着为目标计算机的48位MAC地址,重复16次,数据包共计102字节。有时数据包内还会紧接着4-6字节的密码信息。这个帧片段可以包含在任何协议中,最常见的是包含在 UDP 中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JJZjwd0e-1623999655774)(C:\Users\nova003804\AppData\Roaming\Typora\typora-user-images\image-20210616104958389.png)]

例如 MAC 地址为 11 22 33 44 55 66 的目标计算机,幻数据包的格式为:

FFFFFFFFFFFF 112233445566 112233445566 112233445566 112233445566 112233445566 112233445566 112233445566 112233445566 112233445566 112233445566 112233445566 112233445566 112233445566 112233445566 112233445566 112233445566 [ABABABABABAB(这里为6个字节的密码)]

注意:传送的时候必须封包成二进制格式才可以传送

幻数据包起作用的限制条件:

  1. 需要知道目标计算机 MAC 地址
  2. 不提供送达确认
  3. 可能无法在局域网之外工作
  4. 需要硬件进行支持(网卡支持网络唤醒)

注:通过ethtool eno1(网卡名,通过ifconfig命令查看)查看wake on lan是否开启,g为开启,d为关闭

如果关闭,关机之前必须通过命令ethtool -s eno1 wol g打开,否则无法远程开机

实现代码:

package mainimport ("bytes""encoding/hex""flag""fmt""net""strings"
)var help = "hello,please input params like wol -mac XX:XX:XX:XX:XX:XX"
func main()  {mac := flag.String("mac","",help)flag.Parse()if len(*mac) == 0{fmt.Printf("%s\n",help)return}hw := strings.Replace(strings.Replace(*mac,":","",-1),"-","",-1)if len(hw) != 12{fmt.Printf("MAC:[%s] 输入不正确。\n",*mac)return}macHex,err := hex.DecodeString(hw)if err != nil{fmt.Printf("MAC:[%s] 输入不正确。\n",*mac)return}var bcast = []byte{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}var buff bytes.Bufferbuff.Write(bcast)for i := 0; i < 16; i++{buff.Write(macHex)}mp := buff.Bytes()if len(mp) != 102{fmt.Printf("MAC:[%s] 输入不正确。\n",*mac)return}sendMagicPacket(mp)
}func sendMagicPacket(mp []byte){//sender := net.UDPAddr{}target := net.UDPAddr{IP:   net.IPv4bcast,}conn,err := net.DialUDP("udp",nil,&target)if err != nil{fmt.Printf("创建UDP错误:%v", err)return}defer conn.Close()_,err = conn.Write(mp)if err != nil{fmt.Printf("魔包发送失败[%s]", err)}else{fmt.Printf("魔包发送成功")}}

2.远程跨网段唤醒

远程过路由开机无法进行广播,局域网唤醒手段无法使用。

3.开机后启动程序

linux

在控制机上,通过xshell等软件控制

windows

方案1:被控主机应打开远程功能,控制机启动被控机之后,通过远程桌面连接被控机,进行相关操作

方案2:设置想启动的程序为开机启动项

方案3:在远程开机代码中直接添加开机启动项(目前还未找到实现方式)

二、远程关机

1.windows关机linux

前提:同一网段内,两台机器可ping通,被关机的机器需开启远程功能。

远程ssh登陆,发送poweroff即可关机:输入ssh 用户名@服务器IP命令之后,再输入密码,即可远程登陆linux服务器。

连接成功的前提是,linux需开启ssh服务。yum install ssh,/etc/init.d/sshd start

2.windows关机windows

前提:

  1. 同一网段内,两台机器可ping通

  2. 需在在运行中输入gpredit.msc打开策略编辑器,计算机配置->windows设置->安全设置->本地策略->用户权限分配,双击打开“从远程系统强制关机”,并添加Guest用户

  3. 在用户权限分配中选择“拒绝从网络访问这台计算机”,并删除Guest用户

  4. 右键我的电脑->管理。依次选择系统工具->本地用户和组->用户,选择Guest双击打开,将“账户已禁用”前边的√去掉

  5. 完成以上操作后,若还不能远程关机。

    依次打开:

    控制面板 -> Windows Defender 防火墙 -> 选择 启用或关闭 Windows Defender 防火墙。

    将 Windows Defender 防火墙 全部关闭。

关机命令:shutdown -s -m\\xx.xx.xx.xx(IP)

3.远程关机原理

控制面板 -> Windows Defender 防火墙 -> 选择 启用或关闭 Windows Defender 防火墙。

    将 Windows Defender 防火墙 全部关闭。

关机命令:shutdown -s -m\\xx.xx.xx.xx(IP)

3.远程关机原理

shutdown的命令格式中,-m这个参数后边可以指定要关闭的计算机,省略的话默认对本机操作

在windows默认的安全策略中,只有管理员组的用户才有权从远端关闭计算机。一般情况下,从局域网你内其他电脑访问该计算机时,只有Guest用户权限。只要在计算机中赋予Guset用户远程关机的权限即可。

windows/linux远程开关机原理及实现相关推荐

  1. 电脑服务器 定时开关机 远程开关机(windows+linux)

    定时开关机.远程开关机在实际使用上总是有需求 以下总结了我个人常用的方法 一.定时开机 定时开机主要依赖主板和电源的支持,电源通常是支持的,只有少部分不支持,如果设置了主板不成功,通常就是电源的问题了 ...

  2. teamviewer linux远程开机,一分钟就能学会用手机远程控制你的电脑,远程开关机就是这么简单...

    一.向日葵远程控制 向日葵远程控制软件手机端这个是配合向日葵远程控制被控端也就是电脑端来使用的,连接之后便可以用手机来操控你的电脑.不同触碰或者点击有着不同的功能,使用前会有教程的. 向日葵远程控制软 ...

  3. 如何实现电脑远程开关机?

    要实现电脑远程开关机,您可以使用远程桌面软件或命令行工具.如果您使用的是 Windows 操作系统,您可以使用 Windows 远程桌面协议 (RDP) 或使用命令行工具 "shutdown ...

  4. ubuntu 实现远程开关机

    1. 需求 家里厅里有三台linux主机在跑虚拟机, 一台windows主机在跑wsl2 - ubuntu 20.04 分别是 硬件 网络连接方式 OS ip 虚拟机s EUC i5 7250U 16 ...

  5. 通过手机远程开/关机

    之前看到一篇名为<通过手机远程关机>的文章,写的不错,很有创意. 作为开发人员中的一员,我想我们都有这样的一个想法,就是让我们写的代码去实现我们生活中的一些日常事务,如远程开/关机. 要说 ...

  6. Java实现远程开关机(网络唤醒)

    Java实现远程开关机是做的一个在局域网下实现一台机器对多台机器的开关机控制 远程唤醒实现 是通过电源的一种协议进行控制的,需要知道被唤醒机器的mac地址 首先要须知: 网络唤醒条件 网络唤醒需要终端 ...

  7. 计算机控制系统开关,电脑远程开关机控制器

    原标题:电脑远程开关机控制器 SPD-M05电脑远程开机/关机/复位远程控制器 斯必得SPD-M05电脑远程开机/关机/复位控制器是专为各种服务器及无人值守机房电脑远程遥控开机/关机/复位所开发.该控 ...

  8. 向日葵Android受控端老版本,向日葵Android端版本更新:支持远程开关机

    近日,向日葵远程控制Android控制端更新了10.9版本,本次更新优化了使用相关智能硬件设备进行远程控制时的体验:支持通过向日葵开机插座C2实现远程开关机. 本次更新之后,我们可以使用向日葵远程控制 ...

  9. 利用esp01s模块和光耦817实现天猫精灵、小爱同学实现电脑远程开关机

    利用esp01s模块和光耦817实现天猫精灵.小爱同学实现电脑远程开关机(由于电脑电源开机线是5V,需要另外加两个5V转3.3V模块对esp01s提供电源和反馈开关机状态). /** 利用esp01s ...

  10. java实现远程开关机

    1. java远程开机 java实现远程开机需要先获取到pc的mac(物理地址),通过mac地址唤醒网络数据包 参考代码: /*** 远程开机* @return*/@RequestMapping(&q ...

最新文章

  1. 你不懂js系列学习笔记-类型与文法- 04
  2. C++线性序列容器vector简单总结
  3. linux命令--VI命令详解(三)
  4. java bean jsp_JavaBean与Jsp
  5. 中国基金投顾蓝皮书2022
  6. php multicast多播实现详解
  7. 我把朋友圈关掉了235天
  8. php 一键wifi,Mac wifi 自动控制脚本
  9. Spring BeanFactory、ApplicationContext IOC 容器获取与使用
  10. C# 调用office 2007 及 SaveAsPDFandXPS.exe 将Word、Excel、PPT转换为PDF文件
  11. 基于润和hi3516 dv300开发板,体验鸿蒙3.0 L1小型系统拍照Sample
  12. 基于51单片机的可掉电走表万年历设计(LCD12864+DS1302+DS18B20+LM7805+18650电池外部供电)
  13. Linux中文显示乱码问题解决方法(编码查看及转换)
  14. 神州数码招聘软件测试,神州数码面试经验
  15. 忆过去 想未来 人有情
  16. 苹果怎么换字体_苹果手机电池不行了怎么办,换什么牌子好?
  17. 5G通信基础知识学习
  18. c语言如何框出视频或图像中的车辆,[转载]视频图像中的车辆检测跟踪和分类
  19. 两台设备连接在同一Wi-Fi不能通信问题解决
  20. CS231n作业2中Cython相关问题的处理

热门文章

  1. 《Java解惑》系列——02字符谜题——谜题11:最后的笑声(字符、字符串连接操作)
  2. 【CF335 E】Counting Skyscrapers
  3. 常州大学/教务系统/教室相关
  4. Python三维绘图--Matplotlib
  5. python 转盘 圆形_python实现大转盘抽奖效果
  6. 银河麒麟高级服务器操作系统V10上.NET Core与Java相同类型MySQL(MariaDB) WebApi简单性能对比
  7. 阿里爸爸YYDS!阿里内网首发的Java成长开发手册,不惜重金开源
  8. 跳槽拿到最高月薪20K 我成为月薪20K的软件测试工程师是一种什么样的体验?
  9. IMAX Enhanced:让沉浸式家庭影音娱乐体验不再抽象
  10. Android svc命令