什么是網(wǎng)絡喚醒
網(wǎng)絡喚醒實現(xiàn)了對網(wǎng)絡的集中管理,即在任何時刻,網(wǎng)管中心的IT管理人員可以經(jīng)由網(wǎng)絡遠程喚醒一臺處于休眠或關機狀態(tài)的計算機。使用這一功能,IT管理人員可以在下班后,網(wǎng)絡流量最小以及企業(yè)的正常運作最不受影響的時候完成所有操作系統(tǒng)及應用軟件的升級及其他管理任務。
為了喚醒網(wǎng)絡上的計算機,用戶必須發(fā)出一種數(shù)據(jù)包,該數(shù)據(jù)包的格式與普通數(shù)據(jù)包不同,而且還必須使用相應的專用軟件才能產(chǎn)生。當前比較普遍采用的是AMD公司制作的Magic Packet,這套軟件可以生成網(wǎng)絡喚醒所需要的特殊數(shù)據(jù)包。該數(shù)據(jù)包包含有連續(xù)6個字節(jié)的“FF”和連續(xù)重復16次的MAC地址。Magic Packet 雖然只是AMD公司開發(fā)推廣的一項技術,并非業(yè)界公認的標準,但是仍受到很多網(wǎng)卡制造商的支持,因此許多具有網(wǎng)絡喚醒功能的網(wǎng)卡都能與之兼容。
要使用網(wǎng)絡喚醒,你必須擁有:
1:可向網(wǎng)卡發(fā)送網(wǎng)絡“喚醒幀”的軟件。
2:可解碼“喚醒幀”的網(wǎng)卡,該網(wǎng)卡同時還必須可以從輔助電源中獲取能量,并能夠向主板發(fā)送“喚醒信號”。 (基本上都支持)
先說被喚醒機器如何設置
1.Win7系統(tǒng)下設置如下圖,計算機-》設備管理器-》網(wǎng)卡驅動屬性

2.ipconfig –all 命令查看本機網(wǎng)卡的MAC地址
發(fā)送的網(wǎng)絡數(shù)據(jù)包顯示如下圖,其中mac地址是隨便填寫的重復的09。

C#代碼如下:
PRivate IPEndPoint point; private UdpClient client = new UdpClient(); /** * 喚醒遠程機器方法 * @param * mac 要喚醒的機器的MAC * IP * port udp消息發(fā)送端口 * * 摘要:喚醒方法為網(wǎng)卡提供的魔術封包功能,即以廣播模式發(fā)送6個FF加上16遍目標MAC地址的字節(jié)數(shù)組 **/ private void wakeUp(string mac, int port, string ip) { byte[] magicBytes = getMagicPacket(mac); point = new IPEndPoint(IPAddress.Parse(ip), port);//廣播模式:255.255.255.255 try { client.Send(magicBytes, magicBytes.Length, point); } catch (SocketException e) { MessageBox.Show(e.Message); } } /// <summary> /// 字符串轉16進制字節(jié)數(shù)組 /// </summary> /// <param name="hexString"></param> /// <returns></returns> public static byte[] strToHexByte(string hexString) { hexString = hexString.Replace(" ", ""); if ((hexString.Length % 2) != 0) hexString += " "; byte[] returnBytes = new byte[hexString.Length / 2]; for (int i = 0; i < returnBytes.Length; i++) returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16); return returnBytes; } /// <summary> /// 拼裝MAC魔術封包 /// </summary> /// <param name="hexString"></param> /// <returns></returns> public static byte[] getMagicPacket(string macString) { byte[] returnBytes = new byte[102]; string commandString = "FFFFFFFFFFFF"; for (int i = 0; i < 6; i++) returnBytes[i] = Convert.ToByte(commandString.Substring(i * 2, 2), 16); byte[] macBytes = strToHexByte(macString); for (int i = 6; i < 102; i++) { returnBytes[i] = macBytes[i % 6]; } return returnBytes; }
當然這只是在局域網(wǎng)中實現(xiàn)的,如果要在廣域網(wǎng)中實現(xiàn)的話還需要路由器映射等什么的,本文不做討論。
AMD官方的技術文檔:http://files.VEVb.com/zxlovenet/MagicPacket%E7%99%BD%E7%9A%AE%E4%B9%A6.pdf
新聞熱點
疑難解答