20070503 wake on lan 远程唤醒
http://www.yippeesoft.com
淺談 Wake On Lan
作者:北縣教網張啟中
資料來源:http://enews.tpc.edu.tw/document/technology/2001/%E6%95%99%E7%B6% B2%E4%B8%AD%E5%BF%83%E5%BC%B5%E5%95%9F%E4%B8%AD%E3%80%8C%E6%B7%BA%E8%AB%87%20Wake%20On%20Lan%E3%80%8D.htm
遠端喚醒(Wake On Lan,WOL)是許多網管人員喜歡使用的功能之一。有了遠端喚醒,對於不需要24小時開機運作的機器,可以在需要的時候,直接從遠端透過網路將其開機,然後進行維護,兼顧了省電與維護便利的需求。這篇文章將簡單的探討一下有關遠端喚醒功能的實作方式及其原理,程式部分,則以 C++ Builder 5.0(Enterprise 版本)為主,讀者在瞭解原理後,可以改以自己熟悉的語言來撰寫。
先談談遠端喚醒功能,所需具備的硬體條件:
(1)主機板必須支援 Wake On Lan 的功能。通常有支援的主機板,它必定會有一個接口,以連接到網路卡,記得,如果你的主機板有支援 WOL 的功能的話,在BIOS的設定中,你得將這個功能選項打開,這項功能通常在 Power Management 的選單中。
(2)你的網路卡必須支援Wake On LAN,這樣的網路卡比起一般的網路卡稍貴,但大約在 500-600元間,安裝時,記得要將連接線連接到主機版,否則,網路卡可是無法將開機訊號通知主機版的。
當硬體環境符合以上條件,那麼只需有一個遠端喚醒的程式,就可以達到遠端喚醒的功能了。在 AMD的網站中有提供一個程式,叫 Magic Package,它可以讓你設定時間,喚醒一台機器,甚至一群機器,相當有趣。讀者若有興趣可以到
http://www.amd.com/us-en/Networking/TechnicalResources/0,,50_2334_2452_2456,00.html
下載,檔案大小約 924 KBytes 左右。
接下來我將說明遠端喚醒程式的原理與實作方式,由於牽涉到程式寫作,所以,如果讀者只對應用比較有興趣,那麼以下的部分可以略過。一般而言,實作遠端喚醒功能的方式有許多種,其中一種 AMD 稱為 Magic Package (神奇封包),他的原理相當簡單,就是網路卡它會利用極低的電壓,來維持一個基本運作,它會不斷的偵測外界傳來的訊號,如果該封包的訊號包含有一組 Magic Package 時,它就會發出開機訊號給主機板,讓主機板啟動,你的電腦當然也就能夠遠端喚醒,再加上遠端控管的軟體,哈哈,天下無敵,又省電,又方便….. 問題是這個 Magic Package 是怎樣的格式呢?
簡單,根據 AMD 的說法,這個 Magic Package 必須要是這樣的格式
DESTINATION SOURCE MISC FF FF FF FF FF FF 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66 MISC CRC
仔細觀察這段格式,讀者可以發現,連續有六個位元組(Bytes),其值為 FF,這是同步訊號,接下來,連續重複 16 次出現的11 22 33 44 55 66,則是遠端欲開機電腦中,網路卡的 MAC 位址,這是神奇封包的最主要部分,其餘部分,在實作時可以忽略,因為主要部分只要符合前述的規定(6 bytes 的同步訊號 FF + 連續16次網卡的MAC 位址),它是可以位於封包的任何位置。
瞭解了原理,我們就可以開始撰寫簡易的遠端喚醒程式,由於要送出網路封包,所以,我們將運用 TCP/IP 協定來實作,一方面是較容易撰寫,二方面是TCP/IP協定的運用層面較廣,但運用TCP/IP來實作,有幾點是必須注意的:
(1) TCP/IP協定在傳輸層,分為TCP與UDP,我們必須選哪個?由於TCP的協定,是屬於可信賴性的協定,也就是溝通的雙方必須都要交握確認成功後,才開始傳資料,否則將產生錯誤訊息,顯然,選擇TCP協定將導致遠端喚醒程式無法運作,因為,被喚醒端尚未開機,所以,TCP在雙方交握確認階段是不可能成功的,當然資料也就傳不出去。
(2) 不管TCP或UDP都必須指定IP及Port號,IP位址部分應該填該網段的廣播位址,至於Port 號,由於遠端喚醒功能是由OSI的第二層鏈結層在處理,因此這部分可以不考慮,隨便填一個就好,80埠是相當不錯的選擇,因為它可以通過大部分的防火牆。
(3) MAC如何的取得?最正規的作法是利用ARP協定,透過程式事前取得,並建立成資料庫,但又是另一個主題了,本文將不介紹這部分,留待來日再談…….至於 MAC位址,讀者就先啟動被喚醒端的電腦,利用 ipconfig/all 指令,先記下其 MAC位址,以便測試時填入。
以下為主要程式碼片段,其中 NMWOL 是 C++ Builder 5.0(Enterprise版本)所提供之 VCL 元件,在 FastNet 頁次中,元件名 NMUDP )
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
&leftsign;
byte mac[6]; // 存放被喚醒端 MAC Address
byte buf[102]; // 存放 magic package
int i,j; // 迴圈變數
// 讀入所輸入之 MAC 位址
mac[0] = StrToInt("0x"+Edit2->Text);
mac[1] = StrToInt("0x"+Edit3->Text);
mac[2] = StrToInt("0x"+Edit4->Text);
mac[3] = StrToInt("0x"+Edit5->Text);
mac[4] = StrToInt("0x"+Edit6->Text);
mac[5] = StrToInt("0x"+Edit7->Text);
// 建立 magic package 內容
// stage 1: 同步訊號
for (i=0; i<6; i++) &leftsign;
buf[i] = 0xFF;
&rightsign;
// stage 2: 被喚醒端 Mac 位址
for (i=0; i<16; i++)
for (j=0; j<6; j++)
buf[(i*6+j+6)] = mac[j];
// 傳送 magic package 至被喚醒端
NMWOL->RemoteHost = Edit1->Text; // 設定被喚醒端的廣播 IP
NMWOL->RemotePort = 80; // 設定被喚醒端的廣播 Port Number
NMWOL->SendBuffer(buf, 102, 102); // 傳送,總共 102 Bytes( 6 + 16*6 )
ShowMessage("Magic Package 已經傳送….");
&rightsign;
完整程式請按此 下載
程式執行畫面
written by 北縣教網張啟中 2002/03/05
Wake On LAN是一種遠端管理的技術,讓遠端管理者不論何時何地可以透過LAN來開啟客戶端機器,並進行進一步的管理,不論軟體更新、問題檢測等等,可以更有效率的進行。
远程唤醒技术(WOL,Wake-on-LAN),可以通过局域网实现远程开机,无论被访问的计算机离我们有多远、处于什么位置,只要处于同一局域网内,就都能够被随时启动。
远程唤醒的硬件需求
可被远程唤醒的计算机对硬件有一定的要求,主要表现在网卡、主板和电源上。
1.网卡
能否实现远程唤醒,其中最主要的一个部件就是支持WOL的网卡。远端被唤醒计算机的网卡必须支持WOL,而用于唤醒其他计算机的网卡则不必支持WOL。另外,当一台计算机中安装有多块网卡时,只将其中的一块设置为可远程唤醒。
2.主板
主板也必需支持远程唤醒,可通过查看CMOS的“Power Management Setup”菜单中是否拥有“Wake on LAN”项而确认。另外,支持远程唤醒的主板上通常都拥有一个专门的3芯插座,以给网卡供电(PCI2.1标准)。 由于现在的主板通常支持PCI 2.2标准,可以直接通过PCI插槽向网卡提供+3.3V Standby电源,即使不连接WOL电源线也一样能够实现远程唤醒,因此,可能不再提供3芯插座。主板是否支持PCI2.2标准,可通过查看CMOS的 “Power Management Setup”菜单中是否拥有“Wake on PCI Card”项来确认。
3.电源
若欲实现远程唤醒,计算机安装的必须是符合ATX 2.01标准的ATX电源,+5V Standby电流至少应在600mA以上。
远程唤醒实现前的准备
计算机拥有远程唤醒功能并不等于能够实现远程唤醒,在实现之前,还必须对硬件作必要的连接和设置。
1.CMOS和网卡设置
引导计算机,进入CMOS参数设置。选择电源管理设置“Power Management Setup”菜单,将“Wake up on LAN”项和“Wake on PCI Card”项均设置为“Enable”,启用该计算机的远程唤醒功能。另外还需将网卡上的“Wake-on-LAN”功能设置为“Enable”。
2.硬件连接
将网卡安装在计算机的PCI插槽中,然后将WOL电缆的两端分别插入网卡和主板的3芯插座中,将网卡与计算机主板连接起来。如果计算机主板支持PCI 2.2标准,那么,只需开启“Wake on PCI Card”功能就可以了,无须使用WOL电缆连接。启动计算机,安装网卡驱动程序并进行必要的网络设置、指定IP地址参数。
3.设置用户自动登录
在唤醒远程计算机时,必须能够自动登录,方法如下:如果远程计算机配置为多个用户使用(若为单用户则直接执行下一步),在“控制面板”中双击“用户”图标,在对话框中删除所有的用户。重新启动计算机,当显示登录对话框时,不输入密码直接单击“确定”。打开 “控制面板”中的“网络”选项,将“主网络登录”选“Microsoft友好登录”或“Windows登录”。选择“Microsoft网络用户”,并单击“属性”按钮,在弹出的对话框中取消“登录到Windows NT域”复选框的选择。打开“控制面板”中的“密码”项,在出现的“密码属性”对话框中选择“用户配置文件”标签,选中第一项“此计算机上所有的用户使用相同的首选项和桌面配置”,单击“确定”,重新启动计算机。经过以上几步的设置,远程计算机在启动时就 不会出现登录界面了。
4.测试网卡的MAC地址
通过在计算机上运行winipcfg.exe(WIN95)或ipconfig.exe(WIN98),即可测知网卡的MAC地址。
Winipcfg
依次单击“开始/运行”,键入“winipcfg”并回车,弹出“IP配置”窗口。在下拉列表中选择“PCI Fast Ethernet Adapter”,此时显示在“适配器地址”栏中的文字即为该网卡的MAC地址。
Ipconfig
在DOS提示符下,运行加“all”参数的ipconfig命令,也可显示网卡的MAC地址。命令格式如下:ipconfig /all
远程唤醒的实现
远程唤醒需要借助相应的软件才能实现。如TP-LINK公司的TF-3239需要使用AMD公司的Magic Packet来作为远程唤醒数据包。远程唤醒某台计算机时,运行“Magic_pkt.exe”程序,出现主窗口。选择“Run Power Management Test”,然后在弹出的对话框中选择“Master Machine”,继续在对话框中选择“Magic Packet”或“Wakeup Frame”,软件提示“Input Ethernet Address to Match Node ID of Target Machine”(目标计算机网卡MAC地址)中输入欲唤醒计算机网卡的MAC地址,回车发送。远程计算机自动启动,稍候片刻后即可对其进行操作。
故障的排除
1.启用网卡远程唤醒功能后计算机不能正常启动的解决方法
Ø 从计算机主板上移去3针远程唤醒线;
Ø 重新启动计算机,运行配置程序设置网卡;
Ø 关闭计算机,重新连接3针远程唤醒线;
Ø 重新启动计算机。
2.当发送远程唤醒信号后计算机不能被唤醒的解决方法
Ø 查看计算机和网卡是否均满足远程唤醒的基本要求;
Ø 检查计算机上有关远程唤醒的CMOS设置是否正确;
Ø 移去计算机机箱盖,检查3针远程唤醒连接是否正确可靠;
Ø 运行配置程序,检查网卡的参数设置是否恰当;
Ø 插上一块已知肯定没有问题的WOL网卡和3针远程唤醒线缆,重新对计算机进行检查
1. 我的电脑(按右键) -> 属性 -> 硬件 -> 设备管理器 -> 网卡(按右键) -> 属性 ->电源管理 -> 允许这台设备使计算机脱离待机状态,将此选项勾选
2.进入BIOS -> Power -> PCI PME Wake up —- 此选项设置为Enable
●前言●
Wake-On-LAN 是使用AMD "Magic Packet"技术,它非常类似於PCMCIA数据机的"wake
on ring"的讯号技术,其基本的原理是提供网路卡一个非常低的电源让它去监看网路上
的特别的封包进而起动电脑。
●本文●
当我们要唤醒目标电脑时,我们必需要知道这台电脑的网路卡编号及网路卡位置.如果
您的机器是有多片的网路卡时,您还必需确认您的WOL连接线接在哪一片网路卡。
到ftp://ftp.scyld.com/pub/diag/ether-wake.c.下载唤醒程式,使用下面的指令
cc -O -Wall -o ether-wake ether-wake.c编译後会有ether-wake执行档。
然後在我们的目标机器里载入网路卡的驱动程式并且利用ifconfig记录网路卡的卡号。
关掉目标电脑,请注意不要把电源开关关掉,不然将无法从网路开机。
在我们的控制电脑执行以下指令。
[root@asako mail]# ~asako/ether-wake 00:50:14:cc:2e:8c
然後我们将会看到目标的电脑自动的开机。
已支援的网路卡
目前大部份支援网路开机的晶片都有支援,这里只是列出部份简单的列表。如intel
i82557(EEPro100B)及目前intel的标准版本i82558 (EEPro100+) and i82559。
使用i82557晶片,内建100Mbase的Intel主机版,但是您必需升级您的韧体
其它的晶片如AMD Fast-PCnet,和早期Intel/Digital 21143,和3Com(3c905-revB),
和Symbios的晶片(不支援早期的gigabit的晶片)。
要建立一个完整的网路开机的环境您必需要有一个支援网路开机的主机版,和一个可以
在电脑关机时能提供,5V电源的ATX电源供应器。要网路开机能够正常的工作,您的主机
版必需要能够提供足够的电源给网路卡让它能够去接收网路上的封包并且判断是否符合
进而开机,如果您没有以上的支援您将无法使用网路开机。
●ether-wake程式选项说明●
ether-wake 程式提供以下的选项∶
-b 传送唤醒封包至广播位置。
-D 增加除错等级。
-i 网路卡介面名称,内定值为"eth0"。
-p 密码,在封包後面加入四至六个byte的密码。(请看以下密码的说明。)
-v 增加说明等级。这个选项让您能够去追踪封包的产生。
-V 显示程式的版本。
●Wake-On-LAN with Linux 密码说明●
一些网路卡的晶片提供WOL密码选项,为了使WOL的封包能被接收您必需加上密码,而
密码长度为四或六个 bytes。密码可能为十六进位(网路卡卡号)或者十进位(Internet
位置)的格式。例如∶
-p 00:22:44:66:88:aa
-p 192.168.1.1
●结语●
目前比较新式的网路卡大概都有支援到网路开机,便宜一点的如Dlink530TX-Rev-b,
比较好一点的大概就是3com及Intel的网路卡。各位不彷试试网路开机的新功能。
历史博文
- DataTable DataView - 2010
- 20080423 Groove 2007 - 2009
- 0806 Not Death, but love - 2007
- 1227 vc.net mfc ado.net gcroot 2 - 2006