隔壁网

[软件] 如何实现远程开机

2019-10-31 15:32
1940
因为工作需要,总是需要打开某台不在身边的电脑,相信很多朋友也遇到过相同的问题,出门在外,或者在公司,突然需要的一个文件存在家里的电脑上,如果家里有人可以打个电话回家,然鹅,事情总会有很多不巧的时候,家里刚好没人,或者,家里的人根本就不知道怎么开电脑,又或者,你是一只漂泊在外的单身旺,这种时候你就需要用上远程开机了。
本文中的开机方法都来自网络总结:
1. 通过广播包实现远程开机
其实远程开机就是一种网络唤醒(Wakeup On LAN)绝大多数电脑的主板BIOS  都支持这项功能,如果BIOS 中没有开启则需要手工打开。电脑没有开机前网卡没有IP 地址,网络通讯时该如何发送数据? 这里就要用到广播包,广播包顾名思意就是不针对具体的目标向一个网段范围内所有的地址同时发出,和你用收音机接收广播的道理相同。
网络唤醒数据包的结构,这个是规范按规范来就可以了:
UDP广播包,端口不限
数据是
FF-FF-FF-FF-FF-FF 接着目标计算机的 MAC 地址重复 16
注意,这里是UDP 的广播包,与我们前面分享中均使用的TCP 有一定的区别
直接上代码:
void CAppRunServerView::StartNETPC( CString MACstr )
{
    int dstaddr[6];
    char mac[20];
    int j;
    for (  j=0;j<MACstr.GetLength();j++ )
    {
        mac[j]= MACstr.GetAt(j);
    }
    mac[j]='\0';
    int i = sscanf( mac,"%2x:%2x:%2x:%2x:%2x:%2x",
                       &dstaddr[0],
                       &dstaddr[1],
                       &dstaddr[2],
                       &dstaddr[3],
                       &dstaddr[4],
                       &dstaddr[5]);
    if (i!=6)
    {
        return;
    }
    unsigned char ether_addr[6];
    for( i=0; i<6; i++ )
        ether_addr=dstaddr;
    //构造Magic   Packet
    unsigned char magicpacket[200];
    memset(magicpacket,0xff,6);
    int packetsize=6;
    for ( i=0; i<16; i++ )
    {
        memcpy( magicpacket + packetsize , ether_addr, 6 );
        packetsize += 6;
    }
    WSADATA WSAData;
    if( WSAStartup( MAKEWORD(2,0), &WSAData ) != 0 )
    {
        return;
    }
    //创建socket
    SOCKET sock = socket( AF_INET,SOCK_DGRAM,0 );
    if ( sock == INVALID_SOCKET )
    {
        return;
    }
    //设置为广播发送
    BOOL bOptVal=TRUE;
    int iOptLen=sizeof(BOOL);
    if ( setsockopt( sock,
                     SOL_SOCKET,
                     SO_BROADCAST,
                    (char*)&bOptVal,iOptLen) == SOCKET_ERROR )
    {
        closesocket(sock);
        WSACleanup();
        return;
    }
    sockaddr_in to;
    to.sin_family = AF_INET;
    to.sin_port = htons(0);
    to.sin_addr.s_addr = htonl( INADDR_BROADCAST );
    //发送Magic   Packet
    if ( sendto( sock,(const char*)magicpacket,packetsize,0,
                ( const    struct sockaddr*)&to,
                sizeof(to) )==SOCKET_ERROR )
    {
        return;
    }
    else
    {
        //MessageBox( _T("发送成功") );
      
    }
    closesocket(sock);
    WSACleanup();
}
有几个前提条件,这台电脑的MAC 这肯定得先知道(废话)
这台电脑的BIOS  支持网络唤醒;
这台电脑在网络(交换机)上曾经至少至少工作过一次与别人通讯过一次,只有这样交换机中的MAC 表才对客户机有记录。

2.智能硬件设备实现远程开机
除了技术流的远程开机方式之外,还是有很多的智能设备,一键就能够实现远程开机。比如说智能插座,今天我就以向日葵开机插座为例。
首先你要检查你的电脑主板是否支持AC recovery这个功能,如果支持这个就简单了很多,首先你手机上下载一个向日葵的APP,然后将你的开机插座绑定在你的账号下。
远程开机1.png
然后再将你的电脑AC recovery这个功能打开,这样就设置完成了。之后就可以远程通过向日葵这个APP实现一键开启电脑的功能。
如果电脑不支持AC recovery这个功能,但是支持支持WOL唤醒功能可以继续往下看。
3.通过路由器实现远程开机
一:是BIOS端的设置,这个不管是WIN10还是群晖都是需要先设置的。
二: WIN10或者群晖设置
三:路由器设置,一层的比较简单,百度的话基本实际的,都是些大而全的知识,只能看各种大能的帖子,然后解决自己的问题。
四:当然是手机端或者电脑端实现局域网远程唤醒(LAN)和广域网远程唤醒(WAN)软件了。电脑端我用的是WakeOnLAN,手机端当然还是大名鼎鼎的Wake on Lan,不过都是中文版
有些人不成功的可以按照这个思路一个个查过去那个地方不通,对了,路由器端口通不通的可以直接站长工具,这是一个在线扫描端口的网站,大家可以试试。当然有更好的也可以推荐。
                                                                      BIOS首先要打开BIOS
