張奎,袁海軍
(中國電子科技集團(tuán)公司第四十一研究所,山東青島,266555)
IEEE802.lX協(xié)議起源于802.11協(xié)議,802.11協(xié)議是無線網(wǎng)接入?yún)f(xié)議,是一個國際標(biāo)準(zhǔn)協(xié)議[1]。本文將闡述利用以太網(wǎng)板卡的現(xiàn)有功能,由測試設(shè)備模擬若干客戶端,測試被測設(shè)備是否能夠良好支持802.1X協(xié)議,通過統(tǒng)計分析會話的流量,測試被測試設(shè)備對網(wǎng)絡(luò)資源的控制能力。
IEEE802.1X全稱為“基于端口的網(wǎng)絡(luò)接入控制協(xié)議”,在充分利用IEEE802局域網(wǎng)優(yōu)勢的基礎(chǔ)上,提供了一種對連接到局域網(wǎng)的用戶進(jìn)行認(rèn)證和授權(quán)的手段[1]。它在網(wǎng)絡(luò)設(shè)備的物理接入級對接入設(shè)備進(jìn)行認(rèn)證和控制,提供了一種既可用于有線網(wǎng)絡(luò),也可以用于無線網(wǎng)絡(luò)的用戶認(rèn)證和密鑰管理的框架,可以確保用戶只有在接入認(rèn)證通過以后才能連接到網(wǎng)絡(luò)。802.IX定義了IEEE802網(wǎng)絡(luò)設(shè)備是如何使用EAP(可擴展認(rèn)證協(xié)議)來進(jìn)行網(wǎng)絡(luò)準(zhǔn)入認(rèn)證的。在802.IX中,采用EAP作為網(wǎng)絡(luò)接入身份認(rèn)證信息的交互機制,EAP消息一般會被封裝在EAPOL數(shù)據(jù)包中[1]。從中可以看到,EAP只是一種封裝格式,而不是一個具體的認(rèn)證協(xié)議,這種機制確保了客戶端設(shè)備和認(rèn)證端設(shè)備均可使用比較靈活的網(wǎng)絡(luò)接入模式來進(jìn)行接入認(rèn)證[2]。EAPOL作為一種報文封裝格式,主要用于在客戶端和網(wǎng)絡(luò)接入點之間傳送EAP協(xié)議數(shù)據(jù),部分交互的數(shù)據(jù)還將使用MD5等方式進(jìn)行加密處理[3]。EAP數(shù)據(jù)被作為二層以太網(wǎng)幀的負(fù)載進(jìn)行傳輸,這樣就可以方便的在以太網(wǎng)上傳輸EAP數(shù)據(jù)包。
802.lX是一種根據(jù)客戶端設(shè)備的不同安全狀況而制定的網(wǎng)絡(luò)接入認(rèn)證的不同方法策略的集合。802.11X認(rèn)證體系結(jié)構(gòu)如圖1所示,它包括3個部分:認(rèn)證申請者、認(rèn)證者、認(rèn)證服務(wù)器。認(rèn)證申請者通常是位于局域網(wǎng)段一端的一個客戶端設(shè)備, 該客戶端設(shè)備需要支持EAPOL協(xié)議。認(rèn)證者是位于局域網(wǎng)另一端的一個設(shè)備,它對所連接的客戶端進(jìn)行認(rèn)證。認(rèn)證服務(wù)器是為認(rèn)證者提供認(rèn)證服務(wù)的實體,用于實現(xiàn)對客戶端進(jìn)行認(rèn)證、授權(quán)和計費[4]。

