生活工作中經常通過遠程式控制制某臺電腦,但是有些時候,我們想遠程某個電腦卻發現,電腦被斷電或者關機了,此時必須的跑去開個機; 由各種百度,博客發現可以通過幻包遠程進行喚醒:其電腦設置步驟此處省略,百度搜索遠程喚醒即可找到,當然網上也有很多工具可以遠程喚醒,由於樓主是學C#故發一下 遠程喚醒的C#代碼實現 ...
生活工作中經常通過遠程式控制制某臺電腦,但是有些時候,我們想遠程某個電腦卻發現,電腦被斷電或者關機了,此時必須的跑去開個機;
由各種百度,博客發現可以通過幻包遠程進行喚醒:其電腦設置步驟此處省略,百度搜索遠程喚醒即可找到,當然網上也有很多工具可以遠程喚醒,由於樓主是學C#故發一下
遠程喚醒的C#代碼實現:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace Gaofajin.Shell
{
public class RemoteOpenComputer
{
public string OpenComputer(string Mac)
{
string msg = "(同網段)執行代碼成功!數據包:";
try
{
byte[] packet = GetPacket(Mac);
UdpClient udpClient = new UdpClient();
udpClient.Connect(IPAddress.Broadcast,30000);
udpClient.Send(packet,packet.Length);
foreach (byte bt in packet)
{
msg += bt.ToString();
}
}catch(Exception ex)
{
msg=ex.Message;
}
return msg;
}
public string OpenComputer(string broadcastip,string mac)
{
string msg = "(不同網段)執行代碼成功!數據包為:";
try
{
byte[] ip = IPToBytes(broadcastip);
byte[] packet = GetPacket(mac);
IPAddress iPAddress = new IPAddress(ip);
UdpClient udpClient = new UdpClient();
udpClient.Connect(iPAddress,30000);
udpClient.Send(packet,packet.Length);
foreach(byte bt in packet)
{
msg += bt.ToString();
}
}
catch(Exception ex)
{
msg=ex.Message;
}
return msg;
}
Func<string,byte[]> IPToBytes = ip =>
{
byte[] bts = new byte[4];
for(int i = 0;i<ip.Split('.').Length;i++)
{
bts[i]=byte.Parse(ip.Split('.')[i]);
}
return bts;
};
Func<string,byte[]> GetPacket=mac=>
{
byte[] bmac =MacTobytes(mac);
byte[] packet = new byte[17*6];
for(int i = 0;i<6;i++)
{
packet[i]=0xFF;
}
for(int j = 1;j<=16;j++)
{
for(int k = 0;k<6;k++)
{
packet[j*6+k]=bmac[k];
}
}
return packet;
};
static Func<string,byte[]> MacTobytes = mac =>
{
mac=(mac.Contains('-')) ? mac.Trim('-') : mac;
if(mac.Length!=12)
{
throw new Exception("不是有效的mac地址!");
}
byte[] bt = new byte[6];
for(int i = 0;i<6;i++)
{
bt[i]=Convert.ToByte(mac.Substring(i*2,2),16);
Console.Write(bt[i].ToString());
}
return bt;
};
}
}