《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 基于Winpcap的郵件還原系統(tǒng)的實(shí)現(xiàn)
基于Winpcap的郵件還原系統(tǒng)的實(shí)現(xiàn)
來源:微型機(jī)與應(yīng)用2011年第2期
吳志強(qiáng),馬春波,敖發(fā)良
(桂林電子科技大學(xué) 信息與通信學(xué)院,廣西 桂林541004)
摘要: 隨著互聯(lián)網(wǎng)的普及,SMTP/POP3協(xié)議傳輸方式下的郵件已成為最簡便、最經(jīng)濟(jì)的通信方式,但許多有害的郵件信息也隨之而來。針對這些問題,在VC開發(fā)環(huán)境下,研究并實(shí)現(xiàn)了基于Winpcap的郵件監(jiān)控及還原系統(tǒng)。該系統(tǒng)設(shè)計(jì)了多線程模塊,可以同時(shí)處理50個(gè)郵件及附件信息,并對網(wǎng)絡(luò)數(shù)據(jù)包的捕獲、過濾與重組、信頭解碼、附件處理、信體內(nèi)容提取等模塊進(jìn)行了算法優(yōu)化。功能測試和驗(yàn)證結(jié)果表明,該系統(tǒng)穩(wěn)定、可擴(kuò)展,達(dá)到實(shí)時(shí)性要求。
Abstract:
Key words :

摘  要: 隨著互聯(lián)網(wǎng)的普及,SMTP/POP3協(xié)議傳輸方式下的郵件已成為最簡便、最經(jīng)濟(jì)的通信方式,但許多有害的郵件信息也隨之而來。針對這些問題,在VC開發(fā)環(huán)境下,研究并實(shí)現(xiàn)了基于Winpcap的郵件監(jiān)控及還原系統(tǒng)。該系統(tǒng)設(shè)計(jì)了多線程模塊,可以同時(shí)處理50個(gè)郵件及附件信息,并對網(wǎng)絡(luò)數(shù)據(jù)包的捕獲、過濾與重組、信頭解碼、附件處理、信體內(nèi)容提取等模塊進(jìn)行了算法優(yōu)化。功能測試和驗(yàn)證結(jié)果表明,該系統(tǒng)穩(wěn)定、可擴(kuò)展,達(dá)到實(shí)時(shí)性要求。
關(guān)鍵詞: Winpcap;數(shù)據(jù)包捕獲;郵件重組;多線程;郵件解碼

    當(dāng)前流行的電子郵件收發(fā)主要有兩種方式:第一種是使用Fire-Fox、IE等瀏覽器軟件登錄ISP的Web站點(diǎn);第二種是使用Foxmail、Outlook等郵件客戶端軟件連接郵件服務(wù)器,通過SMTP/POP3協(xié)議收發(fā)郵件。這里主要討論基于SMTP/POP3協(xié)議郵件信息的獲取與還原技術(shù)。實(shí)驗(yàn)結(jié)果表明,本系統(tǒng)有效實(shí)現(xiàn)了郵件信息捕獲和信息還原等功能,具有較高的效率和較好的時(shí)實(shí)性。
1 網(wǎng)絡(luò)監(jiān)控相關(guān)理論基礎(chǔ)
1.1 Winpcap原理

    Winpcap[1-3]為數(shù)據(jù)包捕獲提供了一套標(biāo)準(zhǔn)接口,它是由伯克利分組捕獲庫派生而來的分組捕獲庫,在Win32平臺上實(shí)現(xiàn)對底層包的捕獲,其體系結(jié)構(gòu)包括3個(gè)模塊:(1)NPF(內(nèi)核級的數(shù)據(jù)報(bào)過濾器)核心的包過濾驅(qū)動(dòng)程序;(2)底層的動(dòng)態(tài)連接庫Packet.dll(數(shù)據(jù)包低級驅(qū)動(dòng)程序庫)為Win32平臺提供了一個(gè)公共的接口;(3)高層的獨(dú)立于操作系統(tǒng)的庫Wpcap.dll(數(shù)據(jù)包高級驅(qū)動(dòng)程序庫)[4]。
