湯明偉 吳東超



摘 要:目前各學(xué)校的機房計算機數(shù)量龐大,如何破解機房批量開關(guān)機,提高實驗室的日常管理水平和效率,是機房管理工作中的一大難題,文章提出基于ESP8266實現(xiàn)機房遠程開關(guān)機方案,旨在不增加計算機軟硬件的基礎(chǔ)上,通過ESP8266自帶的WiFi網(wǎng)路功能,為機房日常運行與維護尋找一套行之有效的方法。
關(guān)鍵詞:遠程控制;ESP8266;magic packet;局域網(wǎng)
0 引言
隨著計算機技術(shù)的日異月新,各高校的機房配置的計算機功能越來越豐富,計算機的網(wǎng)卡都支持遠程喚醒(Wake On LAN)功能。為了方便教學(xué)各機房安裝了類似“極域2015”控制端軟件,實現(xiàn)了遠程開關(guān)機和網(wǎng)絡(luò)教學(xué)功能,極大地提升了教學(xué)質(zhì)量和教學(xué)效果。但因各種原因,機房在使用結(jié)束后,或多或少總有部分機器未關(guān)機。這些未正常關(guān)機的計算機不僅持續(xù)地浪費電力資源,存在著安全隱患;這些未關(guān)閉的計算機也給機房管理帶來了不少麻煩,直接斷電關(guān)機,會造成計算機的軟硬件損壞,影響正常的使用;如果逐一正常關(guān)機,大大增加了機房管理人員的工作量。如果能利用計算機的遠程喚醒功能,開發(fā)一套無需在計算機上安裝控制端的系統(tǒng),用于應(yīng)對機房的日常管理,將大大減輕機房管理員的工作量。設(shè)計思路如下:獲取要控制的計算機網(wǎng)卡MAC地址,通過ESP8266開發(fā)板的自帶的WiFi聯(lián)網(wǎng)功能接入局域網(wǎng),由ESP8266利用網(wǎng)卡的遠程喚醒功能,向被控計算機發(fā)送開關(guān)機指令實現(xiàn)遠程開關(guān)機指令,實現(xiàn)機房快速開關(guān)機功能,有效減輕機房管理的工作量,同時也有效延長了計算機軟硬件的使用壽命,減少了不必要的浪費[1]。
1 Wake On LAN遠程喚醒的原理
當聯(lián)網(wǎng)的計算機關(guān)閉啟遠程喚醒功能時,計算機關(guān)機后網(wǎng)卡也處于關(guān)閉狀態(tài),是無法檢測、接收網(wǎng)絡(luò)上的信息的。如果將計算機的遠程喚醒功能開啟,計算機網(wǎng)卡在計算機關(guān)機后處于低功耗狀態(tài),可以檢測、接收網(wǎng)絡(luò)上的信息,并對接收到的信息進行處理,這就為遠程喚醒計算機的實現(xiàn)提供了硬件基礎(chǔ)。當計算機處于關(guān)機狀態(tài)時,計算機的IP地址和計算機名稱都無法識別計算機身份,唯一能夠作為識別計算機身份只有網(wǎng)卡的物理地址(MAC)[2]。用戶獲取被喚醒計算機的物理地址(MAC)后,就可以利用廣播包的方式在網(wǎng)絡(luò)上傳輸喚醒數(shù)據(jù)包,喚醒數(shù)據(jù)包中包含被喚醒計算機的網(wǎng)卡信息、物理地址信息等數(shù)據(jù)資料。當處于關(guān)機狀、睡眠狀態(tài)的計算機網(wǎng)卡接收到喚醒數(shù)據(jù)包后,網(wǎng)卡控制芯片通過檢測數(shù)據(jù)包中的MAC地址,如果發(fā)現(xiàn)并確認數(shù)據(jù)是發(fā)給自己的,則通過專用的電路出發(fā)開機信號,計算機加電啟動[3]。
Magic Packet是AMD公司開發(fā)的網(wǎng)絡(luò)喚醒技術(shù),根據(jù)Magic Packet標準,Magic Packet數(shù)據(jù)包包含兩部內(nèi)容,共計102字節(jié),格式為:6*0xFF+16*MAC地址。其中6個“FF”表示這是一個特殊的喚醒數(shù)據(jù)包,后面緊跟重復(fù)16次的被喚醒計算機的MAC地址。
2 ? ESP8266WiFi模塊簡介
樂鑫科技是一家全球化的無晶圓廠半導(dǎo)體公司,多年來深耕AIoT領(lǐng)域軟硬件產(chǎn)品的研發(fā)與設(shè)計。ESP8266模塊提供了一套高度集成的WiFi SoC解決方案,專注于研發(fā)高集成、低功耗、性能卓越、安全穩(wěn)定、高性價比的WiFi和藍牙MCU。既能獨立應(yīng)用,也可以作為從機搭載其他主機MCU運行,成為物聯(lián)網(wǎng)應(yīng)用的理想選擇。
2.1? ESP8266 系列芯片參數(shù)
32-bit MCU&2.4 GHz WiFi;單核CPU時鐘頻率高達160 MHz;+19.5 dBm天線端輸出功率,確保良好的覆蓋范圍;睡眠電流小于20 μA,適用于電池供電的可穿戴電子設(shè)備;外設(shè)包括 UART,GPIO,I2S,I2C,SDIO,PWM,ADC 和SPI。
2.2? ESP8266的特點
2.2.1 性能卓越
ESP8266EX芯片內(nèi)置超低功耗Tensilica L106 32位RISC處理器,CPU時鐘速度最高可達160 MHz,支持實時操作系統(tǒng)(RTOS)和WiFi協(xié)議棧,可以將高達80%的處理能力應(yīng)用于編程和開發(fā)。
2.2.2 高度集成
ESP8266芯片高度集成天線開關(guān)、射線巴倫、功率放大器、低噪音接收發(fā)達器、濾波器等射頻模塊。模組尺寸小巧,尤其適用于空間受限的產(chǎn)品設(shè)計。
2.2.3? 產(chǎn)品應(yīng)用豐富
ESP8266模組既可以通過ESP-AT指令固件,為外部主機MCU提供WiFi連接功能;也可以作為獨立WiFi MCU運行,用戶通過RTOS的SDK開發(fā)帶WiFi連接功能的產(chǎn)品。
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ā)者更關(guān)注創(chuàng)意與實現(xiàn),更快的完成項目開發(fā),大大節(jié)約了學(xué)習(xí)的成本,縮短了開發(fā)的周期。同時下載并配置ESP8266開發(fā)庫,方便ESP8266的開發(fā)。
3.2 硬件連接
在不改變機房網(wǎng)絡(luò)連接的基礎(chǔ)上,ESP6266通過有線或者無線方式接入機房局域網(wǎng),通過兩個開關(guān)按鈕向ESP8266發(fā)送開關(guān)機指令,當ESP8266收到按鈕信息后執(zhí)行開關(guān)機代碼,然后通過廣播方式將封裝好的喚醒數(shù)據(jù)包發(fā)送到局域網(wǎng)中,實現(xiàn)對局域網(wǎng)中計算機的開關(guān)機控制(見圖1)。
3.3 功能實現(xiàn)
該系統(tǒng)重點實現(xiàn)對局域網(wǎng)中計算機進行遠程開關(guān)機操作,用于減輕機房管理員逐臺手動開關(guān)機的工作量,提高機房管理員的工作效率。當機房管理員需要對計算機開機檢修或者批量關(guān)閉計算機時,僅需要按下連接ESP8266開發(fā)板上對應(yīng)的開關(guān)機按鈕就可以實現(xiàn)對批量計算機執(zhí)行相同的操作。同時也減少了機房計算機因非正常開關(guān)機帶來的負面影響,提升了計算機的使用率,延長了計算機整體的使用壽命。該系統(tǒng)目前只需要包含4個功能。
3.3.1 WiFi自動聯(lián)網(wǎng)功能
由于現(xiàn)在的網(wǎng)絡(luò)環(huán)境復(fù)雜,學(xué)院WiFi信號覆蓋有三四種,有的需要賬號和密碼,有的不需要密碼可以直連;再加上學(xué)生自己利用手機開設(shè)熱點,就會導(dǎo)致ESP8266加電會掃描到很多熱點,為了防止ESP8266“意外”連接到其他熱點,就需要通過控制實現(xiàn)ESP8266自動聯(lián)網(wǎng)功能,讓其在加電后直接連接上指定的熱點,確保ESP8266始終能夠連接到指定的局域網(wǎng)中。而ESP8266初次聯(lián)網(wǎng)后,系統(tǒng)會自動將WiFi的賬號、密碼自動保存在flash ROM中,當再次上電后先檢測保存的連接信息是否能夠聯(lián)網(wǎng),如果有有效的連接信息存在,則自動進行連接;否則自動建立“AutoConnectAP”熱點,通過手機連接“AutoConnectAP”熱點,選擇指定的WiFi信號并輸入密碼,完成ESP8266接入指定的網(wǎng)絡(luò)。通過此方法,極大地提升了ESP8266的普及率,可以使用ESP8266的WiFiManager庫實現(xiàn)自動聯(lián)網(wǎng)的功能。
由于本系統(tǒng)開發(fā)過程中暫不使用任何顯示設(shè)備,如何確定ESP8266是否聯(lián)網(wǎng)成功,也是需要考慮的問題。本系統(tǒng)使用ESP8266自帶的LED指示燈來提示用戶是否聯(lián)網(wǎng)成功,設(shè)計思路如下:
如果聯(lián)網(wǎng)成功,則ESP8266自帶的LED常亮;如果正在聯(lián)網(wǎng)則LED快速閃爍,嘗試連接WiFi熱點20次,還是連接不成功則停止連接,LED持續(xù)快速閃爍。通過這個方法,用戶就可以知道ESP8266的聯(lián)網(wǎng)狀況。實現(xiàn)代碼如圖2所示。
3.3.2 遠程開機功能實現(xiàn)
在局域網(wǎng)中通過arp–a命令獲取局域網(wǎng)中各計算機的MAC地址,MAC地址格式為“6C-0B-84-68-7B-38”,通過代碼檢測給定的MAC地址字符串是否是指定的長度。如果是代碼中自定的長度,則認為MAC地址正確,通過格式控制函數(shù)將獲取的MAC地址轉(zhuǎn)換成為十六進制表示格式“0x6C-0x0B-0x84-0x68-0x7B-0x38”;否則給出錯誤提示信息。
通過代碼將“0x6C-0x0B-0x84-0x68-0x7B-0x38”中的數(shù)據(jù)提取出來,剔除格式字符串中的“-”符號,并將數(shù)據(jù)保存到{0x6C,0x0B,0x84,0x68,0x7B,0x38}數(shù)組中,這個數(shù)組中的值就是構(gòu)造Magic Packet數(shù)據(jù)包要用到的數(shù)據(jù)。
根據(jù)Magic Packet白皮書描述,這個魔法數(shù)據(jù)包由6組 “FF”+16組十六進制的被喚醒計算機的MAC地址構(gòu)成(FFFFFFFFFFFF6C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B38
6C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B386C0B84687B38)。因此需要通過代碼構(gòu)造Magic Packet數(shù)據(jù)包,實現(xiàn)代碼如圖3所示。
通過以上3個步驟,可以獲得Magic Packet封裝的數(shù)據(jù)包。通過UDP協(xié)議將封裝好的數(shù)據(jù)包發(fā)送到局域網(wǎng)中,這樣局域網(wǎng)中的計算機網(wǎng)卡都會收到這個喚醒數(shù)據(jù)包,網(wǎng)卡通過解析決定是否是自己的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 遠程關(guān)機功能實現(xiàn)
計算機處于正常運行狀態(tài),可以正常接收并執(zhí)行命令行。采用UDP協(xié)議通過廣播地址向局域網(wǎng)廣播,向整個局域網(wǎng)發(fā)送關(guān)機命令(shutdown),當計算機收到關(guān)機命令后,本地執(zhí)行關(guān)機命令實現(xiàn)遠程關(guā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)內(nèi)存:8 G內(nèi)存;
(3)操作系統(tǒng)類型:Windows7 64位旗艦版;
(4)網(wǎng)卡:Realtak PCIe GbE Family Controller千兆網(wǎng)卡;
從機房中隨機挑選4臺計算機,首先,進入BIOS界面,確保“Wake On LAN ”選項開啟。進入BIOS界面,切換到“Power”,修改“Wake On LAN”選項為“Automatic”,保存退出BIOS。
其次,修改網(wǎng)卡選項,確保可以接收到喚醒的數(shù)據(jù)包。進入Windows7系統(tǒng)桌面,鼠標右鍵單擊“我的電腦”—“屬性”—“設(shè)備管理器”—“網(wǎng)卡適配器”—“Realtak PCIe GbE Family Controller”,鼠標右鍵單擊此網(wǎng)卡,選擇“屬性”,彈出網(wǎng)卡屬性對話框。在“高級”選項卡中,修改“魔術(shù)封包”和“關(guān)機網(wǎng)絡(luò)喚醒”的值為“開啟”;在“電管理”選項卡中,勾選“允許此設(shè)備喚醒計算機”,點擊“確認”按鈕保存修改。
最后,將燒錄代碼的ESP8266開發(fā)板中,通過WiFi接入機房的局域網(wǎng),確保WiFi的IP地址和計算機的IP地址在同一個網(wǎng)段。ESP8266通電后LED燈點亮,表示ESP8266聯(lián)網(wǎng)成功。按下開發(fā)板上的“開機”按鍵,可以看到4臺計算機依次加電開啟,表明設(shè)計思路正確,獲取目標機MAC格式正確,系統(tǒng)代碼正常運行。
5 ? 結(jié)語
本系統(tǒng)旨在不改變原有機房布局和配置的前提下,無需安裝控制端程序,通過單個ESP8266開發(fā)板實現(xiàn)局域網(wǎng)中的遠程喚醒/關(guān)閉計算機功能,有效解決了機房批量開關(guān)機的難題,消除了機房的安全隱患,提升了機房管理效率。
[參考文獻]
[1]李佳.遠程控制技術(shù)在高校機房管理中的應(yīng)用探究[J].電腦編程技巧與維護,2019(10):34.
[2]儲懷川,王誠忠,張宇.基于GSM短信的無人機房遠程控制系統(tǒng)的設(shè)計[J].有線電視技術(shù),2017(5):67.
[3]高岳.機房管理中網(wǎng)絡(luò)遠程控制技術(shù)應(yīng)用研究[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— ),男,江蘇江陰人,講師,碩士;研究方向:軟件技術(shù)。
通信作者:吳東超(1975— ),男,山東菏澤人,副教授,碩士;研究方向:計算機應(yīng)用。