實現邏輯
????????利用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地址,然后就可以實現在家遠程自己的電腦啦。