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

摘  要: 隨著互聯(lián)網(wǎng)的普及,,SMTP/POP3協(xié)議傳輸方式下的郵件已成為最簡(jiǎn)便、最經(jīng)濟(jì)的通信方式,,但許多有害的郵件信息也隨之而來(lái),。針對(duì)這些問(wèn)題,在VC開(kāi)發(fā)環(huán)境下,,研究并實(shí)現(xiàn)了基于Winpcap的郵件監(jiān)控及還原系統(tǒng),。該系統(tǒng)設(shè)計(jì)了多線程模塊,可以同時(shí)處理50個(gè)郵件及附件信息,,并對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的捕獲,、過(guò)濾與重組、信頭解碼,、附件處理,、信體內(nèi)容提取等模塊進(jìn)行了算法優(yōu)化。功能測(cè)試和驗(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ù)器,通過(guò)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)接口,它是由伯克利分組捕獲庫(kù)派生而來(lái)的分組捕獲庫(kù),,在Win32平臺(tái)上實(shí)現(xiàn)對(duì)底層包的捕獲,,其體系結(jié)構(gòu)包括3個(gè)模塊:(1)NPF(內(nèi)核級(jí)的數(shù)據(jù)報(bào)過(guò)濾器)核心的包過(guò)濾驅(qū)動(dòng)程序;(2)底層的動(dòng)態(tài)連接庫(kù)Packet.dll(數(shù)據(jù)包低級(jí)驅(qū)動(dòng)程序庫(kù))為Win32平臺(tái)提供了一個(gè)公共的接口,;(3)高層的獨(dú)立于操作系統(tǒng)的庫(kù)Wpcap.dll(數(shù)據(jù)包高級(jí)驅(qū)動(dòng)程序庫(kù))[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)容檢測(cè)技術(shù)和協(xié)議分析技術(shù)對(duì)郵件進(jìn)行有效監(jiān)聽(tīng),。這種監(jiān)控方式允許在各個(gè)組織內(nèi)部靈活配置監(jiān)控規(guī)則,,并且響應(yīng)迅速。
    網(wǎng)卡具有4種工作模式:直接模式,、多播傳送模式,、廣播模式和混雜模式[5]。網(wǎng)卡的缺省工作模式包含廣播模式和直接模式,,即它只接收廣播幀與發(fā)給對(duì)應(yīng)地址的幀,。如果采用混雜模式,網(wǎng)卡將接收同一網(wǎng)絡(luò)內(nèi)所有主機(jī)所發(fā)送的數(shù)據(jù)包,。
1.3 SMTP/POP3協(xié)議的郵件信息獲取
    由于系統(tǒng)主要分析SMTP/POP3協(xié)議傳輸方式下的郵件信息獲取,,因此主要針對(duì)SMTP協(xié)議、POP3協(xié)議網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行分析,。根據(jù)協(xié)議特點(diǎn)只需要對(duì)感興趣的網(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)過(guò)網(wǎng)卡的郵件數(shù)據(jù)包,;另一個(gè)是郵件解析和還原部分,,主要目的是對(duì)SMTP/POP3文件進(jìn)行解析,還原成原來(lái)的可讀郵件信息,,并對(duì)還原后的文件進(jìn)行閱讀查看,、刪除等管理操作,系統(tǒng)的總體框架如圖2所示,。系統(tǒng)由包捕獲功能模塊,、IP協(xié)議數(shù)據(jù)解析模塊、TCP協(xié)議數(shù)據(jù)解析過(guò)濾模塊,、郵件協(xié)議解析模塊,、郵件解碼模塊、郵件保存模塊組成,。

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

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

    郵件數(shù)據(jù)包重組的策略也是文件還原系統(tǒng)的核心,,下面詳細(xì)說(shuō)明捕獲和重組算法:
    (1)根據(jù)SMTP/POP3命令的參數(shù),監(jiān)聽(tīng)端口號(hào)25(或110)來(lái)分析服務(wù)器與客服端之間的交互過(guò)程,;
    (2)對(duì)經(jīng)過(guò)網(wǎng)卡數(shù)據(jù)包的命令進(jìn)行字符串匹配,,當(dāng)匹配的字符串DATA(Data)成功時(shí);客服端要向SMTP服務(wù)器發(fā)送郵件,,創(chuàng)建文件名為EmailFile[file_num/50],,這時(shí)打開(kāi)可以同時(shí)處理50個(gè)郵件的線程2進(jìn)行監(jiān)聽(tīng),跳至(4);
    (3)當(dāng)匹配的字符串RETR成功時(shí),,客服端要向POP3客戶端接收郵件,,創(chuàng)建文件名為EmailFile1[file1_num/50],這時(shí)打開(kāi)可以同時(shí)處理50個(gè)郵件的線程2進(jìn)行監(jiān)聽(tīng),跳至(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)開(kāi)始重組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)聽(tīng)多郵件傳輸時(shí)確保不會(huì)導(dǎo)致捕獲的數(shù)據(jù)混亂,跳至(8),;
    (7)開(kāi)始重組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í)確保不會(huì)導(dǎo)致捕獲的數(shù)據(jù)混亂,;
    (8)當(dāng)數(shù)據(jù)包以一個(gè)QUIT命令來(lái)結(jié)束數(shù)據(jù)連接,,則郵件SMTP/POP3郵件傳輸結(jié)束,設(shè)置標(biāo)記位STRAT為0,,設(shè)置標(biāo)記位STRAT1為0,;
    (9)關(guān)閉文件,關(guān)閉線程,,停止郵件捕獲和重組子程序,。
    從算法可以得出,首先識(shí)別郵件會(huì)話狀態(tài)的方法來(lá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)過(guò)特殊編碼并以約定格式進(jìn)行網(wǎng)絡(luò)傳輸?shù)?,因此只需提取存?chǔ)在郵件各種域中的位置、格式和編碼信息,,根據(jù)這些信息從字符序列中提取出對(duì)應(yīng)的字符內(nèi)容對(duì)其進(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)過(guò)郵件解析,,提取電子郵件各部分(如發(fā)信人,、收信人、主題,、正文等),,并對(duì)包含編碼的部分進(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()對(duì)附件進(jìn)行還原,。直到整個(gè)郵件解析完成才關(guān)閉文件和線程,完成郵件的還原,。
    本系統(tǒng)主要是在編程上優(yōu)化,,提高數(shù)據(jù)包的分析和解碼效率和速度,由本文可以看出郵件數(shù)據(jù)分析,、過(guò)濾,、重組、解析,、還原算法建立在基于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)平臺(tái),,利用VC++6.0編寫程序,,它是基于系統(tǒng)的底層進(jìn)行設(shè)計(jì),與操作系統(tǒng)緊密結(jié)合,。通過(guò)在局域網(wǎng)中的使用和分析,,它能實(shí)時(shí)地、動(dòng)態(tài)地對(duì)局域網(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].中國(guó)協(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é)議解析及簡(jiǎn)單實(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)載,。