圖1 802.1X系統(tǒng)結(jié)構(gòu)
測試系統(tǒng)采用上位機和下位機(板卡)協(xié)調(diào)工作的方式進(jìn)行測試,系統(tǒng)總體設(shè)計原理如圖2所示。其中,下位機硬件平臺采用FPGA+CPU的開發(fā)結(jié)構(gòu)。物理接口分為RJ45和SFP兩種接口,向測試設(shè)備提供電纜和光纖的連接方式;以太網(wǎng)接口模塊采用以太網(wǎng)物理層收發(fā)器,提供數(shù)據(jù)的發(fā)送和接收功能;FPGA創(chuàng)建數(shù)據(jù)發(fā)送和接收的通道,按照指定的發(fā)送模式傳輸數(shù)據(jù),并根據(jù)捕獲規(guī)則過濾數(shù)據(jù);數(shù)據(jù)緩存模塊存儲捕獲的數(shù)據(jù)和數(shù)據(jù)包的索引信息;CPU模塊執(zhí)行上位機下達(dá)的處理命令,調(diào)度管理FPGA,從而實現(xiàn)對外圍設(shè)備的控制,保證各部分的同步工作,同時也負(fù)責(zé)向上位機傳輸數(shù)據(jù)。上位機處理塊控制整個系統(tǒng)的運行,它通過CPCI總線與板塊通信,提供人機交互的接口,根據(jù)人機交互的結(jié)果產(chǎn)生控制指令,并向處理器發(fā)送控制指令,控制測試的流程,處理測試產(chǎn)生的數(shù)據(jù),最終生成測試結(jié)果。

圖2 系統(tǒng)總體設(shè)計原理圖
在軟件設(shè)計方面,為了有效提高軟件開發(fā)的效率,提高代碼的可控制性、可維護(hù)性,降低不同功能之間的耦合性,按照功能對上位機軟件進(jìn)行了劃分,如圖3所示。主機軟件從上到下可以分為測試控制層,測試功能層,驅(qū)動層。其中,測試控制層是主機軟件的控制中心,主要負(fù)責(zé)人機交互,各種資源的創(chuàng)建,線程的響應(yīng),數(shù)據(jù)的處理,文件的保存等。測試功能層負(fù)責(zé)執(zhí)行用戶的各種操作,啟動和停止各種測試。驅(qū)動層負(fù)責(zé)上位機與板級的通信,下達(dá)上位機的各種操作指令,上傳數(shù)據(jù)。

圖3 上位機軟件功能框圖
軟件的外部接口描述如圖4所示。用戶通過人機交互界面執(zhí)行各種測試操作,查看操作結(jié)果,保存測試用的參數(shù)以及測試的結(jié)果。系統(tǒng)接收用戶的指令,通過設(shè)備驅(qū)動程序?qū)⑸蠈觽鬟f下來的信息傳遞給不同的測試模塊,這些數(shù)據(jù)將會被保存在指定的存儲位置,等待硬件讀取。底層接口負(fù)責(zé)從指定位置讀取數(shù)據(jù)或者向指定位置寫入數(shù)據(jù),實現(xiàn)向硬件傳達(dá)特定的操作指令,從而實現(xiàn)用戶指定的操作,最后,人機交互程序通過驅(qū)動程序?qū)⒋砹瞬僮鹘Y(jié)果的特定的數(shù)據(jù)取走,對數(shù)據(jù)進(jìn)行分析,并給出測試的結(jié)果。

圖4 軟件內(nèi)部接口
軟件內(nèi)部接口描述如圖5所示。上層應(yīng)用程序與各測試模塊的軟件接口是通過一組接口函數(shù)來實現(xiàn)。接口函數(shù)的定義,是根據(jù)軟件的功能劃分來界定的。人機交互接口通過數(shù)據(jù)發(fā)送模塊產(chǎn)生測試數(shù)據(jù)流,并定制發(fā)送的模式。接收捕獲模塊定制捕獲數(shù)據(jù)的規(guī)則,過濾、存儲指定的數(shù)據(jù)流。數(shù)據(jù)統(tǒng)計模塊對數(shù)據(jù)進(jìn)行統(tǒng)計分析,記錄數(shù)據(jù)流的特征。同時,在定義接口函數(shù)時,為每個測試模塊定義了一組函數(shù)以實現(xiàn)對該測試模塊的控制。該接口函數(shù)是該模塊單獨使用的,因此,最后每組接口函數(shù)都將被打包成一個單獨的文件,以動態(tài)鏈接庫的形式對外提供。主機程序只需要一個聲明了該動態(tài)鏈接庫中的函數(shù)的頭文件和一個DLL文件,即可實現(xiàn)對相應(yīng)模塊的控制功能。驅(qū)動程序是上位機與板級程序通訊的橋梁,負(fù)責(zé)對硬件的讀寫訪問,該程序?qū)⒆鳛橄到y(tǒng)的驅(qū)動的一部分存在,為所有上層的控制程序服務(wù)。

