(附源码)c#+winform实现远程开机(广域网可用)

实现逻辑

        利用UDP协议发送特定格式的魔术包,以远程唤醒具有特定MAC地址的目标计算机。目标计算机的BIOS和网络配置需要支持Wake-on-LAN(WOL)功能,并且需要在目标计算机上配置正确的网络唤醒设置。

源码在最后

准备工作

  1. 进入Bios,找到高级设置----》然后找到类似的电源管理、或者设备唤醒的字眼,各个主板所在的位置也不同,然后找到PCI-E设备唤醒,把这个设置为启用,然后保存,等待几秒电脑启动。
  2. 打开电脑的设备管理器,按照图示操作

        

3.win+r打开cmd 输入ipconfig/all。找到物理地址,复制出来等会要用。

4.打开允许远程协助,位置:打开控制面板-----系统和安全

如图所示按照此设置就OK了

源代码

private bool SendWakeOnLanPacket(string macAddress, string ipAddress, int port)
        {
            try
            {
                // 解析MAC地址
                byte[] macBytes = ParseMacAddress(macAddress);

                // 创建魔术包
                byte[] packet = new byte[102];
                for (int i = 0; i < 6; i++)
                {
                    packet[i] = 0xFF;
                }
                for (int i = 1; i <= 16; i++)
                {
                    Buffer.BlockCopy(macBytes, 0, packet, i * 6, 6);
                }

                // 创建UDP客户端
                UdpClient client = new UdpClient();
                client.Connect(IPAddress.Parse(ipAddress), port);
                client.Send(packet, packet.Length);
                client.Close();

                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show("发送魔术包时出错: " + ex.Message);
                return false;
            }
        }
      
        private byte[] ParseMacAddress(string macAddress)
        {
            string[] hex = macAddress.Split(':');
            if (hex.Length != 6)
            {
                throw new ArgumentException("无效的MAC地址格式。");
            }
            byte[] bytes = new byte[6];
            for (int i = 0; i < 6; i++)
            {
                bytes[i] = Convert.ToByte(hex[i], 16);
            }
            return bytes;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string macAddress = txtMacAddress.Text;
            string ipAddress = "192.168.1.20";
            int port = 30000;

            if (SendWakeOnLanPacket(macAddress, ipAddress, port))
            {
                MessageBox.Show("魔术包发送成功,等待目标电脑唤醒。此过程需要1-2分钟,请查看你的向日葵或者todesk是否显示在线!");
                
            }
            else
            {
                MessageBox.Show("魔术包发送失败,请检查输入和网络配置。");
            }
        }

此时你就可以实现在局域网内部开启电脑。

广域网远程

假设你的A电脑要远程开机B电脑,B电脑在局域网内,此时需要设置B电脑的路由器的端口转发,

使用场景:晚上突然需要加班,我在家用家里的电脑远程开启公司内的电脑,那么此时就是广域网。符合上述概念。

路由器设置:进入到公司B电脑所在路由器的管理界面,找到高级设置,有个叫端口转发或者虚拟服务器的页签,千万记住、不是端口触发,端口触发设置不了局域网内部的ip地址。

我的路由器叫虚拟服务器,进去之后点击新增,应该会有外部端口、内部端口、ip地址等等,类似于这样

服务名称随便起一个,外部端口范围随便写,比如说4666-4666

内部端口4666-4666、再写入你的B电脑的ip地址,然后就可以实现在家远程自己的电脑啦。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值