湯明偉 吳東超
摘 要:目前各學校的機房計算機數(shù)量龐大,如何破解機房批量開關機,提高實驗室的日常管理水平和效率,是機房管理工作中的一大難題,文章提出基于ESP8266實現(xiàn)機房遠程開關機方案,旨在不增加計算機軟硬件的基礎上,通過ESP8266自帶的WiFi網路功能,為機房日常運行與維護尋找一套行之有效的方法。
關鍵詞:遠程控制;ESP8266;magic packet;局域網
0 引言
隨著計算機技術的日異月新,各高校的機房配置的計算機功能越來越豐富,計算機的網卡都支持遠程喚醒(Wake On LAN)功能。為了方便教學各機房安裝了類似“極域2015”控制端軟件,實現(xiàn)了遠程開關機和網絡教學功能,極大地提升了教學質量和教學效果。但因各種原因,機房在使用結束后,或多或少總有部分機器未關機。這些未正常關機的計算機不僅持續(xù)地浪費電力資源,存在著安全隱患;這些未關閉的計算機也給機房管理帶來了不少麻煩,直接斷電關機,會造成計算機的軟硬件損壞,影響正常的使用;如果逐一正常關機,大大增加了機房管理人員的工作量。如果能利用計算機的遠程喚醒功能,開發(fā)一套無需在計算機上安裝控制端的系統(tǒng),用于應對機房的日常管理,將大大減輕機房管理員的工作量。設計思路如下:獲取要控制的計算機網卡MAC地址,通過ESP8266開發(fā)板的自帶的WiFi聯(lián)網功能接入局域網,由ESP8266利用網卡的遠程喚醒功能,向被控計算機發(fā)送開關機指令實現(xiàn)遠程開關機指令,實現(xiàn)機房快速開關機功能,有效減輕機房管理的工作量,同時也有效延長了計算機軟硬件的使用壽命,減少了不必要的浪費[1]。
1 Wake On LAN遠程喚醒的原理
當聯(lián)網的計算機關閉啟遠程喚醒功能時,計算機關機后網卡也處于關閉狀態(tài),是無法檢測、接收網絡上的信息的。如果將計算機的遠程喚醒功能開啟,計算機網卡在計算機關機后處于低功耗狀態(tài),可以檢測、接收網絡上的信息,并對接收到的信息進行處理,這就為遠程喚醒計算機的實現(xiàn)提供了硬件基礎。當計算機處于關機狀態(tài)時,計算機的IP地址和計算機名稱都無法識別計算機身份,唯一能夠作為識別計算機身份只有網卡的物理地址(MAC)[2]。用戶獲取被喚醒計算機的物理地址(MAC)后,就可以利用廣播包的方式在網絡上傳輸喚醒數(shù)據包,喚醒數(shù)據包中包含被喚醒計算機的網卡信息、物理地址信息等數(shù)據資料。當處于關機狀、睡眠狀態(tài)的計算機網卡接收到喚醒數(shù)據包后,網卡控制芯片通過檢測數(shù)據包中的MAC地址,如果發(fā)現(xiàn)并確認數(shù)據是發(fā)給自己的,則通過專用的電路出發(fā)開機信號,計算機加電啟動[3]。
Magic Packet是AMD公司開發(fā)的網絡喚醒技術,根據Magic Packet標準,Magic Packet數(shù)據包包含兩部內容,共計102字節(jié),格式為:6*0xFF+16*MAC地址。其中6個“FF”表示這是一個特殊的喚醒數(shù)據包,后面緊跟重復16次的被喚醒計算機的MAC地址。
2 ? ESP8266WiFi模塊簡介
樂鑫科技是一家全球化的無晶圓廠半導體公司,多年來深耕AIoT領域軟硬件產品的研發(fā)與設計。ESP8266模塊提供了一套高度集成的WiFi SoC解決方案,專注于研發(fā)高集成、低功耗、性能卓越、安全穩(wěn)定、高性價比的WiFi和藍牙MCU。既能獨立應用,也可以作為從機搭載其他主機MCU運行,成為物聯(lián)網應用的理想選擇。
2.1? ESP8266 系列芯片參數(shù)
32-bit MCU&2.4 GHz WiFi;單核CPU時鐘頻率高達160 MHz;+19.5 dBm天線端輸出功率,確保良好的覆蓋范圍;睡眠電流小于20 μA,適用于電池供電的可穿戴電子設備;外設包括 UART,GPIO,I2S,I2C,SDIO,PWM,ADC 和SPI。
2.2? ESP8266的特點
2.2.1 性能卓越
ESP8266EX芯片內置超低功耗Tensilica L106 32位RISC處理器,CPU時鐘速度最高可達160 MHz,支持實時操作系統(tǒng)(RTOS)和WiFi協(xié)議棧,可以將高達80%的處理能力應用于編程和開發(fā)。
2.2.2 高度集成
ESP8266芯片高度集成天線開關、射線巴倫、功率放大器、低噪音接收發(fā)達器、濾波器等射頻模塊。模組尺寸小巧,尤其適用于空間受限的產品設計。
2.2.3? 產品應用豐富
ESP8266模組既可以通過ESP-AT指令固件,為外部主機MCU提供WiFi連接功能;也可以作為獨立WiFi MCU運行,用戶通過RTOS的SDK開發(fā)帶WiFi連接功能的產品。
3 系統(tǒng)實現(xiàn)過程
3.1 開發(fā)語言環(huán)境
開發(fā)環(huán)境采用Arduino1.8.13版本作為開發(fā)環(huán)境,由于Arduino采用開源代碼,并且具有使用類似Java,C語言的Processing/Wiring開發(fā)環(huán)境。Arduino不僅僅是全球最流行的開源硬件,也是一個優(yōu)秀的硬件開發(fā)平臺,更是硬件開發(fā)的趨勢。Arduino簡單的開發(fā)方式使得開發(fā)者更關注創(chuàng)意與實現(xiàn),更快的完成項目開發(fā),大大節(jié)約了學習的成本,縮短了開發(fā)的周期。同時下載并配置ESP8266開發(fā)庫,方便ESP8266的開發(fā)。
3.2 硬件連接
在不改變機房網絡連接的基礎上,ESP6266通過有線或者無線方式接入機房局域網,通過兩個開關按鈕向ESP8266發(fā)送開關機指令,當ESP8266收到按鈕信息后執(zhí)行開關機代碼,然后通過廣播方式將封裝好的喚醒數(shù)據包發(fā)送到局域網中,實現(xiàn)對局域網中計算機的開關機控制(見圖1)。
3.3 功能實現(xiàn)
該系統(tǒng)重點實現(xiàn)對局域網中計算機進行遠程開關機操作,用于減輕機房管理員逐臺手動開關機的工作量,提高機房管理員的工作效率。當機房管理員需要對計算機開機檢修或者批量關閉計算機時,僅需要按下連接ESP8266開發(fā)板上對應的開關機按鈕就可以實現(xiàn)對批量計算機執(zhí)行相同的操作。同時也減少了機房計算機因非正常開關機帶來的負面影響,提升了計算機的使用率,延長了計算機整體的使用壽命。該系統(tǒng)目前只需要包含4個功能。
3.3.1 WiFi自動聯(lián)網功能
由于現(xiàn)在的網絡環(huán)境復雜,學院WiFi信號覆蓋有三四種,有的需要賬號和密碼,有的不需要密碼可以直連;再加上學生自己利用手機開設熱點,就會導致ESP8266加電會掃描到很多熱點,為了防止ESP8266“意外”連接到其他熱點,就需要通過控制實現(xiàn)ESP8266自動聯(lián)網功能,讓其在加電后直接連接上指定的熱點,確保ESP8266始終能夠連接到指定的局域網中。而ESP8266初次聯(lián)網后,系統(tǒng)會自動將WiFi的賬號、密碼自動保存在flash ROM中,當再次上電后先檢測保存的連接信息是否能夠聯(lián)網,如果有有效的連接信息存在,則自動進行連接;否則自動建立“AutoConnectAP”熱點,通過手機連接“AutoConnectAP”熱點,選擇指定的WiFi信號并輸入密碼,完成ESP8266接入指定的網絡。通過此方法,極大地提升了ESP8266的普及率,可以使用ESP8266的WiFiManager庫實現(xiàn)自動聯(lián)網的功能。
由于本系統(tǒng)開發(fā)過程中暫不使用任何顯示設備,如何確定ESP8266是否聯(lián)網成功,也是需要考慮的問題。本系統(tǒng)使用ESP8266自帶的LED指示燈來提示用戶是否聯(lián)網成功,設計思路如下:
如果聯(lián)網成功,則ESP8266自帶的LED常亮;如果正在聯(lián)網則LED快速閃爍,嘗試連接WiFi熱點20次,還是連接不成功則停止連接,LED持續(xù)快速閃爍。通過這個方法,用戶就可以知道ESP8266的聯(lián)網狀況。實現(xiàn)代碼如圖2所示。
3.3.2 遠程開機功能實現(xiàn)
在局域網中通過arp–a命令獲取局域網中各計算機的MAC地址,MAC地址格式為“6C-0B-84-68-7B-38”,通過代碼檢測給定的MAC地址字符串是否是指定的長度。如果是代碼中自定的長度,則認為MAC地址正確,通過格式控制函數(shù)將獲取的MAC地址轉換成為十六進制表示格式“0x6C-0x0B-0x84-0x68-0x7B-0x38”;否則給出錯誤提示信息。
通過代碼將“0x6C-0x0B-0x84-0x68-0x7B-0x38”中的數(shù)據提取出來,剔除格式字符串中的“-”符號,并將數(shù)據保存到{0x6C,0x0B,0x84,0x68,0x7B,0x38}數(shù)組中,這個數(shù)組中的值就是構造Magic Packet數(shù)據包要用到的數(shù)據。
根據Magic Packet白皮書描述,這個魔法數(shù)據包由6組 “FF”+16組十六進制的被喚醒計算機的MAC地址構成(FFFFFFFFFFFF6C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B38
6C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B38)。因此需要通過代碼構造Magic Packet數(shù)據包,實現(xiàn)代碼如圖3所示。
通過以上3個步驟,可以獲得Magic Packet封裝的數(shù)據包。通過UDP協(xié)議將封裝好的數(shù)據包發(fā)送到局域網中,這樣局域網中的計算機網卡都會收到這個喚醒數(shù)據包,網卡通過解析決定是否是自己的MAC地址,決定是否執(zhí)行喚醒操作,具體代碼如下:
void sendMagicPacket(char* _SingleMAC,IPAddress _broadcastAddress,uint16_t _NumPort){
……
//Constructing magic packet variable
size_t magicPacketSize = 6 +(6 * 16);? // FF*6 + MAC*16
uint8_t* magicPacket = new uint8_t[magicPacketSize];
if(strlen(_SingleMAC)==17){
sprintf(FormatString,”%%2x%c%%2x%c%%2x%c%%2x%c%%2x%c%%2x”,
_SingleMAC[2],_SingleMAC[5],_SingleMAC[8],_SingleMAC[11],_SingleMAC[14]);
intcounts=sscanf(_SingleMAC,(const char*)FormatString,&tempMACAddress[0],
&tempMACAddress[1],&tempMACAddress[2],&tempMACAddress[3],
&tempMACAddress[4],&tempMACAddress[5]);
if(counts==6){
for(int i=0;i<sizeof(tempMACAddress)/sizeof(*tempMACAddress);i++){
MACAddressHEX[i]=tempMACAddress[i];
Serial.print(MACAddressHEX[i],HEX);
}}
else{? ? ? Serial.println(“Conversion Failed !”);? ? }
generateMagicPacket(magicPacket, magicPacketSize,
MACAddressHEX, sizeof(MACAddressHEX));
for(int i=0;i<3;i++){
wifiUDP.beginPacket(_broadcastAddress,_NumPort);
wifiUDP.write(magicPacket,magicPacketSize);
sucessNum=wifiUDP.endPacket();
delay(100);
if(sucessNum==3){
Serial.println(“Data Send Succeed!”);
sucessNum=0;
}}}
else{? ? Serial.println(“MAC Address Data Format Error!”);? }? }
3.3.3 遠程關機功能實現(xiàn)
計算機處于正常運行狀態(tài),可以正常接收并執(zhí)行命令行。采用UDP協(xié)議通過廣播地址向局域網廣播,向整個局域網發(fā)送關機命令(shutdown),當計算機收到關機命令后,本地執(zhí)行關機命令實現(xiàn)遠程關機。實現(xiàn)代碼如下:
SendShutdown(uint16_t Numport){
Const char* ShutDown=”shutdown”;
int suceessNum=0;
for(int i=0;i<3;i++){
wifiUDP.beginPacket(_broadcastAddress,_NumPort);
wifiUDP.write(ShutDown,8);
sucessNum=wifiUDP.endPacket();
delay(100);
if(sucessNum==3){
Serial.println(“Data Send Succeed!”);
sucessNum=0;
}}}
4 功能測試
以聯(lián)想啟天M428-A119臺式計算機作為目標測試機,配置如下:
(1)CPU:Intel? Core(TM)i3-8100 @ 3.60 GHz 3.60 GHz;
(2)內存:8 G內存;
(3)操作系統(tǒng)類型:Windows7 64位旗艦版;
(4)網卡:Realtak PCIe GbE Family Controller千兆網卡;
從機房中隨機挑選4臺計算機,首先,進入BIOS界面,確保“Wake On LAN ”選項開啟。進入BIOS界面,切換到“Power”,修改“Wake On LAN”選項為“Automatic”,保存退出BIOS。
其次,修改網卡選項,確??梢越邮盏絾拘训臄?shù)據包。進入Windows7系統(tǒng)桌面,鼠標右鍵單擊“我的電腦”—“屬性”—“設備管理器”—“網卡適配器”—“Realtak PCIe GbE Family Controller”,鼠標右鍵單擊此網卡,選擇“屬性”,彈出網卡屬性對話框。在“高級”選項卡中,修改“魔術封包”和“關機網絡喚醒”的值為“開啟”;在“電管理”選項卡中,勾選“允許此設備喚醒計算機”,點擊“確認”按鈕保存修改。
最后,將燒錄代碼的ESP8266開發(fā)板中,通過WiFi接入機房的局域網,確保WiFi的IP地址和計算機的IP地址在同一個網段。ESP8266通電后LED燈點亮,表示ESP8266聯(lián)網成功。按下開發(fā)板上的“開機”按鍵,可以看到4臺計算機依次加電開啟,表明設計思路正確,獲取目標機MAC格式正確,系統(tǒng)代碼正常運行。
5 ? 結語
本系統(tǒng)旨在不改變原有機房布局和配置的前提下,無需安裝控制端程序,通過單個ESP8266開發(fā)板實現(xiàn)局域網中的遠程喚醒/關閉計算機功能,有效解決了機房批量開關機的難題,消除了機房的安全隱患,提升了機房管理效率。
[參考文獻]
[1]李佳.遠程控制技術在高校機房管理中的應用探究[J].電腦編程技巧與維護,2019(10):34.
[2]儲懷川,王誠忠,張宇.基于GSM短信的無人機房遠程控制系統(tǒng)的設計[J].有線電視技術,2017(5):67.
[3]高岳.機房管理中網絡遠程控制技術應用研究[J].信息系統(tǒng)工程,2017(1):48-49.
(編輯 何 琳)
Research and implementation of remote switching machine room based on ESP8266
Tang Mingwei, Wu Dongchao*
(Jiangyin Vocational and Technical College, Jiangyin 214405, China)
Abstract:At present, there are a large number of computers in the computer room of each school. How to crack the batch switching on and off of the computer room and improve the daily management level and efficiency of the laboratory is a major problem in the computer room management. This paper proposes a scheme to realize the remote switching on and off of the computer room based on ESP8266, which aims to realize the WiFi network function of ESP8266 without adding computer software and hardware, find a set of effective methods for the daily operation and maintenance of the computer room.
Key words:remote control; ESP8266; magic packet; LAN
作者簡介:湯明偉(1980— ),男,江蘇江陰人,講師,碩士;研究方向:軟件技術。
通信作者:吳東超(1975— ),男,山東菏澤人,副教授,碩士;研究方向:計算機應用。