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

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

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

圖3 上位機軟件功能框圖
軟件的外部接口描述如圖4所示。用戶通過人機交互界面執行各種測試操作,查看操作結果,保存測試用的參數以及測試的結果。系統接收用戶的指令,通過設備驅動程序將上層傳遞下來的信息傳遞給不同的測試模塊,這些數據將會被保存在指定的存儲位置,等待硬件讀取。底層接口負責從指定位置讀取數據或者向指定位置寫入數據,實現向硬件傳達特定的操作指令,從而實現用戶指定的操作,最后,人機交互程序通過驅動程序將代表了操作結果的特定的數據取走,對數據進行分析,并給出測試的結果。

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

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

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

圖7 交互數據包截圖
signed int CreateFrm_EAPOL_Logoあ();
·生成EAPOL_EAP_RESPONSE數據包.
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 );
在測試中,使用了一臺國產路由器作為測試的認證者,使用其內置的服務作為認證服務器。上位機軟件捕獲測試系統與路由器之間的交互數據,捕獲的數據包被保存為PCAP格式,使用wireshark軟件查看捕獲的數據,如圖7所示。從圖中可以看到,該測試方案可以滿足802.1X接入認證測試的要求。
本設計針對802.1X接入認證的測試需求,利用了以太網板卡現有的部分功能,設計了模擬802.1X客戶端的測試方案。本設計在對硬件進行細微改動的基礎上,能夠很好的滿足802.1X接入認證測試的需求,同時也是對以太網板卡功能的很好的擴充。