1.2 網(wǎng)絡(luò)監(jiān)控及郵件信息獲取原理
    監(jiān)控主體可以分為郵件服務(wù)器端監(jiān)控、郵件客戶端監(jiān)控和第三方網(wǎng)絡(luò)監(jiān)控。本文闡述的是基于第三方網(wǎng)絡(luò)監(jiān)控的郵件安全監(jiān)控系統(tǒng),即將網(wǎng)絡(luò)上的關(guān)于郵件協(xié)議的數(shù)據(jù)包進(jìn)行截獲,并結(jié)合內(nèi)容檢測技術(shù)和協(xié)議分析技術(shù)對郵件進(jìn)行有效監(jiān)聽。這種監(jiān)控方式允許在各個(gè)組織內(nèi)部靈活配置監(jiān)控規(guī)則,并且響應(yīng)迅速。
    網(wǎng)卡具有4種工作模式:直接模式、多播傳送模式、廣播模式和混雜模式[5]。網(wǎng)卡的缺省工作模式包含廣播模式和直接模式,即它只接收廣播幀與發(fā)給對應(yīng)地址的幀。如果采用混雜模式,網(wǎng)卡將接收同一網(wǎng)絡(luò)內(nèi)所有主機(jī)所發(fā)送的數(shù)據(jù)包。
1.3 SMTP/POP3協(xié)議的郵件信息獲取
    由于系統(tǒng)主要分析SMTP/POP3協(xié)議傳輸方式下的郵件信息獲取,因此主要針對SMTP協(xié)議、POP3協(xié)議網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行分析。根據(jù)協(xié)議特點(diǎn)只需要對感興趣的網(wǎng)絡(luò)連接進(jìn)行數(shù)據(jù)重組,其他協(xié)議的網(wǎng)絡(luò)數(shù)據(jù)可以直接丟棄。所以只要獲取端口地址為25和110的數(shù)據(jù)包即可,如圖1所示。

2 監(jiān)控郵件及郵件信息還原的分析與設(shè)計(jì)
    整個(gè)系統(tǒng)的設(shè)計(jì)可分為兩個(gè)部分:一個(gè)郵件監(jiān)控部分,計(jì)算機(jī)運(yùn)行在Windows系統(tǒng)下,目的是截獲經(jīng)過網(wǎng)卡的郵件數(shù)據(jù)包;另一個(gè)是郵件解析和還原部分,主要目的是對SMTP/POP3文件進(jìn)行解析,還原成原來的可讀郵件信息,并對還原后的文件進(jìn)行閱讀查看、刪除等管理操作,系統(tǒng)的總體框架如圖2所示。系統(tǒng)由包捕獲功能模塊、IP協(xié)議數(shù)據(jù)解析模塊、TCP協(xié)議數(shù)據(jù)解析過濾模塊、郵件協(xié)議解析模塊、郵件解碼模塊、郵件保存模塊組成。

    下面重點(diǎn)分析系統(tǒng)中郵件重組和解碼等關(guān)鍵問題和算法的設(shè)計(jì)。
2.1 SMTP/POP3協(xié)議通信方式
    SMTP/POP3協(xié)議采用會話方式工作,通信雙方通過命令請求和命令響應(yīng)進(jìn)行交互,完成郵件的發(fā)送或接收。提取基于SMTP/POP3協(xié)議傳輸?shù)泥]件信息關(guān)鍵在于郵件會話的識別。下面以POP3為例,說明交互過程[6]。
