專利名稱::一種在網(wǎng)關(guān)上還原電子郵件內(nèi)容的方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及互聯(lián)網(wǎng)技術(shù),具體地說,涉及在網(wǎng)關(guān)處對(duì)用POP3(PostOfficeProtocol)協(xié)議接收的電子郵件和用SMTP(SimpleMessageTransferProtocol)協(xié)議發(fā)送的電子郵件的內(nèi)容進(jìn)行還原的方法。當(dāng)某主機(jī)向外發(fā)電子郵件時(shí),首先將用戶的郵箱、對(duì)方郵箱、主題、日期、正文、附件等內(nèi)容,按照郵件格式進(jìn)行編碼、封裝,然后通過Internet發(fā)送給郵件服務(wù)器,在發(fā)送過程中采用的是SMTP協(xié)議。而對(duì)方主機(jī)收取電子郵件時(shí),首先通過Internet從郵件服務(wù)器上接收到郵件,接收過程采用的是POP3協(xié)議,然后進(jìn)行解封裝、解碼,最后恢復(fù)出郵件內(nèi)容。如圖1所示,只要發(fā)送郵件的主機(jī)、收取郵件的主機(jī)、郵件服務(wù)器不在同一網(wǎng)絡(luò)上,那么,發(fā)送郵件或接收郵件必然要通過網(wǎng)關(guān)的轉(zhuǎn)發(fā)。圖1給出了通過網(wǎng)關(guān)轉(zhuǎn)發(fā)的兩個(gè)例子,一個(gè)是網(wǎng)絡(luò)一的主機(jī)向網(wǎng)絡(luò)二的郵件服務(wù)器發(fā)送郵件,一個(gè)是網(wǎng)絡(luò)一的主機(jī)從網(wǎng)絡(luò)二的郵件服務(wù)器收取郵件。采用POP3協(xié)議和SMTP協(xié)議的郵件客戶端有美國微軟公司的OutlookExpress系統(tǒng)、美國網(wǎng)景公司的NetscapeMessenger等;采用POP3協(xié)議和SMTP協(xié)議的郵件服務(wù)器有Sendmail、Qmail等。為了防止含有非法內(nèi)容或敏感內(nèi)容的郵件的傳遞,一般在服務(wù)器端都有對(duì)郵件內(nèi)容進(jìn)行過濾的工具,常用的有防火墻技術(shù)。一般的防火墻能夠根據(jù)網(wǎng)絡(luò)中IP包攜帶的源地址、目的地址、源端口、目的端口和協(xié)議類型等信息對(duì)IP包進(jìn)行過濾。比如,通過配置防火墻規(guī)則,限定如果IP包的源地址是1.2.3.4,協(xié)議類型是TCP,目的端口(即POP3協(xié)議所使用的端口)是110,則丟棄IP包,這樣可以使主機(jī)1.2.3.4無法用POP3協(xié)議收取郵件。但是它的缺點(diǎn)在于將主機(jī)1.2.3.4的所有郵件都過濾了,不能根據(jù)郵件的內(nèi)容來決定是否過濾。還有一種防火墻能夠?qū)崿F(xiàn)對(duì)單個(gè)IP包進(jìn)行字符串匹配,例如,通過配置防火墻規(guī)則,限定如果IP包的源地址是1.2.3.4,協(xié)議類型是TCP,目的端口是110,并且包含字符串“組織郊游”,則丟掉該IP包。這樣,主機(jī)1.2.3.4用POP3協(xié)議收取的郵件中如果含有“組織郊游”的字符串,那么該郵件就被過濾。通過這種方法雖然能夠在一定程度上實(shí)現(xiàn)根據(jù)郵件內(nèi)容進(jìn)行過濾,但仍存在三個(gè)缺點(diǎn)1、該方法只能做簡單的字符串匹配,不能分析整個(gè)郵件的內(nèi)容。2、該方法只能對(duì)一個(gè)IP包中的字符串進(jìn)行匹配,而一封郵件往往會(huì)通過多個(gè)IP包傳送,如果字符串“組織郊游”分散在兩個(gè)IP包中,第一個(gè)IP包中包含“組織”,第二個(gè)IP包中包含“郊游”,這種方法就不能對(duì)其進(jìn)行過濾。3、即便字符串“組織郊游”包含在一個(gè)IP包中,但由于郵件內(nèi)容往往經(jīng)過了專門的編碼方式進(jìn)行編碼,所以字符串“組織郊游”在IP包中將以編碼后的形式出現(xiàn),這樣也會(huì)導(dǎo)致字符串匹配失敗。綜上所述,現(xiàn)有的過濾方法都不能實(shí)現(xiàn)根據(jù)整個(gè)郵件內(nèi)容進(jìn)行分析和過濾,而為了網(wǎng)絡(luò)的安全性,避免含有非法內(nèi)容的郵件的傳遞,有必要在網(wǎng)關(guān)處加強(qiáng)對(duì)郵件的分析和過濾。而要達(dá)到這一目的,在網(wǎng)關(guān)還原出所轉(zhuǎn)發(fā)的電子郵件的內(nèi)容是關(guān)鍵所在,但目前還沒有檢索到在網(wǎng)絡(luò)的網(wǎng)關(guān)處還原電子郵件內(nèi)容的方法。本發(fā)明所述在網(wǎng)關(guān)上還原電子郵件內(nèi)容的方法,包括以下步驟一、讀取并分析郵件的消息頭部,獲得郵件的發(fā)送者、接收者、主題、日期、消息類型、編碼方式和附件名稱;二、分析消息類型,如果該消息包含多個(gè)子消息,則進(jìn)行多消息處理;否則說明該消息攜帶的是正文或附件,轉(zhuǎn)入步驟三;三、對(duì)消息正文或附件進(jìn)行解碼。所述步驟二中多消息處理進(jìn)一步包括a、分析子消息的消息頭部,獲得其消息類型、編碼方式和附件名稱;b、分析該子消息的消息類型,如果該子消息包含多個(gè)子消息,則進(jìn)行多消息處理;否則說明該子消息攜帶的是正文或附件,對(duì)子消息的正文或附件解碼;c、如果該子消息的消息類型是multipart/mixed,則返回步驟a、b對(duì)其余的子消息進(jìn)行分析,直到最后一個(gè)子消息;如果該子消息的消息類型是multipart/alternative,則不分析其他子消息。所述步驟三中對(duì)正文或附件解碼進(jìn)一步包括a、讀取正文或附件的一行數(shù)據(jù);b、如果編碼方式是64位基數(shù)編碼,則采用64位基數(shù)編碼的解碼函數(shù)進(jìn)行解碼;轉(zhuǎn)至步驟g;c、如果編碼方式是引用可顯示編碼,則采用引用可顯示編碼的解碼函數(shù)進(jìn)行解碼;轉(zhuǎn)至步驟g;d、如果編碼方式是7位編碼,則采用7位編碼的解碼函數(shù)進(jìn)行解碼;轉(zhuǎn)至步驟g;e、如果編碼方式是8位編碼,則采用8位編碼的解碼函數(shù)進(jìn)行解碼;轉(zhuǎn)至步驟g;f、如果編碼方式是二進(jìn)制編碼,則采用二進(jìn)制編碼的解碼函數(shù)進(jìn)行解碼;g、判斷正文或附件的數(shù)據(jù)是否都已經(jīng)解碼,如果是,則結(jié)束;如果不是,則轉(zhuǎn)至步驟a。本發(fā)明所述方法通過對(duì)郵件格式的分析及解碼,還原出電子郵件的全部內(nèi)容,使得對(duì)郵件的分析和過濾不再局限于只能對(duì)單個(gè)IP包的處理,解決了現(xiàn)有技術(shù)中只能對(duì)地址、端口、協(xié)議等的簡單過濾,或?qū)蝹€(gè)IP包進(jìn)行的簡單字符串匹配。本方法能夠?qū)︵]件內(nèi)容進(jìn)行完整的分析,識(shí)別出郵件的發(fā)送方、接收方、主題、正文、附件等所有內(nèi)容,為以后針對(duì)這些內(nèi)容做進(jìn)一步的判斷和過濾打下基礎(chǔ)。圖2是本發(fā)明還原電子郵件內(nèi)容方法的流程圖。圖3是對(duì)多個(gè)子消息進(jìn)行分析的流程圖。圖4是正文或附件解碼的流程圖。圖5是對(duì)某一郵件的還原分析示意圖。還原電子郵件的內(nèi)容主要在于對(duì)郵件格式的分析和對(duì)郵件正文及附件的解碼。消息是郵件的基本組成單位,一個(gè)郵件可以是單個(gè)消息,也可以由多個(gè)消息組成。消息包括消息頭部和消息體,消息頭部一般包含有發(fā)送人、接收人、日期、主題等信息,消息體是消息的正文部分,記載有郵件的正式內(nèi)容。每個(gè)消息的消息類型不同,編碼方式也不同,在消息內(nèi)部也可以有嵌套結(jié)構(gòu),即消息由多個(gè)子消息構(gòu)成,每個(gè)子消息有獨(dú)立的消息類型和編碼方式。消息類型是用于說明消息體的內(nèi)容的,有三種形式,一是多個(gè)子消息及各子消息之間的關(guān)系,二是正文,三是附件及附件的文件類型,郵件中允許的消息類型有幾十種,目前表示表示消息體是由多個(gè)子消息組成的消息類型只有兩種,分別是multipart/mixed和multipart/alternative,兩者的區(qū)別在于multipart/mixed表示每個(gè)子消息都是郵件內(nèi)容的一部分;而multipart/alternative表示只能任選一個(gè)子消息作為郵件內(nèi)容;其他的消息類型表明消息體是正文或附件。編碼方式是對(duì)正文或附件的編碼方法,有64位基數(shù)編碼(BASE64)、引用可顯示編碼(Quoted-Printable)、7位編碼(7BIT)、8位編碼(8BIT)、二進(jìn)制編碼(Binary)共5種編碼方式,每種編碼方式都有相應(yīng)的解碼函數(shù)。本發(fā)明的核心思想在于將郵件內(nèi)容的還原分解成三部分,分析單個(gè)消息(即分析單個(gè)消息的消息頭部)、分析多個(gè)子消息(即把多個(gè)子消息分割開來進(jìn)行處理)和分析消息體(即消息正文或附件的解碼),分別用三個(gè)過程——單消息處理過程、多消息分析過程、正文或附件解碼過程來完成這三部分。對(duì)于有內(nèi)部嵌套結(jié)構(gòu)的消息的分析,則可以綜合使用單消息處理過程和多消息分析過程來完成,從而用三個(gè)較為簡單的過程完成復(fù)雜的郵件格式和內(nèi)容分析。圖2所示的流程既是本發(fā)明方法的流程圖,也是單消息處理過程的流程圖。在還原郵件內(nèi)容之前,首先要從網(wǎng)關(guān)正在轉(zhuǎn)發(fā)的所有IP包中找到要還原的郵件的IP包,可以根據(jù)以下四個(gè)參數(shù)獲取攜帶所需郵件的所有IP包,郵件客戶端地址、郵件客戶端端口、郵件服務(wù)器地址和郵件服務(wù)器端口。由于IP包可能失序到達(dá)或重復(fù)到達(dá),所以應(yīng)采取相應(yīng)措施消除失序和重復(fù),以保證IP包的順序符合郵件的順序。本發(fā)明可以對(duì)IP包進(jìn)行實(shí)時(shí)處理,以保證及時(shí)地根據(jù)郵件的內(nèi)容進(jìn)行下一步的處理。在單消息處理過程中,首先讀取郵件的消息頭部,去掉攜帶郵件的IP包的IP報(bào)頭,得到有用的郵件數(shù)據(jù)。然后對(duì)消息頭部進(jìn)行分析,獲得該郵件的發(fā)送者、接收者、主題、日期、消息類型、編碼方式,如果郵件帶有附件的話,還可以獲得附件的名稱。在獲得了郵件的消息類型后,根據(jù)消息類型選擇下一步的處理,如果消息類型是multipart/mixed或multipart/alternative,則說明該消息是由多個(gè)子消息組成的,就對(duì)多個(gè)子消息進(jìn)行處理,進(jìn)行多消息分析過程;否則,說明該消息的消息體是正文或附件,對(duì)正文或附件進(jìn)行解碼。在圖3所示的多消息處理過程中,對(duì)子消息進(jìn)行單消息處理,并且根據(jù)消息類型來判斷是否對(duì)每個(gè)子消息都進(jìn)行處理,如果消息類型是multipart/mixed,則每個(gè)子消息都要進(jìn)行單消息處理;如果消息類型是multipart/alternative,則處理完一個(gè)子消息后,就不再處理其他子消息了。正文或附件的解碼過程如圖4所示,根據(jù)編碼方式的不同對(duì)數(shù)據(jù)進(jìn)行解碼?,F(xiàn)在的編碼方式有5種,根據(jù)消息頭部中所帶的編碼方式,采取相應(yīng)的解碼函數(shù)對(duì)每行數(shù)據(jù)解碼。圖5是某一郵件的還原分析示意圖。假設(shè)該郵件中包含三個(gè)子消息,其中第一個(gè)子消息又由兩個(gè)子消息組成。下面詳細(xì)介紹對(duì)該郵件的還原過程。將整個(gè)郵件看作一個(gè)單消息,進(jìn)行單消息處理。分析郵件消息頭部,獲得發(fā)件人、收件人、主題、日期的信息;同時(shí)還獲得郵件的消息類型是multipart/mixed,說明該郵件包含多個(gè)子消息,并且需對(duì)每個(gè)子消息進(jìn)行處理;分割行是boundary1,表明子消息之間的分界是boundary1。由于含有多個(gè)子消息,所以需進(jìn)行多消息處理。對(duì)于第一個(gè)子消息,分析其消息頭部,獲得其消息類型是multipart/alternative,表明該子消息由多個(gè)孫子消息組成,并且可以只對(duì)其中一個(gè)孫子消息進(jìn)行處理;分割行是boundary2,是各個(gè)孫子消息之間的分界。分析第一個(gè)孫子消息的頭部,獲得其消息類型是text/plain,表明是純文本信息的正文,進(jìn)行正文的解碼,循環(huán)讀取正文的每行數(shù)據(jù),由于其編碼方式是引用可顯示編碼,因此采用引用可顯示編碼(Quoted-Printable)的解碼函數(shù)進(jìn)行解碼,直到分割行boundary2處,該孫子消息的還原完畢。由于第一個(gè)子消息的消息類型是multipart/alternative,因此跳過第二個(gè)孫子消息,對(duì)第一個(gè)子消息的還原結(jié)束。對(duì)于第二個(gè)子消息,分析其消息頭部,獲得其消息類型是application/msword,表明該子消息攜帶的是一個(gè)WORD文件;編碼方式是64位基數(shù)編碼,對(duì)其進(jìn)行解碼,采用64位基數(shù)編碼(BASE64)的解碼函數(shù),直到分割行boundary1處,對(duì)第二個(gè)子消息的還原結(jié)束。對(duì)于第三個(gè)子消息,通過對(duì)其消息頭部的分析,獲得其消息類型是application/zip,表明該子消息是一個(gè)ZIP壓縮文件;編碼方式是64位基數(shù)編碼,對(duì)其進(jìn)行解碼,采用64位基數(shù)編碼的解碼函數(shù),直到分割行boundary1處,對(duì)第三個(gè)子消息的還原結(jié)束。至此,通過以上步驟可以還原出該郵件的全部內(nèi)容。權(quán)利要求1.一種在網(wǎng)關(guān)上還原電子郵件內(nèi)容的方法,其特征在于,包括以下步驟一、讀取并分析郵件的消息頭部,獲得郵件的發(fā)送者、接收者、主題、日期、消息類型、編碼方式和附件名稱;二、分析消息類型,如果該消息包含多個(gè)子消息,則進(jìn)行多消息處理;否則說明該消息攜帶的是正文或附件,轉(zhuǎn)入步驟三;三、對(duì)消息正文或附件進(jìn)行解碼。2.根據(jù)權(quán)利要求1所述的在網(wǎng)關(guān)上還原電子郵件內(nèi)容的方法,其特征在于,所述步驟二中多消息處理進(jìn)一步包括a、分析子消息的消息頭部,獲得其消息類型、編碼方式和附件名稱;b、分析該子消息的消息類型,如果該子消息包含多個(gè)子消息,則進(jìn)行多消息處理;否則說明該子消息攜帶的是正文或附件,對(duì)子消息的正文或附件解碼;c、如果該子消息的消息類型是multipart/mixed,則返回步驟a、b對(duì)其余的子消息進(jìn)行分析,直到最后一個(gè)子消息;如果該子消息的消息類型是multipart/alternative,則不分析其他子消息。3.根據(jù)權(quán)利要求1所述的在網(wǎng)關(guān)上還原電子郵件內(nèi)容的方法,其特征在于,所述步驟三中對(duì)正文或附件解碼進(jìn)一步包括a、讀取正文或附件的一行數(shù)據(jù);b、如果編碼方式是64位基數(shù)編碼,則采用64位基數(shù)編碼的解碼函數(shù)進(jìn)行解碼;轉(zhuǎn)至步驟g;c、如果編碼方式是引用可顯示編碼,則采用引用可顯示編碼的解碼函數(shù)進(jìn)行解碼;轉(zhuǎn)至步驟g;d、如果編碼方式是7位編碼,則采用7位編碼的解碼函數(shù)進(jìn)行解碼;轉(zhuǎn)至步驟g;e、如果編碼方式是8位編碼,則采用8位編碼的解碼函數(shù)進(jìn)行解碼;轉(zhuǎn)至步驟g;f、如果編碼方式是二進(jìn)制編碼,則采用二進(jìn)制編碼的解碼函數(shù)進(jìn)行解碼;g、判斷正文或附件的數(shù)據(jù)是否都已經(jīng)解碼,如果是,則結(jié)束;如果不是,則轉(zhuǎn)至步驟a。4.根據(jù)權(quán)利要求1或2所述的在網(wǎng)關(guān)上還原電子郵件內(nèi)容的方法,其特征在于,如果消息類型是multipart/mixed和multipart/alternative,則表示該消息包含多個(gè)子消息。全文摘要一種在網(wǎng)關(guān)上還原電子郵件內(nèi)容的方法,包括以下步驟讀取并分析郵件的消息頭部,獲得郵件的發(fā)送者、接收者、主題、日期、消息類型、編碼方式和附件名稱等信息;分析郵件的消息類型,如果該消息包含多個(gè)子消息,則進(jìn)行多消息處理;否則說明該消息攜帶的是正文或附件,對(duì)消息正文或附件進(jìn)行解碼。本發(fā)明通過對(duì)郵件格式的分析及解碼,還原出電子郵件的全部內(nèi)容,使得對(duì)郵件的分析和過濾不再局限于只能對(duì)單個(gè)IP包的處理,能夠?qū)︵]件內(nèi)容進(jìn)行完整的分析,識(shí)別出郵件的發(fā)送方、接收方、主題、正文、附件等所有內(nèi)容,為以后針對(duì)這些內(nèi)容做進(jìn)一步的判斷和過濾打下基礎(chǔ)。文檔編號(hào)H04L12/58GK1466342SQ0211240公開日2004年1月7日申請日期2002年7月2日優(yōu)先權(quán)日2002年7月2日發(fā)明者陳開渠申請人:深圳市中興通訊股份有限公司