2. SMTP通訊模塊設(shè)計
通過電子郵件來與網(wǎng)絡(luò)嵌入式系統(tǒng)通信有如下優(yōu)點:(1) 用戶接口是日常使用的標準電子郵件客戶程序,對技術(shù)要求較低;(2) 有現(xiàn)成的協(xié)議用于從各種設(shè)備(桌面電腦、手持設(shè)備及網(wǎng)絡(luò)電話)發(fā)送電子郵件并在因特網(wǎng)上傳輸;(3) 只需稍加處理,便可對嵌入式設(shè)備上回復的電子郵件以HTML格式進行編碼,使數(shù)據(jù)的表現(xiàn)形式更為豐富和易讀;(4) 電子郵件客戶程序有自己的存檔日志,便于進行數(shù)據(jù)歸檔備份[3]。
系統(tǒng)中實現(xiàn)的是一個簡化的SMTP Server。僅僅是根據(jù)基本的SMTP交互協(xié)議實現(xiàn)郵件接收和郵件轉(zhuǎn)儲。不提供郵件轉(zhuǎn)發(fā),也不需要考慮多用戶的郵件并發(fā)連接。該SMTP Server僅僅為單用戶提供專用連接,并按自己的特定格式接收。
因此,該SMTP Server實現(xiàn)的核心是實現(xiàn)最簡單的SMTP鎖步協(xié)議對話機,并從郵件中析取出命令及附件數(shù)據(jù)。在分析標準SMTP協(xié)議后,程序中僅實現(xiàn)符合應用需求的最簡潔的SMTP對話機制。Server只是對客戶命令有效的發(fā)出每一個對話的響應碼及固定信息,然后接收客戶機的應答。在應答消息中也僅僅分析應答的字符命令是否正確,而不理睬其他信息。在郵件處理過程中,只查找主題并判斷,然后從郵件中判斷出附件的標志并從附件開始處接收數(shù)據(jù)然后解碼。
2.1 SMTP通訊基本流程
為實現(xiàn)設(shè)備的遠程控制及狀態(tài)響應,將SMTP軟件的結(jié)構(gòu)模塊化。分為套接字通訊模塊、E-mail編碼模塊、E-mail解析模塊、SMTP/ESMTP協(xié)議模塊、附件解析模塊。其基本結(jié)構(gòu)如圖2。
圖2: 嵌入式SMTP遠程控制流程
2.2 套接字通訊模塊
網(wǎng)絡(luò)套接字模塊負責與遠端客戶機、服務器建立TCP連接,發(fā)送和接收從客戶端發(fā)送的命令和數(shù)據(jù)以及向其他SMTP服務器端返回郵件數(shù)據(jù)。這些都是基于TCP/IP棧通過Linux操作系統(tǒng)的標準Socket機制來實現(xiàn)的。在網(wǎng)絡(luò)模塊中,為便于升級,考慮到了IPv4到IPv6過渡。在用戶設(shè)置服務器地址的時候,可以支持IP地址輸入和域名輸入兩種方式,這樣給用戶帶來很大方便。
在該模塊中,提供一個TCP流套接字服務器。在端口25上綁定套接字,最多可以提供一個連接,支持5個等待。一旦服務器接受一個連接,該套接字被傳給SMTP/ESMTP協(xié)議模塊,來處理SMTP協(xié)議實現(xiàn)交互。處理完后關(guān)閉套接字,然后可以等待另一個請求。
2.3 E-mail編碼模塊
在系統(tǒng)中,遠程設(shè)備需要周期性的將設(shè)備運行狀態(tài)及各參數(shù)發(fā)送給管理者,以及在管理者發(fā)送查詢指令時將查詢的關(guān)鍵值發(fā)送給管理者。這需要設(shè)備能夠根據(jù)運行的參數(shù)構(gòu)造標準結(jié)構(gòu)的E-mail并發(fā)送。
E-mail編碼模塊的功能是:設(shè)備發(fā)送郵件時,將設(shè)備參數(shù)及狀態(tài)轉(zhuǎn)變成標準的適合在Internet上傳輸?shù)泥]件格式。
一個完整的E-mail報文包括包封、報頭和報體。包封是用SMTP命令MAIL FROM和RCPT TO來定義。報頭信息包括:收件人(To:),發(fā)件人(Sender:),抄送者(CC:),發(fā)送日期(Date:),主題(Subject:),MIME版本(Mime-version:)等。在報體中信息包括:內(nèi)容類型(Content-Type:),內(nèi)容傳輸編碼類型(Content-Transfer-Encoding:),邊界定義(Boundary:)及信息內(nèi)容等。郵件信息每行之間都以CR/LF(回車換行符)作為結(jié)尾。可以通過這些郵件頭信息的關(guān)鍵詞,解析出收件人、發(fā)件人、抄送人、發(fā)送日期,MIME版本號等[4]。
報體信息包括郵件的正文和附件。正文開始的標記是郵件頭信息結(jié)束后的兩個回車換行符,即兩個CR/LF。郵件結(jié)束的標志是。。模塊中提供了對MIME(Multipurpose Internet Mail Extensions)1.0格式郵件的處理。實現(xiàn)了MIME內(nèi)容傳輸編碼,包括:7-bit,8-bit, quoted-printable,Base64編解碼。
2.4 SMTP/ESMTP協(xié)議模塊
SMTP/ESMTP是一種基于命令/應答模式的鎖步協(xié)議。客戶機給出字符串命令,服務器給出數(shù)字代碼應答,實現(xiàn)郵件的鎖步傳輸。
在TCP連接基礎(chǔ)上(端口號25),本模塊實現(xiàn)SMTP/ESMTP協(xié)議的最小命令集。作為客戶發(fā)送郵件時,實現(xiàn)的客戶連接命令包括: ELHO(或者HELO)、AUTH LOGIN、USER、PASS、MAIL FROM、RCPT TO、DATA、RSET、NOOP、QUIT。作為服務器接收郵件時,響應的數(shù)字代碼包括:220(服務就緒)、221(服務關(guān)閉)、250(要求的郵件操作完成)、354(開始郵件輸入,以。結(jié)束)、500(命令不識別)[4][5]。
發(fā)送者的用戶名和密碼必須經(jīng)過Base64編碼后,發(fā)送到SMTP/ESMTP服務器端,認證才能成功。實現(xiàn)過程見圖3。
圖3:SMTP/ESMTP協(xié)議模塊基本流程
2.5 E-mail解析模塊
遠端設(shè)備在收到郵件指令時,應能從郵件中正確析取出指令并做出響應。
系統(tǒng)中的E-mail解析模塊通過查找E-mail中的主題來知道命令類型。其在E-mail報體中查找字符串Subject來發(fā)現(xiàn)E-mail的主題,并從中找到規(guī)定類型的命令字頭。如無相應主題,返回-1,將郵件丟棄。根據(jù)主題命令字的不同,完成設(shè)備的相關(guān)動作控制或相應狀態(tài)的郵件報告。對于數(shù)據(jù)塊的更新,使用附件解析模塊來得到附件中的數(shù)據(jù)。
3. 安全性問題
由于SMTP技術(shù)的開放性和標準性,其開發(fā)的簡單便利也帶來很多缺點。設(shè)備的遠程控制必須對訪問者有所區(qū)分,否則系統(tǒng)的安全將不可預料。
特別是,SMTP協(xié)議在發(fā)送郵件信息,甚至是用戶名和密碼的時候采用的是明文發(fā)送。通過常見的抓包工具,就可以輕易獲得正在接收或發(fā)送郵件的用戶的所有信息,包括用戶名和密碼以及郵件信息,這給設(shè)備的正常操控帶來了極大的威脅。即使ESMTP協(xié)議在發(fā)送用戶名和密碼的時候采用的是base64編碼,但其解碼也是輕而易舉,因此其安全性也有限。
對于安全問題,可根據(jù)不同的控制環(huán)境使用不用的策略[6]。
(1) 閉環(huán)網(wǎng)絡(luò)訪問策略:把網(wǎng)絡(luò)訪問范圍局限在 Intranet 范圍內(nèi),通過網(wǎng)內(nèi)任意PC機發(fā)送的郵件命令可以進行遠程監(jiān)視、診斷、遠程控制和參數(shù)設(shè)置。所有可能的攻擊點全部局限在本網(wǎng)絡(luò)范圍內(nèi)。
(2) 只讀訪問策略:對關(guān)鍵信息和敏感信息,一個重要的安全措施就是將其標記為只讀特性,尤其是從Intranet 范圍外的IP 地址來的訪問請求。這樣用戶可以在任意地方查看遠程設(shè)備的狀況,出現(xiàn)問題可以及時采取措施。
(3) 引入加密機制,如:MD5加密就可以增加安全性。
4. 結(jié)束語
本文介紹了在ARM的硬件平臺上,如何構(gòu)建以嵌入式Linux為基礎(chǔ)利用SMTP協(xié)議來進行設(shè)備的遠程監(jiān)控的實現(xiàn)方法。通過該方法,我們實現(xiàn)了對傳統(tǒng)工控項目的遠程控制改造升級。在該方案的基礎(chǔ)上,完全可以實現(xiàn)設(shè)備的網(wǎng)絡(luò)化和智能化管理,為現(xiàn)場可編程設(shè)備的在線遠程監(jiān)控、管理及維護等功能提供了實現(xiàn)的可能性和技術(shù)上的支持。通過對SMTP協(xié)議的合理利用,使“Action over IP”的思想得以實現(xiàn),從而在遠處可以對設(shè)備的“行為”進行有效的管理和控制。
評論
查看更多