2.2 POP3/SMTP還原總流程圖及還原算法
    基于POP3/SMTP協(xié)議的郵件信息還原涉及四方面的內(nèi)容:數(shù)據(jù)包保存、重要域值提取、郵件內(nèi)容的解析以及附件的解析還原。
    下面主要介紹面向傳輸層的數(shù)據(jù)分析還原,總流程如圖3所示。

    在對郵件協(xié)議交互過程有很深刻的認(rèn)識后可對電子郵件數(shù)據(jù)包進(jìn)行截獲。為了提高運(yùn)行速度,防止丟包現(xiàn)象,提高還原文件效率,優(yōu)化程序,作者創(chuàng)建3個(gè)線程分別執(zhí)行任務(wù):
    (1)主線程是Winpcap抓包,整個(gè)系統(tǒng)在貫徹主線程的基礎(chǔ)上對網(wǎng)絡(luò)層、傳輸層和應(yīng)用層進(jìn)行了分析和研究;
    (2)線程1是協(xié)議分析,網(wǎng)絡(luò)通信有很多協(xié)議,因此協(xié)議分析是關(guān)鍵,針對不同的協(xié)議有不同的分析方法,因此系統(tǒng)具有良好的可擴(kuò)展性,可方便地添加對新的網(wǎng)絡(luò)協(xié)議的支持;
    (3)線程2是對電子郵件數(shù)據(jù)包的解析并還原,因此當(dāng)捕獲郵件文件數(shù)據(jù)包時(shí),打開線程組2,可以同時(shí)循環(huán)接收和保存50個(gè)郵件,不過此時(shí)這些線程是休眠狀態(tài),可能客服端只是對SMTP/POP3服務(wù)器的一般交互過程,沒有郵件傳輸,因此要仔細(xì)觀察和分析整個(gè)郵件服務(wù)器交互過程,如果分析客戶端郵件發(fā)送動(dòng)作時(shí),觸發(fā)線程2進(jìn)行郵件信息的重組、保存,直到完整地保存了整個(gè)郵件及附件后關(guān)閉線程。
    此時(shí)作者設(shè)計(jì)了SMTP/POP3郵件信息重組子流程圖,如圖4所示。

    郵件數(shù)據(jù)包重組的策略也是文件還原系統(tǒng)的核心,下面詳細(xì)說明捕獲和重組算法:
    (1)根據(jù)SMTP/POP3命令的參數(shù),監(jiān)聽端口號25(或110)來分析服務(wù)器與客服端之間的交互過程;
    (2)對經(jīng)過網(wǎng)卡數(shù)據(jù)包的命令進(jìn)行字符串匹配,當(dāng)匹配的字符串DATA(Data)成功時(shí);客服端要向SMTP服務(wù)器發(fā)送郵件,創(chuàng)建文件名為EmailFile[file_num/50],這時(shí)打開可以同時(shí)處理50個(gè)郵件的線程2進(jìn)行監(jiān)聽,跳至(4);
    (3)當(dāng)匹配的字符串RETR成功時(shí),客服端要向POP3客戶端接收郵件,創(chuàng)建文件名為EmailFile1[file1_num/50],這時(shí)打開可以同時(shí)處理50個(gè)郵件的線程2進(jìn)行監(jiān)聽,跳至(5);
    (4)把SMTP數(shù)據(jù)包的當(dāng)前序列碼為sequence和數(shù)據(jù)偏移量data_len保存,設(shè)置標(biāo)記位STRAT=1下一個(gè)包的序列碼為next_seq_num[file_num/50]。其大小為:next_seq_num[file_num/50]=sequence+data_len;保存發(fā)送郵件;跳至(6);
    (5)把當(dāng)前POP3數(shù)據(jù)包的序列碼為sequence和數(shù)據(jù)偏移量data_len保存,設(shè)置標(biāo)記位STRAT1=1下一個(gè)包的序列碼為next_seq_num[file1_num/50],其大小為:next_seq_
num[file1_num/50]=sequence+data_len;保存接收郵件,跳至(7);
    (6)開始重組SMTP郵件數(shù)據(jù)包并把當(dāng)前序列碼記為sequence和數(shù)據(jù)偏移量 data_len,上次一個(gè)包的序列碼為next_seq_num[i]。以大小為50的循環(huán)序列進(jìn)行一一判斷:當(dāng)滿足next_seq_num[i]==sequence,則為該文件EmailFile[file_num/50]的數(shù)據(jù),不等則丟棄,這樣的目的是為了在監(jiān)聽多郵件傳輸時(shí)確保不會導(dǎo)致捕獲的數(shù)據(jù)混亂,跳至(8);
    (7)開始重組POP3郵件數(shù)據(jù)包并把當(dāng)前序列碼即為sequence和數(shù)據(jù)偏移量 data_len,上次一個(gè)包的序列碼為next_seq_num[i]。以周期為50的序列進(jìn)行判斷:next_
seq_num[i]==sequence,則為該文件EmailFile1[file1_num/50]的數(shù)據(jù),不等則丟棄,這樣的目的是為了在重組多郵件傳輸時(shí)確保不會導(dǎo)致捕獲的數(shù)據(jù)混亂;
    (8)當(dāng)數(shù)據(jù)包以一個(gè)QUIT命令來結(jié)束數(shù)據(jù)連接,則郵件SMTP/POP3郵件傳輸結(jié)束,設(shè)置標(biāo)記位STRAT為0,設(shè)置標(biāo)記位STRAT1為0;
    (9)關(guān)閉文件,關(guān)閉線程,停止郵件捕獲和重組子程序。
    從算法可以得出,首先識別郵件會話狀態(tài)的方法來確定郵件信息、重組郵件數(shù)據(jù)包,并保存在臨時(shí)文件夾,待郵件數(shù)據(jù)包解析和還原時(shí)調(diào)用。只需捕獲端口是80、25或110的數(shù)據(jù)包。