远程开机2_meitu_1.jpg
LAN
远程开机3_meitu_2.jpg
LAN
远程开机4_meitu_3.jpg
PXE
远程开机5_meitu_4.jpg
PXE
我是技嘉主板,中英两个版本都截图了,记得开启,打开主板上的WOL功能(【Power On By PCIE Devices】或者【Wake On LAN】具体参考主板bios说明书),并注意关机(不要拔电源插头)时网线接主板处灯亮的,如果灯不亮,证明主板的没有打开。还有就是我主板上LAN功能是本身打开了的,但是灯是不亮的,后来打开LAN PXE 才是亮的
还有一个要友情提醒下的,可以远程启动以后,千万不要拔电源,如果拔了电源,地址就会失效,必须重新手动启动一下,正常关机,才可以启动了,技术给我的建议就是配个UPS电源,保证不断电。具体的问题我百度了下,下面不喜欢的可以跳过。
1、主板会将[断电後网络唤醒的功能存储在NVRAM模块中,存储完毕自动断电。
2、网络唤醒功能存储在主板的NVRAM中,220V断掉后,主板也同时断电,NVRAM被清空,所以无法进行唤醒。
3、只有在接上220V后上电一会,才会重新加载数据到NVRAM,才可以实现断电后网络唤醒的功能。(怎么没有人问我BIOS截图杂这么清晰的啊,哈哈,其实现在主板都支持BIOS直接截图U盘的,我的技嘉主板是按F12,当然U盘必须是FAT32格式的,截图成功会有提示哦)
                                                            WIN10或者群晖首先我的电脑右键-属性-设备管理器-网络适配器
远程开机6_meitu_5.jpg
设备

选择自己的网卡右键-属性-电源管理-链接唤醒必须打勾
远程开机7_meitu_6.jpg
网卡
前面点开一样的,在高级里选择Wake on magic packet(魔术包唤醒)选择打开即可
远程开机8_meitu_7.jpg
网卡1
远程开机9_meitu_8.jpg
网卡2                        
远程开机10_meitu_9.jpg
电源设备
远程开机11_meitu_10.jpg
电源设备2
                                                                               群晖设置
首先进入控制面板--硬件和电源-启用局域网唤醒,其他的设置自己随意吧
远程开机12_meitu_11.jpg
群晖设置
                                                             三路由器篇这里怨念超级无敌深啊,整整困住了我三天,各种百度,没有几个是有营养的,看样子是时候用谷歌了。首先两层路由,先路由器A(百为)WAN口(设置的静态IP)接到路由器B(网件7000LAN,至于IP地址可以自己设置,只要不冲突就可以了。路由A的网段192.168.1.1      路由B的网段192.168.8.1这个也是自己设置的不冲突就可以,没有影响
远程开机13_meitu_12.jpg
拓扑图
2:打开路由器B设置页面,选择ARP-IP-MAC
远程开机14_meitu_13.jpg
ARP-IP-MAC
远程开机15_meitu_14.jpg
IP设置
3:选择端口转发-协议选择UDP或者TCP/UDP,记得不能单独选择TCP啊,这样会唤醒不成功的,不成功的,我就是吃了这亏,做的时候没有注意,一定要细心点,接着就是一个外部端口9(大部分唤醒软件都是默认9)内部端口可以随便选,我选择的是10,接着就是IP地址选择了,这里选择你路由器分配给你要唤醒电脑的IP,比如我是分配了192.168.8.7给我唤醒机器,选我选择了192.168.8.7.
远程开机16_meitu_15.jpg
端口转发
远程开机17_meitu_16.jpg
静态路由
远程开机18_meitu_17.jpg
动态DNS
远程开机19_meitu_18.jpg
动态域名
远程开机20_meitu_19.jpg
路由器A动态设置
远程开机21_meitu_20.jpg
路由A端口映射
远程开机22_meitu_21.jpg
电脑唤醒
当然有人会问这有什么用,有些人是不需要24小时开机的,比如要下载东西了,又在外面怎么办,这就可以远程唤醒机器,利用迅雷极速远程下载,也可以上传图片到自己机器保存,更可以看自己保存的高清电影,上传必须要够哦,要做的事太多了,当然你也可以远程遥控家里人手工开机,更靠谱 ,到这里就全部结束了,有需要的人上,没有需要的,高手请勿喷!

远程开机1.png
分享到 :
2 人收藏
您需要登录后才可以回帖 登录 | 注册

本版积分规则

微信扫一扫关注公众号,获取注册邀请码!

小黑屋|手机版|Archiver|隔壁网 ( 粤ICP备14056481号-1 )

Powered by Discuz! X3.3 © 2001-2016 Comsenz Inc.

返回顶部