圖5 軟件內(nèi)部接口示意圖
在該測試系統(tǒng)中,上位機操作系統(tǒng)采用了XP系統(tǒng),軟件采用VC++6.0開發(fā)工具進(jìn)行設(shè)計,模擬客戶端的程序流程如圖6所示。在實現(xiàn)過程中,涉及的主要的數(shù)據(jù)結(jié)構(gòu)和函數(shù)接口如下所示:
(1)保存數(shù)據(jù)包的參數(shù)信息的數(shù)據(jù)結(jié)構(gòu)。
typedef struct
{ unsigned char u8Code; // EAP數(shù)據(jù)代碼.
unsigned char u8Identifier; // 匹配請求和應(yīng)答操作.
unsigned short u16Length; // 長度,包括code、identifier,、length、data field.
unsigned char u8Type; // 標(biāo)識請求和應(yīng)答的類型.
unsigned char pu8TypeData[1024];
// 請求和應(yīng)答的數(shù)據(jù).
unsigned short u16TypeDataLen;
// 請求和應(yīng)答的數(shù)據(jù)的長度.
signed char ps8FailReason[1024];
// 描述失敗的原因.
unsigned short u16FailReasonLen;

圖6 模擬客戶端程序流程圖
//描述失敗的原因的數(shù)據(jù)的長度.
}EAPOL_EAP_PACKET;
typedef struct
{ unsigned char u8ProtocolVersion;
unsigned char u8PacketType;
unsigned short u16PacketBodyLength;
EAPOL_EAP_PACKET eapPacket;
}EAPOL_PDU_FORMAT;
(2)產(chǎn)生各種交互報文的函數(shù)接口
·創(chuàng)建一個EAPOL_Start幀.
signed int CreateFrm_EAPOL_Start();
·創(chuàng)建一個EAPOL_Logoあ幀.

圖7 交互數(shù)據(jù)包截圖
signed int CreateFrm_EAPOL_Logoあ();
·生成EAPOL_EAP_RESPONSE數(shù)據(jù)包.
signed int CreateFrm_EAPOL_EapResponse( EAPOL_PDU_FORMAT& eapolPdu );
·檢查這是否是一個合法的EAPOL包,返回包的類型.
signed int ChkFrm_IsValid-EapolPacket( unsigned char*pu8FrmData, unsigned short u16FrmLen, EAPOL_PDU_FORMAT& eapolPdu );
在測試中,使用了一臺國產(chǎn)路由器作為測試的認(rèn)證者,使用其內(nèi)置的服務(wù)作為認(rèn)證服務(wù)器。上位機軟件捕獲測試系統(tǒng)與路由器之間的交互數(shù)據(jù),捕獲的數(shù)據(jù)包被保存為PCAP格式,使用wireshark軟件查看捕獲的數(shù)據(jù),如圖7所示。從圖中可以看到,該測試方案可以滿足802.1X接入認(rèn)證測試的要求。
本設(shè)計針對802.1X接入認(rèn)證的測試需求,利用了以太網(wǎng)板卡現(xiàn)有的部分功能,設(shè)計了模擬802.1X客戶端的測試方案。本設(shè)計在對硬件進(jìn)行細(xì)微改動的基礎(chǔ)上,能夠很好的滿足802.1X接入認(rèn)證測試的需求,同時也是對以太網(wǎng)板卡功能的很好的擴充。