複製鏈接
請複製以下鏈接發送給好友

遠程關機

鎖定
隨着計算機技術及網絡技術的發展,網絡的應用越來越廣泛,計算機不僅可以控制本地的設備, 還可通過網絡控制遠端的設備,網上監控便應運而生。將遠程控制應用於各種網絡管理軟件中,已成為網絡技術管理的重要手段。遠程關機也是其中的一種。這裏介紹一種遠程關機的實現方式。
中文名
遠程關機
外文名
remote shutdown
特    點
方便、效率高
應    用
計算機網絡通信
目    的
遠程控制計算機關機
領    域
計算機

遠程關機基本介紹

隨着計算機網絡通信技術的迅猛發展, 網絡的應用越來越廣泛, 計算機不僅可以控制本地的設備, 還可通過網絡控制遠端的設備, 計算機網絡控制技術離不開網絡編程。 相比眾多編寫網絡通信軟件的工具和方法,使用Winsock控件進行網絡編程簡單而且有效, 因而用處頗為廣泛, 成為一種主要技術。 Winsock控件支持UDPTCP兩種協議,可以方便地實現了服務端客户端的連接,在利用Winsock控件進行開發時,程序員並不用過多瞭解協議的內容,及網絡間的關係和理論,也不需要調用低級的Socket通用程序接口,只需要使用Winsock, 由W insock尋找並利用已經安裝好的底層協議,正確設置控件的屬性、方法、 事件,就可開發出相關程序。實現計算機之間的雙向數據交換。 本文主要介紹基於TCP/IP協議的Windows環境下使用Vb語言進行W insock網絡編程的原理和方法,實現C/S模式的一種網絡通信。這裏介紹瞭如何實現通過網絡控制遠程計算機關機 [1] 

遠程關機設計思想

本系統基於C/S體系結構設計, C/S模式是一種傳統的開發模式,適用於用户有限的局域網環境。 在這種模式下,客户端與服務器直接相連, 因此響應速度快。開發費用較低,週期也較短。 服務器端(控制端)運行Server程序,在每台客户端(被控端)上也需要運行專門的Client程序。 通過修改註冊表信息, 將Client的可執行文件加到HKEY -LOCAL-MACHINE\SOFTW ARE\Microsoft\W indows\CurrentVersion\Run下,使Client程序在每次開機時能夠自動運行, 運行後兩端程序可以通過IP地址建立連接,進行數據傳遞, 以達到通信的目的。 遠程關機功能模塊連接在Client中, Server根據需要向Client發送不同的命令(字符串), Client根據接受到的命令調用不同的功能模塊,執行相應的功能, 實現管理機對被管理機的遠程控制。在WindowsNT/2000系統中,必需先調用API函數,獲取關閉計算機的權限, 然後才能關閉計算機。 可以將這個過程寫入客户端程序中, 在執行關機命令之前先執行此步驟以獲取權限。 所以具體的遠程關機的步驟是: 第一步利用winsock控件取得通信連接; 第二步為當前進程獲取關機權限; 第三步根據服務器發送的命令, 客户機調用ExitW indowsEx函數實現關機、 註銷、重啓 [1] 

遠程關機系統實現

winsock連接
Winsock在計算機中提供了一個通信端口, 通過這個端口, 一台計算機可以和網絡中任何具有Winsock端口的計算機通信, 利用Winsock控件可以與遠程計算機建立連接, 並通過用户數據文報協議(UDP)或者傳輸控制協議(TCP)進行數據交換。這兩種協議都可以用來創建客户與服務器應用程序。本系統採用了後者, 通信過程為:
服務器端:
1)設置服務端的監聽端口LocalPort屬性, 調用Listen方法進行監聽, 進行等待狀態後, 方能接收客户請求。
2)當客户端發同請求連接時(Connect), 服務器端產生ConnectionRequest事件, 要響應連接, 就要調用Accept方法接受客户端的requestID請求, 此後服務端和客户端的連接開始建立。
客户端:
1)設置客户端的RemoteHost和RemotePort屬性,分別與服務器的IP地址, 監聽端口為同一個值。 然後調用Connect方法向服務器提交連接請求。
2)服務端和客户端連接上後, 就可以相互用SendData方法發送數據和GetData方法接收數據了。 當接收數據到達時,發生DataArrival事件, 可根據DataArrival事件判斷調用的事件。 當服務器或客户端請求關閉連接時,調用Close方法即可 [1] 
調用API函數獲取關機權限進行關機
關閉Windows所調用的API函數是ExitWindowsEx,而WindowsNT/2000基於安全性的考慮, 必須先以API函數AdjustTokenPrivileges設置安全級別, 才能關機。在Windows2000/NT下面, 各種與系統有關的操作, 比如: 關閉系統, 添加設備或者修改系統時間等,必須要具有一定的權限才能進行。 系統為每一個登錄的用户設置了各種權限, 這些權限放到“訪問令牌(在程序中進行授權的操作, 必須要將訪問令牌中的這些操作設為可行的才能使用。 我們要修改一個進程的訪問令牌, 先調用GetCurrentProcess函數取得當前進程訪問令牌的句柄,然後調用OpenProcessToken函數打開當前進程的訪問令牌, 接着調用LookupPrivilegeValue函數取得你想提升的權限的值, 最後調用AdjustTokenPrivileges函數給當前進程的訪問令牌增加權限就可以了 [1] 
過程調用方法
在編程中, 在Client的DataArrival事件中完成過程調用,
PrivateSubClientDataArrival(ByVal bytesTo2talAsLong)
       Dim i As st ring
       Client.GetData I/‘接收管理機發送的命令字符串
       selectcasei
       case/‘關機’
      AdjustTokenPrivilegesForNT
      ExitW indowsEx EW X _SHUTDOW N,0/‘如果為“關機” 則調用遠程關機過程
      case/‘重啓’
      AdjustTokenPrivilegesForNT
      ExitW indowsEx EW X _REBOOT, 0/‘如果為“重啓”則調用遠程重啓過程case‘註銷’
AdjustTokenPrivilegesForNT
ExitW indowsEx EW X _ LOGOFF,0/‘如果為“註銷”則調用遠程註銷過程
End select
End Sub
通過Server程序可分別設置關機, 重啓, 註銷三個按鈕, 單擊按鈕時分別向Client發送“關機”,“重啓”,“註銷” 字符串, 這時Client根據接收到的不同字符串可選擇執行不同的操作以完成相應的任務 [1] 
上述VB代碼在Win2000/W in98下調試通過, 並經過實際運行效果良好, 在VB環境下利用Winsock控件進行網絡編程, 開發一種基於TCP協議的服務器和客户機應用程序, 能夠實現服務器端與客户端之間進行數據通訊, 以實現一個簡單的遠程關機程序, 經擴展可以實現對多台客户機進行控制,初步證實了用Visual Basic對遠程控制系統的可設計性和可實現性,對網絡遠程控制的基本實現方式作了嘗試性的探討, 以上示例採用的方法思路相對簡單, 在此基礎上略加改造, 可以形成功能複雜的計算機網絡管理系統, 用於屏幕圖像抓取、 文件傳輸、 遠程監控等。 在網絡化時代, 對局域網內部的計算機管理作用重大, 通過遠程控制可以有效提高工作效率, 大量節約工作時間。
參考資料
  • 1.    何增穎 .基於Winsock網絡通信的遠程關機技術 [J].信息通信 , 2007 , 24 (5) :62-64