2010年1月19日 星期二

網路喚醒與關機(Wake On Lan and Windows Shutdown)

先前已經有介紹過網路喚醒的功能《網路喚醒的應用》,不過那是透過Linux的平台之下來進行,或許對於一般使用者來說的應用機會不大(但是對於自己在外打拼的遊子來說,網路喚醒就有它的重要性),所以這次我就補充一下在Windows中可行的方案,同時再透過批次檔的方式來整合一些小程式,以便於一般人使用。

其實在網路上也有wol的程式是採取圖形介面,甚至有網頁可做為網路喚醒的中介平台(參考網頁:Depicus ─ Wake On Lan),但是對於管理者來說,透過圖形介面跟網頁模式來執行這網路喚醒的動作,或許在安排執行的流程時,還是比不上透過類似批次檔的命令模式來的便捷,也比較不容易受到使用者的干擾,所以我才會將原本就已經是透過指令來執行的Wol程式(以wolcmd為例),再透過批次檔的方式加工成較簡單的流程,或許自己用起來也比較直覺。

除了遠端喚醒之外,在某些特殊的情況之下,還可以透過遠端連線的方式來強制關機(例:使用者下班後不關機),雖然也能夠透過遠端連線之後(遠端桌面、Telnet或ssh...等),再來操作關機的動作,不過,要是每台電腦都得透過如此冗長的關機手續,我想可能直接過去幫他關機也還實際一些,還好在Windows的環境下有「Shutdown」這個小程式可用(Windows 2K可由XP內COPY過去即可使用),甚至在微軟的官方平台上有更為強大的PsShutdown可用。

網路喚醒:

wolcmd的用法相當簡單,只要依照它的介紹與說明即可正常運作。
wolcmd [MAC] [IP] [SUBNET MASK] [PORT]
wolcmd 009027a324fe 195.168.1.10 255.255.255.0 7



(所收到的Magic Packet封包資訊)


至於硬體上的設定不外乎就是要注意下列幾點:
1.BIOS中開啟WOL功能。
2.網卡設定中,需啟用WOL的相關功能。
3.非內建網卡,需支援PCI 2.2以上,否則要以連接線啟動。

其實在網路喚醒的部分,無論你是採用何種平台,都有它能夠使用的小程式來協助你達到這部分的應用,對於管理者來說,更重要的應該是喚醒之後要做些什麼事?採用什麼方式遠端連線去控制(例:遠端登入的優缺點),利用網路喚醒電腦,只是一種便利自己的手段而已。

雖然網路喚醒的工具程式不少,但是,你如果想要跨越Router來進行網路喚醒的動作,也不是一件簡單的事情,可能就得事先進行一番設定(或是花錢買有支援WOL的Router),才有機會能夠從網路上的任何一端,遠端來進行網路喚醒的動作,不然,一般來說都是在區網的環境之下來進行網路喚醒的廣播。

其實以現在的IP分享器(路由器),基本上都可以支援從網際網路上來遠端喚醒在路由器之後的主機,只要在設定的部分將「IP與MAC ADDRESS綁定」(讓IP與啟動的MAC ADDRESS對應)及「虛擬伺服器」(開放MAGIC PACKET),如果連這兩個功能都沒有的話,真的就需要有支援「Subnet Directed Broadcast」的Router才行得通。

1.綁定IP和MAC ADDRESS:將主機的MAC ADDRESS和IP寫入即可。



2.設定虛擬伺服器:讓Magic Packet(例:udp 7~9 )可以傳送至特定IP



原則上這樣子的設定就可以讓你透過封包轉發的方式,來喚醒遠端的主機,其它部分應該就是屬於主機設定的問題。

遠端關機:

遠端關機的操作其實不難,難的是環境的障礙,因為當你要使用Shutdown.exe來執行遠端關機時,最基本的條件就是,你得先取得與被控端主機的權限(管理者本來經該要有吧?),因為在Windows XP的權限設定中(控制台 → 系統管理工具 → 本機安全性原則),原則上僅允許「Administrators」群組的使用者使用遠端關機,如果有特殊需求時,可以視狀況加入相關的群組。(請務必三思)



如果你能夠取得這部份的權限之後,基本上就已經成功了一大半,接著就只要利用shutdown的指令即可進行遠端關機的動作,例:60秒後關閉\\mark-pc
shutdown -s -f -m \\mark-pc -t 60

但是你有可能會遇到一些權限上的問題(例:存取被拒),這時候就是指你跟被控端主機中,據有遠端關機的使用者資訊不同,這時候就可以透過「net use」的指令來解決存取上遭遇到的問題,簡單地說就是透過「net use」來取得「\\遠端主機\ipc$」的連線,例:
1.與被控端主機連線(以Administrator):
net use \\mark-pc /user:administrator password

2.查看連線狀態:
net use

3.遠端關機並提示使用者:
shutdown -s -f -m \\mark-pc -t 60 -c "60秒後,由管理者進行強制關機"


(實際操作的截圖,可點擊放大)


如此就可以透過遠端的主機來進行關機的動作,除此之外,當然也有別的做法,例如我在網路上找到能夠透過Linux來關閉Windows主機的做法「Expect 遠端關機」(基於某些考量,我個人是不會開放telnet的服務,所以無法使用,但是仍能夠做為參考)

至於我自己的做法,依照慣例我還是會把這樣子的東西轉換成批次檔,畢竟在用來整合排程時,還是有它的優勢存在,有興趣的人可以再一起討論,說不定會有更好的寫法,拙著如下:



如果你可以下載批次檔案的話,我也直接把這個檔案(wol.bat)上傳至網路空間,需要的人請自行帶走,最後就只要把「wolcmd.exe」(請自行下載),與「wol.bat」放在同個資料夾中,即可執行。(如果無法正常執行,歡迎留言,但不保證一定能夠解決,畢竟網路環境的變數太多)

其實,原本還想弄個自動匯出批次檔的功能,不過...會用這個小東西的使用者,我想自己改一個可能也不用多久,所以我就暫時沒弄了,下次有機會再來試試吧!