C 實現遠端開關指定主機

2021-08-17 01:17:26 字數 2494 閱讀 6594

一、遠端開機

遠端喚起(wake on lan)是amd公司製作的magicpacket這套軟體以生成網路喚醒所需要的特殊資料報,俗稱魔術包(magicpacket)。魔術包的格式,包含有連續6個位元組的「ff」和連續重複16次的mac位址,你可以在任何協議的資料報中填上 "ffffffffffff"+連續重複16次的mac位址,就可利用該協議作出乙個使用該協議的magicpacket來實現c#版的工具。

第一步:

遠端開機需要進入需要喚起的bios模式下將「wake upon lan」項或「wake on pci card」項均設定為「enable」,其原理就是通過廣播訊息傳送udp包到指定的主機的網絡卡,通過網絡卡喚起主機。

第二步:

借助上述描述的魔術包編寫乙個工具類,具體如下:

using

system;

using

system.net;

using

system.net.sockets;

namespace

tool.wakeonlan

catch

(exception

ex)}

//////

啟動指定實體地址的計算機,此計算機必須開啟網路啟動的設定

//////

mac">

實體地址

「ff-ff-ff-ff-ff-ff」格式

public

static

void

wakeup(

string

macstring)

udpclient

client =

newudpclient

();client.connect(

ipaddress

.broadcast, 9090);

byte

packet =

newbyte

[17 * 6];

//寫入6位元組ff

for(

inti = 0; i < 6; i++)

packet[i] = 0xff;

//寫入16遍mac位址

for(

inti = 1; i <= 16; i++)

for(

intj = 0; j < 6;j++)

packet[i * 6 + j] =macbytearray[j];

intresult = client.send(packet, packet.length);}}

catch

(exception

ex)}}}

呼叫工具類的wakeup函式就可遠端喚起指定計算機。

二、遠端關機

首先我們可以參考shutdown命令

其中-m --computer可以遠端關閉指定目標計算機,而在我的專案中使用c/s模式,所以可以使用資料報傳送命令來讓客戶端關機。

所以當客戶端收到關機命令後使用shutdown -s -t  xx來關閉, xx指的是延遲時間。

但是在測試過程中,使用shutdown -s -t  xx關機後,就無法再次遠端喚起。經過研究需要增加-hybrid的引數,即可再次遠端開機,具體c#**:

system.diagnostics.

process

.start(

"cmd.exe"

, "/cshutdown -s -t 0 -hybrid"

)含義:

此處花費了不少時間研究再次遠端喚起,所以寫個帖子供需要的參考。

此外異常關機(斷電、強行關機)等都會影響遠端開機無法正常執行。

-----------------------------------------分割線----------------------

另外關機的時候發現在dell的win10家庭版的關機語句增加

-hybrid 引數到無法再次網路喚起,刪除-hybrid後可以正常再次網路喚起。

遠端主機實現終端復用tmux

登入遠端主機,往往只能使用乙個終端,如果想使用多個,需要多次鏈結,但是tmux解決了這一點 通過在遠端主機上安裝tmux,然後遠端登入後,使用tmux命令,我們將實現ssh鏈結的視窗多終端復用。mac安裝方式 brew install tmuxcentos安裝方式 yum install y tmu...

Wi Fi智慧型插座拆解 如何實現遠端開關

broadlink智慧型插座的配置和使用都是這麼的方便,配置完成後,無論身在那裡只要手機能連上網路就能夠控制插座,甚至手機無需連上wi fi只要3g網路就可以控制。在控制智慧型插座開關狀態時可以聽到 滴答 的聲音,猜測開關的控制是通過繼電器實現。很好奇拆開了開關看看內部是如何實現的。塑料的外殼不是非...

python指令碼實現批量遠端部署主機

本指令碼通過填寫位置引數來實現批量部署遠端主機的功能,位置引數1填寫主機ip列表,位置引數2填寫執行命令 執行命令寫在 內 root bin python import paramiko import sys import getpass import threading defrcmd host,...