实现逻辑
利用UDP协议发送特定格式的魔术包,以远程唤醒具有特定MAC地址的目标计算机。目标计算机的BIOS和网络配置需要支持Wake-on-LAN(WOL)功能,并且需要在目标计算机上配置正确的网络唤醒设置。
源码在最后
准备工作
- 进入Bios,找到高级设置----》然后找到类似的电源管理、或者设备唤醒的字眼,各个主板所在的位置也不同,然后找到PCI-E设备唤醒,把这个设置为启用,然后保存,等待几秒电脑启动。
- 打开电脑的设备管理器,按照图示操作
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地址,然后就可以实现在家远程自己的电脑啦。