2.3 電子郵件內(nèi)容的提取與解碼模塊的設(shè)計(jì)與實(shí)現(xiàn)
    互聯(lián)網(wǎng)上使用的電子郵件基本都遵循MIME規(guī)范,MIME郵件傳遞實(shí)際是一個(gè)經(jīng)過特殊編碼并以約定格式進(jìn)行網(wǎng)絡(luò)傳輸?shù)?,因此只需提取存儲在郵件各種域中的位置、格式和編碼信息,根據(jù)這些信息從字符序列中提取出對應(yīng)的字符內(nèi)容對其進(jìn)行解碼,就可以得到需要的有關(guān)內(nèi)容。下面是帶附件和不帶附件的郵件信息提取和解析模塊設(shè)計(jì)。流程圖如圖5所示。

    這個(gè)部分主要是郵件內(nèi)容的關(guān)鍵字匹配,主要采用精確關(guān)鍵字匹配,它將待檢索的數(shù)據(jù)串和關(guān)鍵詞組成的模式串進(jìn)行逐字比較,只有在數(shù)據(jù)串中發(fā)現(xiàn)與模式串完全一致的部分之后,關(guān)鍵詞匹配才算成功。把郵件各部分內(nèi)容讀取到字符串?dāng)?shù)組中,再根據(jù)MIME規(guī)范進(jìn)行編寫相應(yīng)的解碼函數(shù),經(jīng)過郵件解析,提取電子郵件各部分(如發(fā)信人、收信人、主題、正文等),并對包含編碼的部分進(jìn)行解碼(Base64、Quoted-Printable等),還原為可理解的電子郵件。郵件正文數(shù)據(jù)包可能分幾個(gè)子段進(jìn)行傳輸,此時(shí)要循環(huán)調(diào)用函數(shù)mult_bodydecode(),當(dāng)有附件時(shí),先把正文內(nèi)容解碼之后,才進(jìn)行附件的解碼,這也是調(diào)用附件解碼函數(shù)Email_Attachment()對附件進(jìn)行還原。直到整個(gè)郵件解析完成才關(guān)閉文件和線程,完成郵件的還原。
    本系統(tǒng)主要是在編程上優(yōu)化,提高數(shù)據(jù)包的分析和解碼效率和速度,由本文可以看出郵件數(shù)據(jù)分析、過濾、重組、解析、還原算法建立在基于Winpcap基礎(chǔ)之上,因此,該系統(tǒng)保留了Winpcap的抓包特點(diǎn)的同時(shí),也克服了Winpcap部分不足。主要體現(xiàn)在以下兩點(diǎn):進(jìn)一步提高了分析的速度,同時(shí)大大提高分析的準(zhǔn)確性;節(jié)約了協(xié)議分析時(shí)間。
    文中設(shè)計(jì)的網(wǎng)絡(luò)安全監(jiān)控系統(tǒng),選擇Windows2000作系統(tǒng)平臺,利用VC++6.0編寫程序,它是基于系統(tǒng)的底層進(jìn)行設(shè)計(jì),與操作系統(tǒng)緊密結(jié)合。通過在局域網(wǎng)中的使用和分析,它能實(shí)時(shí)地、動(dòng)態(tài)地對局域網(wǎng)內(nèi)的所有上網(wǎng)主機(jī)進(jìn)行監(jiān)視、控制與管理,系統(tǒng)穩(wěn)定、效果好。

參考文獻(xiàn)
[1] 張偉,王韜,潘艷輝,等.基于Winpcap的數(shù)據(jù)包捕獲及應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29(7):1649-
1651.
[2] 循序漸進(jìn)學(xué)習(xí)使用Winpcap[EB/OL].中國協(xié)議分析網(wǎng).http://www.cnpaf.net/,2005.
[3] 李雪瑩,劉寶旭,許榕生.基于WinPcap的網(wǎng)絡(luò)監(jiān)控系統(tǒng)性能優(yōu)化[J].計(jì)算機(jī)工程,2004,30(1):8-9.
[4] 趙英男,張秉權(quán).MIME郵件結(jié)構(gòu)格式分析[J].軟件技術(shù),2001,20(2):50-53.
[5] 秦根建,張秉權(quán).網(wǎng)絡(luò)數(shù)據(jù)包截獲機(jī)制研究[J].兵工自動(dòng)化,2003,22(6):2-3.
[6] 唐燕.POP3協(xié)議解析及簡單實(shí)現(xiàn)[J].網(wǎng)絡(luò)通訊與安全,2007,16(2):951-952.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。